diff --git a/eos/__init__.py b/eos/__init__.py
new file mode 100755
index 000000000..208d2b1df
--- /dev/null
+++ b/eos/__init__.py
@@ -0,0 +1,7 @@
+version = "0.2.3"
+tag = "git"
+
+def test():
+ import tests.runTests
+ import unittest
+ unittest.main(defaultTest="discover", testLoader=tests.runTests.loader)
diff --git a/eos/capSim.py b/eos/capSim.py
new file mode 100755
index 000000000..90734d8e1
--- /dev/null
+++ b/eos/capSim.py
@@ -0,0 +1,204 @@
+import heapq
+from math import sqrt, exp
+import time
+
+
+DAY = 24 * 60 * 60 * 1000
+
+def lcm(a,b):
+ n = a*b
+ while b:
+ a, b = b, a % b
+ return n / a
+
+
+class CapSimulator(object):
+ """Entity's EVE Capacitor Simulator"""
+
+ def __init__(self):
+ # simulator defaults (change in instance, not here)
+
+ self.capacitorCapacity = 100
+ self.capacitorRecharge = 1000
+
+ # max simulated time.
+ self.t_max = DAY
+
+ # take reloads into account?
+ self.reload = False
+
+ # stagger activations of identical modules?
+ self.stagger = False
+
+ # scale activation duration and capNeed to values that ease the
+ # calculation at the cost of accuracy?
+ self.scale = False
+
+ # millisecond resolutions for scaling
+ self.scale_resolutions = (100, 50, 25, 10)
+
+ # relevant decimal digits of capacitor for LCM period optimization
+ self.stability_precision = 1
+
+
+ def scale_activation(self, duration, capNeed):
+ for res in self.scale_resolutions:
+ mod = duration % res
+ if mod:
+ if mod > res/2.0:
+ mod = res-mod
+ else:
+ mod = -mod
+
+ if abs(mod) <= duration/100.0:
+ # only adjust if the adjustment is less than 1%
+ duration += mod
+ capNeed += float(mod)/duration * capNeed
+ break
+
+ return duration, capNeed
+
+ def init(self, modules):
+ """prepare modules. a list of (duration, capNeed, clipSize) tuples is
+ expected, with clipSize 0 if the module has infinite ammo.
+ """
+ mods = {}
+ for module in modules:
+ if module in mods:
+ mods[module] += 1
+ else:
+ mods[module] = 1
+
+ self.modules = mods
+
+
+ def reset(self):
+ """Reset the simulator state"""
+ self.state = []
+ period = 1
+ disable_period = False
+
+ for (duration, capNeed, clipSize), amount in self.modules.iteritems():
+ if self.scale:
+ duration, capNeed = self.scale_activation(duration, capNeed)
+
+ if self.stagger:
+ duration = int(duration/amount)
+ else:
+ capNeed *= amount
+
+ period = lcm(period, duration)
+
+ # set clipSize to infinite if reloads are disabled unless it's
+ # a cap booster module.
+ if not self.reload and capNeed > 0:
+ clipSize = 0
+
+ # period optimization doesn't work when reloads are active.
+ if clipSize:
+ disable_period = True
+
+ heapq.heappush(self.state, [0, duration, capNeed, 0, clipSize])
+
+
+ if disable_period:
+ self.period = self.t_max
+ else:
+ self.period = period
+
+
+ def run(self):
+ """Run the simulation"""
+
+ start = time.time()
+
+ self.reset()
+
+ push = heapq.heappush
+ pop = heapq.heappop
+
+ state = self.state
+ stability_precision = self.stability_precision
+ period = self.period
+
+ iterations = 0
+
+ capCapacity = self.capacitorCapacity
+ tau = self.capacitorRecharge / 5.0
+
+ cap_wrap = capCapacity # cap value at last period
+ cap_lowest = capCapacity # lowest cap value encountered
+ cap_lowest_pre = capCapacity # lowest cap value before activations
+ cap = capCapacity # current cap value
+ t_wrap = self.period # point in time of next period
+
+ t_now = t_last = 0
+ t_max = self.t_max
+
+ while 1:
+ activation = pop(state)
+ t_now, duration, capNeed, shot, clipSize = activation
+ if t_now >= t_max:
+ break
+
+ cap = ((1.0+(sqrt(cap/capCapacity)-1.0)*exp((t_last-t_now)/tau))**2)*capCapacity
+
+ if t_now != t_last:
+ if cap < cap_lowest_pre:
+ cap_lowest_pre = cap
+ if t_now == t_wrap:
+ # history is repeating itself, so if we have more cap now than last
+ # time this happened, it is a stable setup.
+ if cap >= cap_wrap:
+ break
+ cap_wrap = round(cap, stability_precision)
+ t_wrap += period
+
+ cap -= capNeed
+ if cap > capCapacity:
+ cap = capCapacity
+
+ iterations += 1
+
+ if cap < cap_lowest:
+ if cap < 0.0:
+ break
+ cap_lowest = cap
+
+ t_last = t_now
+
+ # queue the next activation of this module
+ t_now += duration
+ shot += 1
+ if clipSize:
+ if shot % clipSize == 0:
+ shot = 0
+ t_now += 10000 # include reload time
+ activation[0] = t_now
+ activation[3] = shot
+
+ push(state, activation)
+ push(state, activation)
+
+ # update instance with relevant results.
+ self.t = t_last
+ self.iterations = iterations
+
+ # calculate EVE's stability value
+ try:
+ avgDrain = reduce(float.__add__, map(lambda x: x[2]/x[1], self.state), 0.0)
+ self.cap_stable_eve = 0.25 * (1.0 + sqrt(-(2.0 * avgDrain * tau - capCapacity)/capCapacity)) ** 2
+ except ValueError:
+ self.cap_stable_eve = 0.0
+
+
+ if cap > 0.0:
+ # capacitor low/high water marks
+ self.cap_stable_low = cap_lowest
+ self.cap_stable_high = cap_lowest_pre
+ else:
+ self.cap_stable_low =\
+ self.cap_stable_high = 0.0
+
+
+ self.runtime = time.time()-start
diff --git a/eos/config.py b/eos/config.py
new file mode 100755
index 000000000..192982e1f
--- /dev/null
+++ b/eos/config.py
@@ -0,0 +1,11 @@
+import os.path
+import sys
+
+debug = False
+gamedataCache = True
+saveddataCache = True
+gamedata_connectionstring = 'sqlite:///' + os.path.expanduser(os.path.join("~", ".pyfa","eve.db"))
+saveddata_connectionstring = 'sqlite:///:memory:'
+
+#Autodetect path, only change if the autodetection bugs out.
+path = os.path.dirname(unicode(__file__, sys.getfilesystemencoding()))
diff --git a/eos/db/__init__.py b/eos/db/__init__.py
new file mode 100755
index 000000000..113e3f09d
--- /dev/null
+++ b/eos/db/__init__.py
@@ -0,0 +1,77 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+import threading
+
+from sqlalchemy import MetaData, create_engine
+from sqlalchemy.orm import sessionmaker, scoped_session
+from sqlalchemy.ext.declarative import declarative_base
+from sqlalchemy import pool
+
+from eos import config
+import migration
+
+class ReadOnlyException(Exception):
+ pass
+
+gamedata_connectionstring = config.gamedata_connectionstring
+if callable(gamedata_connectionstring):
+ gamedata_engine = create_engine("sqlite://", creator=gamedata_connectionstring, echo = config.debug)
+else:
+ gamedata_engine = create_engine(gamedata_connectionstring, echo = config.debug)
+
+gamedata_meta = MetaData()
+gamedata_meta.bind = gamedata_engine
+gamedata_session = sessionmaker(bind=gamedata_engine, autoflush=False, expire_on_commit=False)()
+
+saveddata_connectionstring = config.saveddata_connectionstring
+if saveddata_connectionstring is not None:
+ if callable(saveddata_connectionstring):
+ saveddata_engine = create_engine(creator=saveddata_connectionstring, echo=config.debug)
+ else:
+ saveddata_engine = create_engine(saveddata_connectionstring, echo=config.debug)
+
+ saveddata_meta = MetaData()
+ saveddata_meta.bind = saveddata_engine
+ migration.update(saveddata_engine)
+ saveddata_session = sessionmaker(bind=saveddata_engine, autoflush=False, expire_on_commit=False)()
+
+# Lock controlling any changes introduced to session
+sd_lock = threading.Lock()
+
+#Import all the definitions for all our database stuff
+from eos.db.gamedata import *
+from eos.db.saveddata import *
+
+#Import queries
+from eos.db.gamedata.queries import getItem, searchItems, getVariations, getItemsByCategory, directAttributeRequest, \
+ getMarketGroup, getGroup, getCategory, getAttributeInfo, getMetaData, getMetaGroup
+from eos.db.saveddata.queries import getUser, getCharacter, getFit, getFitsWithShip, countFitsWithShip, searchFits, \
+ getCharacterList, getPrice, getDamagePatternList, getDamagePattern, \
+ getFitList, getFleetList, getFleet, save, remove, commit, add, \
+ getCharactersForUser, getMiscData, getSquadsIDsWithFitID, getWing, \
+ getSquad
+
+#If using in memory saveddata, you'll want to reflect it so the data structure is good.
+if config.saveddata_connectionstring == "sqlite:///:memory:":
+ saveddata_meta.create_all()
+
+def rollback():
+ with sd_lock:
+ saveddata_session.rollback()
diff --git a/eos/db/gamedata/__init__.py b/eos/db/gamedata/__init__.py
new file mode 100755
index 000000000..83fe03c97
--- /dev/null
+++ b/eos/db/gamedata/__init__.py
@@ -0,0 +1,2 @@
+__all__ = ["attribute", "category", "effect", "group", "metaData",
+ "icon", "item", "marketGroup", "metaGroup", "unit"]
diff --git a/eos/db/gamedata/attribute.py b/eos/db/gamedata/attribute.py
new file mode 100755
index 000000000..e16463e1d
--- /dev/null
+++ b/eos/db/gamedata/attribute.py
@@ -0,0 +1,59 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from sqlalchemy import Table, Column, Integer, Float, Unicode, ForeignKey, String, Boolean
+from sqlalchemy.orm import relation, mapper, synonym, deferred
+from sqlalchemy.ext.associationproxy import association_proxy
+from eos.types import Attribute, Icon, AttributeInfo, Unit
+from eos.db import gamedata_meta
+typeattributes_table = Table("dgmtypeattribs", gamedata_meta,
+ Column("value", Float),
+ Column("typeID", Integer, ForeignKey("invtypes.typeID"), primary_key=True, index=True),
+ Column("attributeID", ForeignKey("dgmattribs.attributeID"), primary_key=True))
+
+attributes_table = Table("dgmattribs", gamedata_meta,
+ Column("attributeID", Integer, primary_key = True),
+ Column("attributeName", String),
+ Column("defaultValue", Float),
+ Column("description", Unicode),
+ Column("published", Boolean),
+ Column("displayName", String),
+ Column("highIsGood", Boolean),
+ Column("iconID", Integer, ForeignKey("icons.iconID")),
+ Column("unitID", Integer, ForeignKey("dgmunits.unitID")))
+
+mapper(Attribute, typeattributes_table,
+ properties = {"info": relation(AttributeInfo, lazy=False)})
+
+mapper(AttributeInfo, attributes_table,
+ properties = {"icon" : relation(Icon),
+ "unit": relation(Unit),
+ "ID": synonym("attributeID"),
+ "name": synonym("attributeName"),
+ "description" : deferred(attributes_table.c.description)})
+
+Attribute.ID = association_proxy("info", "attributeID")
+Attribute.name = association_proxy("info", "attributeName")
+Attribute.description = association_proxy("info", "description")
+Attribute.published = association_proxy("info", "published")
+Attribute.displayName = association_proxy("info", "displayName")
+Attribute.highIsGood = association_proxy("info", "highIsGood")
+Attribute.iconID = association_proxy("info", "iconID")
+Attribute.icon = association_proxy("info", "icon")
+Attribute.unit = association_proxy("info", "unit")
diff --git a/eos/db/gamedata/category.py b/eos/db/gamedata/category.py
new file mode 100755
index 000000000..a44b7d663
--- /dev/null
+++ b/eos/db/gamedata/category.py
@@ -0,0 +1,37 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from sqlalchemy import Column, String, Integer, ForeignKey, Boolean, Table
+from sqlalchemy.orm import relation, mapper, synonym, deferred
+
+from eos.db import gamedata_meta
+from eos.types import Category, Icon
+
+categories_table = Table("invcategories", gamedata_meta,
+ Column("categoryID", Integer, primary_key = True),
+ Column("categoryName", String),
+ Column("description", String),
+ Column("published", Boolean),
+ Column("iconID", Integer, ForeignKey("icons.iconID")))
+
+mapper(Category, categories_table,
+ properties = {"icon" : relation(Icon),
+ "ID" : synonym("categoryID"),
+ "name" : synonym("categoryName"),
+ "description" : deferred(categories_table.c.description)})
diff --git a/eos/db/gamedata/effect.py b/eos/db/gamedata/effect.py
new file mode 100755
index 000000000..21d7613c6
--- /dev/null
+++ b/eos/db/gamedata/effect.py
@@ -0,0 +1,50 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from sqlalchemy import Column, String, Integer, Boolean, Table, ForeignKey
+from sqlalchemy.ext.associationproxy import association_proxy
+from sqlalchemy.orm import mapper, synonym, relation, deferred
+from eos.types import Effect, EffectInfo
+from eos.db import gamedata_meta
+
+typeeffects_table = Table("dgmtypeeffects", gamedata_meta,
+ Column("typeID", Integer, ForeignKey("invtypes.typeID"), primary_key=True, index=True),
+ Column("effectID", Integer, ForeignKey("dgmeffects.effectID"), primary_key=True))
+
+effects_table = Table("dgmeffects", gamedata_meta,
+ Column("effectID", Integer, primary_key = True),
+ Column("effectName", String),
+ Column("description", String),
+ Column("published", Boolean),
+ Column("isAssistance", Boolean),
+ Column("isOffensive", Boolean))
+
+
+mapper(EffectInfo, effects_table,
+ properties = {"ID" : synonym("effectID"),
+ "name" : synonym("effectName"),
+ "description" : deferred(effects_table.c.description)})
+
+mapper(Effect, typeeffects_table,
+ properties = {"ID": synonym("effectID"),
+ "info": relation(EffectInfo, lazy=False)})
+
+Effect.name = association_proxy("info", "name")
+Effect.description = association_proxy("info", "description")
+Effect.published = association_proxy("info", "published")
diff --git a/eos/db/gamedata/group.py b/eos/db/gamedata/group.py
new file mode 100755
index 000000000..14939c040
--- /dev/null
+++ b/eos/db/gamedata/group.py
@@ -0,0 +1,39 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from sqlalchemy import Column, String, Integer, Boolean, ForeignKey, Table
+from sqlalchemy.orm import relation, mapper, synonym, deferred
+
+from eos.db import gamedata_meta
+from eos.types import Group, Icon, Category
+
+groups_table = Table("invgroups", gamedata_meta,
+ Column("groupID", Integer, primary_key = True),
+ Column("groupName", String),
+ Column("description", String),
+ Column("published", Boolean),
+ Column("categoryID", Integer, ForeignKey("invcategories.categoryID")),
+ Column("iconID", Integer, ForeignKey("icons.iconID")))
+
+mapper(Group, groups_table,
+ properties = {"category" : relation(Category, backref = "groups"),
+ "icon" : relation(Icon),
+ "ID" : synonym("groupID"),
+ "name" : synonym("groupName"),
+ "description" : deferred(groups_table.c.description)})
diff --git a/eos/db/gamedata/icon.py b/eos/db/gamedata/icon.py
new file mode 100755
index 000000000..9aeecdf87
--- /dev/null
+++ b/eos/db/gamedata/icon.py
@@ -0,0 +1,33 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from sqlalchemy import Column, String, Integer, Table
+from sqlalchemy.orm import mapper, synonym, deferred
+
+from eos.db import gamedata_meta
+from eos.types import Icon
+
+icons_table = Table("icons", gamedata_meta,
+ Column("iconID", Integer, primary_key = True),
+ Column("description", String),
+ Column("iconFile", String))
+
+mapper(Icon, icons_table,
+ properties = {"ID" : synonym("iconID"),
+ "description" : deferred(icons_table.c.description)})
diff --git a/eos/db/gamedata/item.py b/eos/db/gamedata/item.py
new file mode 100755
index 000000000..66d32e642
--- /dev/null
+++ b/eos/db/gamedata/item.py
@@ -0,0 +1,57 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from sqlalchemy import Column, String, Integer, Boolean, ForeignKey, Table, Float
+from sqlalchemy.orm import relation, mapper, synonym, deferred
+from sqlalchemy.ext.associationproxy import association_proxy
+from sqlalchemy.orm.collections import attribute_mapped_collection
+
+from eos.db import gamedata_meta
+from eos.types import Icon, Attribute, Item, Effect, MetaType, Group
+
+items_table = Table("invtypes", gamedata_meta,
+ Column("typeID", Integer, primary_key = True),
+ Column("typeName", String, index=True),
+ Column("description", String),
+ Column("raceID", Integer),
+ Column("volume", Float),
+ Column("mass", Float),
+ Column("capacity", Float),
+ Column("published", Boolean),
+ Column("marketGroupID", Integer, ForeignKey("invmarketgroups.marketGroupID")),
+ Column("iconID", Integer, ForeignKey("icons.iconID")),
+ Column("groupID", Integer, ForeignKey("invgroups.groupID"), index=True))
+
+
+
+from .metaGroup import metatypes_table
+
+mapper(Item, items_table,
+ properties = {"group" : relation(Group, backref = "items"),
+ "icon" : relation(Icon),
+ "_Item__attributes" : relation(Attribute, collection_class = attribute_mapped_collection('name')),
+ "effects" : relation(Effect, collection_class = attribute_mapped_collection('name')),
+ "metaGroup" : relation(MetaType,
+ primaryjoin = metatypes_table.c.typeID == items_table.c.typeID,
+ uselist = False),
+ "ID" : synonym("typeID"),
+ "name" : synonym("typeName"),
+ "description" : deferred(items_table.c.description)})
+
+Item.category = association_proxy("group", "category")
diff --git a/eos/db/gamedata/marketGroup.py b/eos/db/gamedata/marketGroup.py
new file mode 100755
index 000000000..6f16e48ae
--- /dev/null
+++ b/eos/db/gamedata/marketGroup.py
@@ -0,0 +1,40 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from sqlalchemy import Column, String, Integer, Boolean, ForeignKey, Table
+from sqlalchemy.orm import relation, mapper, synonym, deferred
+
+from eos.db import gamedata_meta
+from eos.types import Item, MarketGroup, Icon
+
+marketgroups_table = Table("invmarketgroups", gamedata_meta,
+ Column("marketGroupID", Integer, primary_key = True),
+ Column("marketGroupName", String),
+ Column("description", String),
+ Column("hasTypes", Boolean),
+ Column("parentGroupID", Integer, ForeignKey("invmarketgroups.marketGroupID", initially="DEFERRED", deferrable=True)),
+ Column("iconID", Integer, ForeignKey("icons.iconID")))
+
+mapper(MarketGroup, marketgroups_table,
+ properties = {"items" : relation(Item, backref = "marketGroup"),
+ "parent" : relation(MarketGroup, backref = "children", remote_side = [marketgroups_table.c.marketGroupID]),
+ "icon" : relation(Icon),
+ "ID" : synonym("marketGroupID"),
+ "name" : synonym("marketGroupName"),
+ "description" : deferred(marketgroups_table.c.description)})
diff --git a/eos/db/gamedata/metaData.py b/eos/db/gamedata/metaData.py
new file mode 100755
index 000000000..36bc7caf9
--- /dev/null
+++ b/eos/db/gamedata/metaData.py
@@ -0,0 +1,29 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from sqlalchemy import Column, Table, String
+from sqlalchemy.orm import mapper
+from eos.types import MetaData
+from eos.db import gamedata_meta
+
+metadata_table = Table("metadata", gamedata_meta,
+ Column("fieldName", String, primary_key=True),
+ Column("fieldValue", String))
+
+mapper(MetaData, metadata_table)
diff --git a/eos/db/gamedata/metaGroup.py b/eos/db/gamedata/metaGroup.py
new file mode 100755
index 000000000..554bf5739
--- /dev/null
+++ b/eos/db/gamedata/metaGroup.py
@@ -0,0 +1,47 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from sqlalchemy import Table, Column, Integer, ForeignKey, String
+from sqlalchemy.orm import relation, mapper, synonym
+from eos.db import gamedata_meta
+from eos.db.gamedata.item import items_table
+from eos.types import MetaGroup, Item, MetaType
+from sqlalchemy.ext.associationproxy import association_proxy
+
+metagroups_table = Table("invmetagroups", gamedata_meta,
+ Column("metaGroupID", Integer, primary_key = True),
+ Column("metaGroupName", String))
+
+metatypes_table = Table("invmetatypes", gamedata_meta,
+ Column("typeID", Integer, ForeignKey("invtypes.typeID"), primary_key = True),
+ Column("parentTypeID", Integer, ForeignKey("invtypes.typeID")),
+ Column("metaGroupID", Integer, ForeignKey("invmetagroups.metaGroupID")))
+
+mapper(MetaGroup, metagroups_table,
+ properties = {"ID" : synonym("metaGroupID"),
+ "name" : synonym("metaGroupName")})
+
+mapper(MetaType, metatypes_table,
+ properties = {"ID" : synonym("metaGroupID"),
+ "parent" : relation(Item, primaryjoin = metatypes_table.c.parentTypeID == items_table.c.typeID),
+ "items" : relation(Item, primaryjoin = metatypes_table.c.typeID == items_table.c.typeID),
+ "info": relation(MetaGroup, lazy=False)})
+
+MetaType.name = association_proxy("info", "name")
+
diff --git a/eos/db/gamedata/queries.py b/eos/db/gamedata/queries.py
new file mode 100755
index 000000000..a4ffd42b6
--- /dev/null
+++ b/eos/db/gamedata/queries.py
@@ -0,0 +1,251 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from eos.db import gamedata_session
+from eos.db.gamedata.metaGroup import metatypes_table, items_table
+from sqlalchemy.sql import and_, or_, select, func
+from sqlalchemy.orm import join, exc
+from eos.types import Item, Category, Group, MarketGroup, AttributeInfo, MetaData, MetaGroup
+from eos.db.util import processEager, processWhere
+import eos.config
+
+configVal = getattr(eos.config, "gamedataCache", None)
+if configVal is True:
+ def cachedQuery(amount, *keywords):
+ def deco(function):
+ cache = {}
+ def checkAndReturn(*args, **kwargs):
+ useCache = kwargs.pop("useCache", True)
+ cacheKey = []
+ cacheKey.extend(args)
+ for keyword in keywords:
+ cacheKey.append(kwargs.get(keyword))
+
+ cacheKey = tuple(cacheKey)
+ handler = cache.get(cacheKey)
+ if handler is None or not useCache:
+ handler = cache[cacheKey] = function(*args, **kwargs)
+
+ return handler
+
+ return checkAndReturn
+ return deco
+
+elif callable(configVal):
+ cachedQuery = eos.config.gamedataCache
+else:
+ def cachedQuery(amount, *keywords):
+ def deco(function):
+ def checkAndReturn(*args, **kwargs):
+ return function(*args, **kwargs)
+
+ return checkAndReturn
+ return deco
+
+def sqlizeString(line):
+ # Escape backslashes first, as they will be as escape symbol in queries
+ # Then escape percent and underscore signs
+ # Finally, replace generic wildcards with sql-style wildcards
+ line = line.replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_").replace("*", "%")
+ return line
+
+itemNameMap = {}
+@cachedQuery(1, "lookfor")
+def getItem(lookfor, eager=None):
+ if isinstance(lookfor, int):
+ if eager is None:
+ item = gamedata_session.query(Item).get(lookfor)
+ else:
+ item = gamedata_session.query(Item).options(*processEager(eager)).filter(Item.ID == lookfor).first()
+ elif isinstance(lookfor, basestring):
+ if lookfor in itemNameMap:
+ id = itemNameMap[lookfor]
+ if eager is None:
+ item = gamedata_session.query(Item).get(id)
+ else:
+ item = gamedata_session.query(Item).options(*processEager(eager)).filter(Item.ID == id).first()
+ else:
+ # Item names are unique, so we can use first() instead of one()
+ item = gamedata_session.query(Item).options(*processEager(eager)).filter(Item.name == lookfor).first()
+ itemNameMap[lookfor] = item.ID
+ else:
+ raise TypeError("Need integer or string as argument")
+ return item
+
+groupNameMap = {}
+@cachedQuery(1, "lookfor")
+def getGroup(lookfor, eager=None):
+ if isinstance(lookfor, int):
+ if eager is None:
+ group = gamedata_session.query(Group).get(lookfor)
+ else:
+ group = gamedata_session.query(Group).options(*processEager(eager)).filter(Group.ID == lookfor).first()
+ elif isinstance(lookfor, basestring):
+ if lookfor in groupNameMap:
+ id = groupNameMap[lookfor]
+ if eager is None:
+ group = gamedata_session.query(Group).get(id)
+ else:
+ group = gamedata_session.query(Group).options(*processEager(eager)).filter(Group.ID == id).first()
+ else:
+ # Group names are unique, so we can use first() instead of one()
+ group = gamedata_session.query(Group).options(*processEager(eager)).filter(Group.name == lookfor).first()
+ groupNameMap[lookfor] = group.ID
+ else:
+ raise TypeError("Need integer or string as argument")
+ return group
+
+categoryNameMap = {}
+@cachedQuery(1, "lookfor")
+def getCategory(lookfor, eager=None):
+ if isinstance(lookfor, int):
+ if eager is None:
+ category = gamedata_session.query(Category).get(lookfor)
+ else:
+ category = gamedata_session.query(Category).options(*processEager(eager)).filter(Category.ID == lookfor).first()
+ elif isinstance(lookfor, basestring):
+ if lookfor in categoryNameMap:
+ id = categoryNameMap[lookfor]
+ if eager is None:
+ category = gamedata_session.query(Category).get(id)
+ else:
+ category = gamedata_session.query(Category).options(*processEager(eager)).filter(Category.ID == id).first()
+ else:
+ # Category names are unique, so we can use first() instead of one()
+ category = gamedata_session.query(Category).options(*processEager(eager)).filter(Category.name == lookfor).first()
+ categoryNameMap[lookfor] = category.ID
+ else:
+ raise TypeError("Need integer or string as argument")
+ return category
+
+metaGroupNameMap = {}
+@cachedQuery(1, "lookfor")
+def getMetaGroup(lookfor, eager=None):
+ if isinstance(lookfor, int):
+ if eager is None:
+ metaGroup = gamedata_session.query(MetaGroup).get(lookfor)
+ else:
+ metaGroup = gamedata_session.query(MetaGroup).options(*processEager(eager)).filter(MetaGroup.ID == lookfor).first()
+ elif isinstance(lookfor, basestring):
+ if lookfor in metaGroupNameMap:
+ id = metaGroupNameMap[lookfor]
+ if eager is None:
+ metaGroup = gamedata_session.query(MetaGroup).get(id)
+ else:
+ metaGroup = gamedata_session.query(MetaGroup).options(*processEager(eager)).filter(MetaGroup.ID == id).first()
+ else:
+ # MetaGroup names are unique, so we can use first() instead of one()
+ metaGroup = gamedata_session.query(MetaGroup).options(*processEager(eager)).filter(MetaGroup.name == lookfor).first()
+ metaGroupNameMap[lookfor] = metaGroup.ID
+ else:
+ raise TypeError("Need integer or string as argument")
+ return metaGroup
+
+@cachedQuery(1, "lookfor")
+def getMarketGroup(lookfor, eager=None):
+ if isinstance(lookfor, int):
+ if eager is None:
+ marketGroup = gamedata_session.query(MarketGroup).get(lookfor)
+ else:
+ marketGroup = gamedata_session.query(MarketGroup).options(*processEager(eager)).filter(MarketGroup.ID == lookfor).first()
+ else:
+ raise TypeError("Need integer as argument")
+ return marketGroup
+
+@cachedQuery(2, "where", "filter")
+def getItemsByCategory(filter, where=None, eager=None):
+ if isinstance(filter, int):
+ filter = Category.ID == filter
+ elif isinstance(filter, basestring):
+ filter = Category.name == filter
+ else:
+ raise TypeError("Need integer or string as argument")
+
+ filter = processWhere(filter, where)
+ return gamedata_session.query(Item).options(*processEager(eager)).join(Item.group, Group.category).filter(filter).all()
+
+@cachedQuery(3, "where", "nameLike", "join")
+def searchItems(nameLike, where=None, join=None, eager=None):
+ if not isinstance(nameLike, basestring):
+ raise TypeError("Need string as argument")
+ # Prepare our string for request
+ nameLike = u"%{0}%".format(sqlizeString(nameLike))
+
+ if join is None:
+ join = tuple()
+
+ if not hasattr(join, "__iter__"):
+ join = (join,)
+
+ filter = processWhere(Item.name.like(nameLike, escape="\\"), where)
+ items = gamedata_session.query(Item).options(*processEager(eager)).join(*join).filter(filter).all()
+ return items
+
+@cachedQuery(2, "where", "itemids")
+def getVariations(itemids, where=None, eager=None):
+ for itemid in itemids:
+ if not isinstance(itemid, int):
+ raise TypeError("All passed item IDs must be integers")
+ # Get out if list of provided IDs is empty
+ if len(itemids) == 0:
+ return []
+
+ itemfilter = or_(*(metatypes_table.c.parentTypeID == itemid for itemid in itemids))
+ filter = processWhere(itemfilter, where)
+ joinon = items_table.c.typeID == metatypes_table.c.typeID
+ vars = gamedata_session.query(Item).options(*processEager(eager)).join((metatypes_table, joinon)).filter(filter).all()
+ return vars
+
+@cachedQuery(1, "attr")
+def getAttributeInfo(attr, eager=None):
+ if isinstance(attr, basestring):
+ filter = AttributeInfo.name == attr
+ elif isinstance(attr, int):
+ filter = AttributeInfo.ID == attr
+ else:
+ raise TypeError("Need integer or string as argument")
+ try:
+ result = gamedata_session.query(AttributeInfo).options(*processEager(eager)).filter(filter).one()
+ except exc.NoResultFound:
+ result = None
+ return result
+
+@cachedQuery(1, "field")
+def getMetaData(field):
+ if isinstance(field, basestring):
+ data = gamedata_session.query(MetaData).get(field)
+ else:
+ raise TypeError("Need string as argument")
+ return data
+
+@cachedQuery(2, "itemIDs", "attributeID")
+def directAttributeRequest(itemIDs, attrIDs):
+ for itemID in itemIDs:
+ if not isinstance(itemID, int):
+ raise TypeError("All attrIDs must be integer")
+ for itemID in itemIDs:
+ if not isinstance(itemID, int):
+ raise TypeError("All itemIDs must be integer")
+
+ q = select((eos.types.Item.typeID, eos.types.Attribute.attributeID, eos.types.Attribute.value),
+ and_(eos.types.Attribute.attributeID.in_(attrIDs), eos.types.Item.typeID.in_(itemIDs)),
+ from_obj=[join(eos.types.Attribute, eos.types.Item)])
+
+ result = gamedata_session.execute(q).fetchall()
+ return result
diff --git a/eos/db/gamedata/unit.py b/eos/db/gamedata/unit.py
new file mode 100755
index 000000000..662c5cec5
--- /dev/null
+++ b/eos/db/gamedata/unit.py
@@ -0,0 +1,33 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from sqlalchemy import Column, Table, Integer, String
+from sqlalchemy.orm import mapper, synonym
+
+from eos.db import gamedata_meta
+from eos.types import Unit
+
+groups_table = Table("dgmunits", gamedata_meta,
+ Column("unitID", Integer, primary_key = True),
+ Column("unitName", String),
+ Column("displayName", String))
+
+mapper(Unit, groups_table,
+ properties = {"ID" : synonym("unitID"),
+ "name" : synonym("unitName")})
diff --git a/eos/db/migration.py b/eos/db/migration.py
new file mode 100755
index 000000000..0b8e5fd2b
--- /dev/null
+++ b/eos/db/migration.py
@@ -0,0 +1,20 @@
+import sqlalchemy
+
+def update(saveddata_engine):
+ checkPriceFailures(saveddata_engine)
+
+def checkPriceFailures(saveddata_engine):
+ # Check if we have 'failed' column
+ try:
+ saveddata_engine.execute("SELECT failed FROM prices")
+ except sqlalchemy.exc.DatabaseError:
+ # As we don't have any important data there, let's just drop
+ # and recreate whole table
+ from eos.db.saveddata.price import prices_table
+ # Attempt to drop/create table only if it's already there
+ try:
+ prices_table.drop(saveddata_engine)
+ prices_table.create(saveddata_engine)
+ except sqlalchemy.exc.DatabaseError:
+ pass
+
diff --git a/eos/db/saveddata/__init__.py b/eos/db/saveddata/__init__.py
new file mode 100755
index 000000000..70c7b22ec
--- /dev/null
+++ b/eos/db/saveddata/__init__.py
@@ -0,0 +1,3 @@
+__all__ = ["character", "fit", "module", "user", "skill", "price",
+ "booster", "drone", "implant", "fleet", "damagePattern",
+ "miscData"]
diff --git a/eos/db/saveddata/booster.py b/eos/db/saveddata/booster.py
new file mode 100755
index 000000000..459bb76b5
--- /dev/null
+++ b/eos/db/saveddata/booster.py
@@ -0,0 +1,47 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from sqlalchemy import Table, Column, ForeignKey, Integer, UniqueConstraint, Boolean
+from sqlalchemy.orm import mapper, relation
+from sqlalchemy.ext.associationproxy import association_proxy
+
+from eos.db import saveddata_meta
+from eos.types import Booster
+
+boosters_table = Table("boosters", saveddata_meta,
+ Column("ID", Integer, primary_key = True),
+ Column("itemID", Integer),
+ Column("fitID", Integer, ForeignKey("fits.ID"), nullable = False),
+ Column("active", Boolean),
+ UniqueConstraint("itemID", "fitID"))
+
+activeSideEffects_table = Table("boostersActiveSideEffects", saveddata_meta,
+ Column("boosterID", ForeignKey("boosters.ID"), primary_key = True),
+ Column("effectID", Integer, primary_key = True))
+
+class ActiveSideEffectsDummy(object):
+ def __init__(self, effectID):
+ self.effectID = effectID
+
+
+mapper(ActiveSideEffectsDummy, activeSideEffects_table)
+mapper(Booster, boosters_table,
+ properties = {"_Booster__activeSideEffectDummies" : relation(ActiveSideEffectsDummy)})
+
+Booster._Booster__activeSideEffectIDs = association_proxy("_Booster__activeSideEffectDummies", "effectID")
diff --git a/eos/db/saveddata/character.py b/eos/db/saveddata/character.py
new file mode 100755
index 000000000..9acad5100
--- /dev/null
+++ b/eos/db/saveddata/character.py
@@ -0,0 +1,42 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from sqlalchemy import Table, Column, Integer, ForeignKey, String
+from sqlalchemy.orm import relation, mapper
+
+from eos.db import saveddata_meta
+from eos.db.saveddata.implant import charImplants_table
+from eos.types import Character, User, Skill, Implant
+from eos.effectHandlerHelpers import HandledImplantBoosterList
+
+characters_table = Table("characters", saveddata_meta,
+ Column("ID", Integer, primary_key = True),
+ Column("name", String, nullable = False),
+ Column("apiID", Integer),
+ Column("apiKey", String),
+ Column("defaultLevel", Integer, nullable=True),
+ Column("ownerID", ForeignKey("users.ID"), nullable = True))
+
+mapper(Character, characters_table,
+ properties = {"_Character__owner" : relation(User, backref = "characters"),
+ "_Character__skills" : relation(Skill, backref="character", cascade = "all,delete-orphan"),
+ "_Character__implants" : relation(Implant, collection_class = HandledImplantBoosterList, cascade='all,delete-orphan', single_parent=True,
+ primaryjoin = charImplants_table.c.charID == characters_table.c.ID,
+ secondaryjoin = charImplants_table.c.implantID == Implant.ID,
+ secondary = charImplants_table),})
diff --git a/eos/db/saveddata/damagePattern.py b/eos/db/saveddata/damagePattern.py
new file mode 100755
index 000000000..c29fa7754
--- /dev/null
+++ b/eos/db/saveddata/damagePattern.py
@@ -0,0 +1,35 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from sqlalchemy import Table, Column, Integer, ForeignKey, String
+from sqlalchemy.orm import mapper
+
+from eos.db import saveddata_meta
+from eos.types import DamagePattern
+
+damagePatterns_table = Table("damagePatterns", saveddata_meta,
+ Column("ID", Integer, primary_key = True),
+ Column("name", String),
+ Column("emAmount", Integer),
+ Column("thermalAmount", Integer),
+ Column("kineticAmount", Integer),
+ Column("explosiveAmount", Integer),
+ Column("ownerID", ForeignKey("users.ID"), nullable=True))
+
+mapper(DamagePattern, damagePatterns_table)
diff --git a/eos/db/saveddata/drone.py b/eos/db/saveddata/drone.py
new file mode 100755
index 000000000..94d7e898b
--- /dev/null
+++ b/eos/db/saveddata/drone.py
@@ -0,0 +1,33 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from sqlalchemy import Table, Column, Integer, ForeignKey, Boolean
+from sqlalchemy.orm import mapper
+from eos.db import saveddata_meta
+from eos.types import Drone
+
+drones_table = Table("drones", saveddata_meta,
+ Column("groupID", Integer, primary_key=True),
+ Column("fitID", Integer, ForeignKey("fits.ID"), nullable = False, index = True),
+ Column("itemID", Integer, nullable = False),
+ Column("amount", Integer, nullable = False),
+ Column("amountActive", Integer, nullable = False),
+ Column("projected", Boolean, default = False))
+
+mapper(Drone, drones_table)
diff --git a/eos/db/saveddata/fit.py b/eos/db/saveddata/fit.py
new file mode 100755
index 000000000..fdf9f07f0
--- /dev/null
+++ b/eos/db/saveddata/fit.py
@@ -0,0 +1,68 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from sqlalchemy import Table, Column, Integer, ForeignKey, String
+from sqlalchemy.orm import relation, mapper
+from sqlalchemy.sql import and_
+
+from eos.db import saveddata_meta
+from eos.db.saveddata.module import modules_table
+from eos.db.saveddata.drone import drones_table
+from eos.db.saveddata.implant import fitImplants_table
+from eos.types import Fit, Module, User, Booster, Drone, Implant, Character, DamagePattern
+from eos.effectHandlerHelpers import HandledModuleList, HandledDroneList, \
+HandledImplantBoosterList, HandledProjectedModList, HandledProjectedDroneList, \
+HandledProjectedFitList
+fits_table = Table("fits", saveddata_meta,
+ Column("ID", Integer, primary_key = True),
+ Column("ownerID", ForeignKey("users.ID"), nullable = True, index = True),
+ Column("shipID", Integer, nullable = False, index = True),
+ Column("name", String, nullable = False),
+ Column("timestamp", Integer, nullable = False),
+ Column("characterID", ForeignKey("characters.ID"), nullable = True),
+ Column("damagePatternID", ForeignKey("damagePatterns.ID"), nullable=True))
+
+projectedFits_table = Table("projectedFits", saveddata_meta,
+ Column("sourceID", ForeignKey("fits.ID"), primary_key = True),
+ Column("victimID", ForeignKey("fits.ID"), primary_key = True),
+ Column("amount", Integer))
+mapper(Fit, fits_table,
+ properties = {"_Fit__modules" : relation(Module, collection_class = HandledModuleList,
+ primaryjoin = and_(modules_table.c.fitID == fits_table.c.ID, modules_table.c.projected == False),
+ order_by = modules_table.c.position, cascade='all, delete, delete-orphan'),
+ "_Fit__projectedModules" : relation(Module, collection_class = HandledProjectedModList, cascade='all, delete, delete-orphan', single_parent=True,
+ primaryjoin = and_(modules_table.c.fitID == fits_table.c.ID, modules_table.c.projected == True)),
+ "owner" : relation(User, backref = "fits"),
+ "_Fit__boosters" : relation(Booster, collection_class = HandledImplantBoosterList, cascade='all, delete, delete-orphan', single_parent=True),
+ "_Fit__drones" : relation(Drone, collection_class = HandledDroneList, cascade='all, delete, delete-orphan', single_parent=True,
+ primaryjoin = and_(drones_table.c.fitID == fits_table.c.ID, drones_table.c.projected == False)),
+ "_Fit__projectedDrones" : relation(Drone, collection_class = HandledProjectedDroneList, cascade='all, delete, delete-orphan', single_parent=True,
+ primaryjoin = and_(drones_table.c.fitID == fits_table.c.ID, drones_table.c.projected == True)),
+ "_Fit__implants" : relation(Implant, collection_class = HandledImplantBoosterList, cascade='all, delete, delete-orphan', single_parent=True,
+ primaryjoin = fitImplants_table.c.fitID == fits_table.c.ID,
+ secondaryjoin = fitImplants_table.c.implantID == Implant.ID,
+ secondary = fitImplants_table),
+ "_Fit__character" : relation(Character, backref = "fits"),
+ "_Fit__damagePattern" : relation(DamagePattern),
+ "_Fit__projectedFits" : relation(Fit,
+ primaryjoin = projectedFits_table.c.victimID == fits_table.c.ID,
+ secondaryjoin = fits_table.c.ID == projectedFits_table.c.sourceID,
+ secondary = projectedFits_table,
+ collection_class = HandledProjectedFitList)
+ })
diff --git a/eos/db/saveddata/fleet.py b/eos/db/saveddata/fleet.py
new file mode 100755
index 000000000..8f0e6736b
--- /dev/null
+++ b/eos/db/saveddata/fleet.py
@@ -0,0 +1,66 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from sqlalchemy import Table, Column, Integer, ForeignKey, String
+from sqlalchemy.orm import mapper, relation
+
+from eos.db import saveddata_meta
+from eos.types import Fleet, Wing, Squad, Fit
+from eos.db.saveddata.fit import fits_table
+
+gangs_table = Table("gangs", saveddata_meta,
+ Column("ID", Integer, primary_key = True),
+ Column("leaderID", ForeignKey("fits.ID")),
+ Column("boosterID", ForeignKey("fits.ID")),
+ Column("name", String))
+
+wings_table = Table("wings", saveddata_meta,
+ Column("ID", Integer, primary_key = True),
+ Column("gangID", ForeignKey("gangs.ID")),
+ Column("boosterID", ForeignKey("fits.ID")),
+ Column("leaderID", ForeignKey("fits.ID")))
+
+squads_table = Table("squads", saveddata_meta,
+ Column("ID", Integer, primary_key = True),
+ Column("wingID", ForeignKey("wings.ID")),
+ Column("leaderID", ForeignKey("fits.ID")),
+ Column("boosterID", ForeignKey("fits.ID")))
+
+squadmembers_table = Table("squadmembers", saveddata_meta,
+ Column("squadID", ForeignKey("squads.ID"), primary_key = True),
+ Column("memberID", ForeignKey("fits.ID"), primary_key = True))
+
+mapper(Fleet, gangs_table,
+ properties = {"wings" : relation(Wing, backref="gang"),
+ "leader" : relation(Fit, primaryjoin = gangs_table.c.leaderID == fits_table.c.ID),
+ "booster": relation(Fit, primaryjoin = gangs_table.c.boosterID == fits_table.c.ID)})
+
+mapper(Wing, wings_table,
+ properties = {"squads" : relation(Squad, backref="wing"),
+ "leader" : relation(Fit, primaryjoin = wings_table.c.leaderID == fits_table.c.ID),
+ "booster": relation(Fit, primaryjoin = wings_table.c.boosterID == fits_table.c.ID)})
+
+mapper(Squad, squads_table,
+ properties = {"leader" : relation(Fit, primaryjoin = squads_table.c.leaderID == fits_table.c.ID),
+ "booster" : relation(Fit, primaryjoin = squads_table.c.boosterID == fits_table.c.ID),
+ "members" : relation(Fit,
+ primaryjoin = squads_table.c.ID == squadmembers_table.c.squadID,
+ secondaryjoin = squadmembers_table.c.memberID == fits_table.c.ID,
+ secondary = squadmembers_table)})
+
diff --git a/eos/db/saveddata/implant.py b/eos/db/saveddata/implant.py
new file mode 100755
index 000000000..60e40bff7
--- /dev/null
+++ b/eos/db/saveddata/implant.py
@@ -0,0 +1,39 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from sqlalchemy import Table, Column, Integer, ForeignKey, Boolean
+from sqlalchemy.orm import mapper
+
+from eos.db import saveddata_meta
+from eos.types import Implant
+
+implants_table = Table("implants", saveddata_meta,
+ Column("ID", Integer, primary_key = True),
+ Column("itemID", Integer),
+ Column("active", Boolean))
+
+fitImplants_table = Table("fitImplants", saveddata_meta,
+ Column("fitID", ForeignKey("fits.ID"), index = True),
+ Column("implantID", ForeignKey("implants.ID"), primary_key = True))
+
+charImplants_table = Table("charImplants", saveddata_meta,
+ Column("charID", ForeignKey("characters.ID"), index = True),
+ Column("implantID", ForeignKey("implants.ID"), primary_key = True))
+
+mapper(Implant, implants_table)
diff --git a/eos/db/saveddata/miscData.py b/eos/db/saveddata/miscData.py
new file mode 100755
index 000000000..44d586d73
--- /dev/null
+++ b/eos/db/saveddata/miscData.py
@@ -0,0 +1,29 @@
+#===============================================================================
+# Copyright (C) 2011 Anton Vorobyov
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from sqlalchemy import Column, Table, String
+from sqlalchemy.orm import mapper
+from eos.types import MiscData
+from eos.db import saveddata_meta
+
+miscdata_table = Table("miscdata", saveddata_meta,
+ Column("fieldName", String, primary_key=True),
+ Column("fieldValue", String))
+
+mapper(MiscData, miscdata_table)
diff --git a/eos/db/saveddata/module.py b/eos/db/saveddata/module.py
new file mode 100755
index 000000000..a89f7b636
--- /dev/null
+++ b/eos/db/saveddata/module.py
@@ -0,0 +1,39 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from sqlalchemy import Table, Column, Integer, ForeignKey, CheckConstraint, Boolean
+from sqlalchemy.orm import relation, mapper
+
+from eos.db import saveddata_meta
+from eos.types import Module, Fit
+
+modules_table = Table("modules", saveddata_meta,
+ Column("ID", Integer, primary_key = True),
+ Column("fitID", Integer, ForeignKey("fits.ID"), nullable = False, index = True),
+ Column("itemID", Integer, nullable = True),
+ Column("dummySlot", Integer, nullable = True, default = None),
+ Column("chargeID", Integer),
+ Column("state", Integer, CheckConstraint("state >= -1"), CheckConstraint("state <= 2")),
+ Column("projected", Boolean, default = False, nullable = False),
+ Column("position", Integer),
+ CheckConstraint('("dummySlot" = NULL OR "itemID" = NULL) AND "dummySlot" != "itemID"'))
+
+mapper(Module, modules_table,
+ properties = {"owner" : relation(Fit)})
+
diff --git a/eos/db/saveddata/price.py b/eos/db/saveddata/price.py
new file mode 100755
index 000000000..172dfba49
--- /dev/null
+++ b/eos/db/saveddata/price.py
@@ -0,0 +1,31 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from sqlalchemy import Table, Column, Float, Integer
+from sqlalchemy.orm import mapper
+from eos.db import saveddata_meta
+from eos.types import Price
+
+prices_table = Table("prices", saveddata_meta,
+ Column("typeID", Integer, primary_key=True),
+ Column("price", Float),
+ Column("time", Integer, nullable = False),
+ Column("failed", Integer))
+
+mapper(Price, prices_table)
diff --git a/eos/db/saveddata/queries.py b/eos/db/saveddata/queries.py
new file mode 100755
index 000000000..13a88a852
--- /dev/null
+++ b/eos/db/saveddata/queries.py
@@ -0,0 +1,365 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from eos.db.util import processEager, processWhere
+from eos.db import saveddata_session, sd_lock
+from eos.types import User, Character, Fit, Price, DamagePattern, Fleet, MiscData, Wing, Squad
+from eos.db.saveddata.fleet import squadmembers_table
+from sqlalchemy.sql import and_
+import eos.config
+
+configVal = getattr(eos.config, "saveddataCache", None)
+if configVal is True:
+ import weakref
+ itemCache = {}
+ queryCache = {}
+ def cachedQuery(type, amount, *keywords):
+ itemCache[type] = localItemCache = weakref.WeakValueDictionary()
+ queryCache[type] = typeQueryCache = {}
+ def deco(function):
+ localQueryCache = typeQueryCache[function] = {}
+ def setCache(cacheKey, args, kwargs):
+ items = function(*args, **kwargs)
+ IDs = set()
+ localQueryCache[cacheKey] = (isinstance(items, list), IDs)
+ stuff = items if isinstance(items, list) else (items,)
+ for item in stuff:
+ ID = getattr(item, "ID", None)
+ if ID is None:
+ #Some uncachable data, don't cache this query
+ del localQueryCache[cacheKey]
+ break
+ localItemCache[ID] = item
+ IDs.add(ID)
+
+ return items
+
+ def checkAndReturn(*args, **kwargs):
+ useCache = kwargs.pop("useCache", True)
+ cacheKey = []
+ cacheKey.extend(args)
+ for keyword in keywords:
+ cacheKey.append(kwargs.get(keyword))
+
+ cacheKey = tuple(cacheKey)
+ info = localQueryCache.get(cacheKey)
+ if info is None or not useCache:
+ items = setCache(cacheKey, args, kwargs)
+ else:
+ l, IDs = info
+ if l:
+ items = []
+ for ID in IDs:
+ data = localItemCache.get(ID)
+ if data is None:
+ #Fuck, some of our stuff isn't cached it seems.
+ items = setCache(cacheKey, args, kwargs)
+ break
+ items.append(data)
+ else:
+ for ID in IDs:
+ items = localItemCache.get(ID)
+ if items is None:
+ items = setCache(cacheKey, args, kwargs)
+ break
+
+ return items
+ return checkAndReturn
+ return deco
+
+ def removeCachedEntry(type, ID):
+ if not type in queryCache:
+ return
+ functionCache = queryCache[type]
+ for _, localCache in functionCache.iteritems():
+ toDelete = set()
+ for cacheKey, info in localCache.iteritems():
+ IDs = info[1]
+ if ID in IDs:
+ toDelete.add(cacheKey)
+
+ for cacheKey in toDelete:
+ del localCache[cacheKey]
+
+ if ID in itemCache[type]:
+ del itemCache[type][ID]
+
+elif callable(configVal):
+ cachedQuery, removeCachedEntry = eos.config.gamedataCache
+else:
+ def cachedQuery(amount, *keywords):
+ def deco(function):
+ def checkAndReturn(*args, **kwargs):
+ return function(*args, **kwargs)
+
+ return checkAndReturn
+ return deco
+
+ def removeCachedEntry(*args, **kwargs):
+ return
+
+def sqlizeString(line):
+ # Escape backslashes first, as they will be as escape symbol in queries
+ # Then escape percent and underscore signs
+ # Finally, replace generic wildcards with sql-style wildcards
+ line = line.replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_").replace("*", "%")
+ return line
+
+@cachedQuery(User, 1, "lookfor")
+def getUser(lookfor, eager=None):
+ if isinstance(lookfor, int):
+ if eager is None:
+ with sd_lock:
+ user = saveddata_session.query(User).get(lookfor)
+ else:
+ eager = processEager(eager)
+ with sd_lock:
+ user = saveddata_session.query(User).options(*eager).filter(User.ID == lookfor).first()
+ elif isinstance(lookfor, basestring):
+ eager = processEager(eager)
+ with sd_lock:
+ user = saveddata_session.query(User).options(*eager).filter(User.username == lookfor).first()
+ else:
+ raise TypeError("Need integer or string as argument")
+ return user
+
+@cachedQuery(Character, 1, "lookfor")
+def getCharacter(lookfor, eager=None):
+ if isinstance(lookfor, int):
+ if eager is None:
+ with sd_lock:
+ character = saveddata_session.query(Character).get(lookfor)
+ else:
+ eager = processEager(eager)
+ with sd_lock:
+ character = saveddata_session.query(Character).options(*eager).filter(Character.ID == lookfor).first()
+ elif isinstance(lookfor, basestring):
+ eager = processEager(eager)
+ with sd_lock:
+ character = saveddata_session.query(Character).options(*eager).filter(Character.name == lookfor).first()
+ else:
+ raise TypeError("Need integer or string as argument")
+ return character
+
+def getCharacterList(eager=None):
+ eager = processEager(eager)
+ with sd_lock:
+ characters = saveddata_session.query(Character).options(*eager).all()
+ return characters
+
+def getCharactersForUser(lookfor, eager=None):
+ if isinstance(lookfor, int):
+ eager = processEager(eager)
+ with sd_lock:
+ characters = saveddata_session.query(Character).options(*eager).filter(Character.ownerID == lookfor).all()
+ else:
+ raise TypeError("Need integer as argument")
+ return characters
+
+@cachedQuery(Fit, 1, "lookfor")
+def getFit(lookfor, eager=None):
+ if isinstance(lookfor, int):
+ if eager is None:
+ with sd_lock:
+ fit = saveddata_session.query(Fit).get(lookfor)
+ else:
+ eager = processEager(eager)
+ with sd_lock:
+ fit = saveddata_session.query(Fit).options(*eager).filter(Fit.ID == fitID).first()
+ else:
+ raise TypeError("Need integer as argument")
+ return fit
+
+@cachedQuery(Fleet, 1, "fleetID")
+def getFleet(fleetID, eager=None):
+ if isinstance(fleetID, int):
+ if eager is None:
+ with sd_lock:
+ fleet = saveddata_session.query(Fleet).get(fleetID)
+ else:
+ eager = processEager(eager)
+ with sd_lock:
+ fleet = saveddata_session.query(Fleet).options(*eager).filter(Fleet.ID == fleetID).first()
+ else:
+ raise TypeError("Need integer as argument")
+ return fleet
+
+@cachedQuery(Wing, 1, "wingID")
+def getWing(wingID, eager=None):
+ if isinstance(wingID, int):
+ if eager is None:
+ with sd_lock:
+ wing = saveddata_session.query(Wing).get(wingID)
+ else:
+ eager = processEager(eager)
+ with sd_lock:
+ wing = saveddata_session.query(Wing).options(*eager).filter(Wing.ID == wingID).first()
+ else:
+ raise TypeError("Need integer as argument")
+ return wing
+
+@cachedQuery(Squad, 1, "squadID")
+def getSquad(squadID, eager=None):
+ if isinstance(squadID, int):
+ if eager is None:
+ with sd_lock:
+ squad = saveddata_session.query(Squad).get(squadID)
+ else:
+ eager = processEager(eager)
+ with sd_lock:
+ squad = saveddata_session.query(Squad).options(*eager).filter(Fleet.ID == squadID).first()
+ else:
+ raise TypeError("Need integer as argument")
+ return squad
+
+def getFitsWithShip(shipID, ownerID=None, where=None, eager=None):
+ """
+ Get all the fits using a certain ship.
+ If no user is passed, do this for all users.
+ """
+ if isinstance(shipID, int):
+ if ownerID is not None and not isinstance(ownerID, int):
+ raise TypeError("OwnerID must be integer")
+ filter = Fit.shipID == shipID
+ if ownerID is not None:
+ filter = and_(filter, Fit.ownerID == ownerID)
+
+ filter = processWhere(filter, where)
+ eager = processEager(eager)
+ with sd_lock:
+ fits = saveddata_session.query(Fit).options(*eager).filter(filter).all()
+ else:
+ raise TypeError("ShipID must be integer")
+ return fits
+
+def countFitsWithShip(shipID, ownerID=None, where=None, eager=None):
+ """
+ Get all the fits using a certain ship.
+ If no user is passed, do this for all users.
+ """
+ if isinstance(shipID, int):
+ if ownerID is not None and not isinstance(ownerID, int):
+ raise TypeError("OwnerID must be integer")
+ filter = Fit.shipID == shipID
+ if ownerID is not None:
+ filter = and_(filter, Fit.ownerID == ownerID)
+
+ filter = processWhere(filter, where)
+ eager = processEager(eager)
+ with sd_lock:
+ count = saveddata_session.query(Fit).options(*eager).filter(filter).count()
+ else:
+ raise TypeError("ShipID must be integer")
+ return count
+
+def getFitList(eager=None):
+ eager = processEager(eager)
+ with sd_lock:
+ fits = saveddata_session.query(Fit).options(*eager).all()
+ return fits
+
+def getFleetList(eager=None):
+ eager = processEager(eager)
+ with sd_lock:
+ fleets = saveddata_session.query(Fleet).options(*eager).all()
+ return fleets
+
+@cachedQuery(Price, 1, "typeID")
+def getPrice(typeID):
+ if isinstance(typeID, int):
+ with sd_lock:
+ price = saveddata_session.query(Price).get(typeID)
+ else:
+ raise TypeError("Need integer as argument")
+ return price
+
+def getMiscData(field):
+ if isinstance(field, basestring):
+ with sd_lock:
+ data = saveddata_session.query(MiscData).get(field)
+ else:
+ raise TypeError("Need string as argument")
+ return data
+
+def getDamagePatternList(eager=None):
+ eager = processEager(eager)
+ with sd_lock:
+ patterns = saveddata_session.query(DamagePattern).options(*eager).all()
+ return patterns
+
+@cachedQuery(DamagePattern, 1, "lookfor")
+def getDamagePattern(lookfor, eager=None):
+ if isinstance(lookfor, int):
+ if eager is None:
+ with sd_lock:
+ pattern = saveddata_session.query(DamagePattern).get(lookfor)
+ else:
+ eager = processEager(eager)
+ with sd_lock:
+ pattern = saveddata_session.query(DamagePattern).options(*eager).filter(DamagePattern.ID == lookfor).first()
+ elif isinstance(lookfor, basestring):
+ eager = processEager(eager)
+ with sd_lock:
+ pattern = saveddata_session.query(DamagePattern).options(*eager).filter(DamagePattern.name == lookfor).first()
+ else:
+ raise TypeError("Need integer or string as argument")
+ return pattern
+
+def searchFits(nameLike, where=None, eager=None):
+ if not isinstance(nameLike, basestring):
+ raise TypeError("Need string as argument")
+ # Prepare our string for request
+ nameLike = u"%{0}%".format(sqlizeString(nameLike))
+
+ #Add any extra components to the search to our where clause
+ filter = processWhere(Fit.name.like(nameLike, escape="\\"), where)
+ eager = processEager(eager)
+ with sd_lock:
+ fits = saveddata_session.query(Fit).options(*eager).filter(filter).all()
+ return fits
+
+def getSquadsIDsWithFitID(fitID):
+ if isinstance(fitID, int):
+ with sd_lock:
+ squads = saveddata_session.query(squadmembers_table.c.squadID).filter(squadmembers_table.c.memberID == fitID).all()
+ squads = tuple(entry[0] for entry in squads)
+ return squads
+ else:
+ raise TypeError("Need integer as argument")
+
+
+def add(stuff):
+ with sd_lock:
+ saveddata_session.add(stuff)
+
+def save(stuff):
+ add(stuff)
+ commit()
+
+def remove(stuff):
+ removeCachedEntry(type(stuff), stuff.ID)
+ with sd_lock:
+ saveddata_session.delete(stuff)
+ commit()
+
+
+def commit():
+ with sd_lock:
+ saveddata_session.commit()
+ saveddata_session.flush()
diff --git a/eos/db/saveddata/skill.py b/eos/db/saveddata/skill.py
new file mode 100755
index 000000000..38bd1ea9a
--- /dev/null
+++ b/eos/db/saveddata/skill.py
@@ -0,0 +1,31 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from sqlalchemy import Table, Column, Integer, ForeignKey
+from sqlalchemy.orm import mapper
+
+from eos.db import saveddata_meta
+from eos.types import Skill
+
+skills_table = Table("characterSkills", saveddata_meta,
+ Column("characterID", ForeignKey("characters.ID"), primary_key = True, index = True),
+ Column("itemID", Integer, primary_key = True),
+ Column("_Skill__level", Integer, nullable = True))
+
+mapper(Skill, skills_table)
diff --git a/eos/db/saveddata/user.py b/eos/db/saveddata/user.py
new file mode 100755
index 000000000..f2a914691
--- /dev/null
+++ b/eos/db/saveddata/user.py
@@ -0,0 +1,32 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from sqlalchemy import Table, Column, Integer, String, Boolean
+from sqlalchemy.orm import mapper
+
+from eos.db import saveddata_meta
+from eos.types import User
+
+users_table = Table("users", saveddata_meta,
+ Column("ID", Integer, primary_key = True),
+ Column("username", String, nullable = False, unique = True),
+ Column("password", String, nullable = False),
+ Column("admin", Boolean, nullable = False))
+
+mapper(User, users_table)
diff --git a/eos/db/util.py b/eos/db/util.py
new file mode 100755
index 000000000..d3efbc0f2
--- /dev/null
+++ b/eos/db/util.py
@@ -0,0 +1,68 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from sqlalchemy.orm import eagerload
+from sqlalchemy.sql import and_
+
+replace = {"attributes": "_Item__attributes",
+ "modules": "_Fit__modules",
+ "projectedModules": "_Fit__projectedModules",
+ "boosters": "_Fit__boosters",
+ "drones": "_Fit__drones",
+ "projectedDrones": "_Fit__projectedDrones",
+ "implants": "_Fit__implants",
+ "character": "_Fit__character",
+ "damagePattern": "_Fit__damagePattern",
+ "projectedFits": "_Fit__projectedFits"}
+
+def processEager(eager):
+ if eager == None:
+ return tuple()
+ else:
+ l = []
+ if isinstance(eager, basestring):
+ eager = (eager,)
+
+ for e in eager:
+ l.append(eagerload(_replacements(e)))
+
+ return l
+
+def _replacements(eagerString):
+ splitEager = eagerString.split(".")
+ for i in xrange(len(splitEager)):
+ part = splitEager[i]
+ replacement = replace.get(part)
+ if replacement:
+ splitEager[i] = replacement
+
+ return ".".join(splitEager)
+
+def processWhere(clause, where):
+ if where is not None:
+ if not hasattr(where, "__iter__"):
+ where = (where,)
+
+ try:
+ for extraClause in where:
+ clause = and_(clause, extraClause)
+ except NotImplementedError:
+ clause = and_(clause, where)
+
+ return clause
diff --git a/eos/effectHandlerHelpers.py b/eos/effectHandlerHelpers.py
new file mode 100755
index 000000000..c4b66fb94
--- /dev/null
+++ b/eos/effectHandlerHelpers.py
@@ -0,0 +1,270 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+import eos.db
+import eos.types
+
+class HandledList(list):
+ def filteredItemPreAssign(self, filter, *args, **kwargs):
+ for element in self:
+ try:
+ if filter(element):
+ element.preAssignItemAttr(*args, **kwargs)
+ except AttributeError:
+ pass
+
+ def filteredItemIncrease(self, filter, *args, **kwargs):
+ for element in self:
+ try:
+ if filter(element):
+ element.increaseItemAttr(*args, **kwargs)
+ except AttributeError:
+ pass
+
+ def filteredItemMultiply(self, filter, *args, **kwargs):
+ for element in self:
+ try:
+ if filter(element):
+ element.multiplyItemAttr(*args, **kwargs)
+ except AttributeError:
+ pass
+
+ def filteredItemBoost(self, filter, *args, **kwargs):
+ for element in self:
+ try:
+ if filter(element):
+ element.boostItemAttr(*args, **kwargs)
+ except AttributeError:
+ pass
+
+ def filteredItemForce(self, filter, *args, **kwargs):
+ for element in self:
+ try:
+ if filter(element):
+ element.forceItemAttr(*args, **kwargs)
+ except AttributeError:
+ pass
+
+ def filteredChargePreAssign(self, filter, *args, **kwargs):
+ for element in self:
+ try:
+ if filter(element):
+ element.preAssignChargeAttr(*args, **kwargs)
+ except AttributeError:
+ pass
+
+ def filteredChargeIncrease(self, filter, *args, **kwargs):
+ for element in self:
+ try:
+ if filter(element):
+ element.increaseChargeAttr(*args, **kwargs)
+ except AttributeError:
+ pass
+
+ def filteredChargeMultiply(self, filter, *args, **kwargs):
+ for element in self:
+ try:
+ if filter(element):
+ element.multiplyChargeAttr(*args, **kwargs)
+ except AttributeError:
+ pass
+
+ def filteredChargeBoost(self, filter, *args, **kwargs):
+ for element in self:
+ try:
+ if filter(element):
+ element.boostChargeAttr(*args, **kwargs)
+ except AttributeError:
+ pass
+
+ def filteredChargeForce(self, filter, *args, **kwargs):
+ for element in self:
+ try:
+ if filter(element):
+ element.forceChargeAttr(*args, **kwargs)
+ except AttributeError:
+ pass
+
+class HandledModuleList(HandledList):
+ def append(self, mod):
+ emptyPosition = float("Inf")
+ for i in xrange(len(self)):
+ currMod = self[i]
+ if currMod.isEmpty and not mod.isEmpty and currMod.slot == mod.slot:
+ currPos = mod.position or i
+ if currPos < emptyPosition:
+ emptyPosition = currPos
+
+ if emptyPosition < len(self):
+ del self[emptyPosition]
+ mod.position = emptyPosition
+ HandledList.insert(self, emptyPosition, mod)
+ return
+
+ mod.position = len(self)
+ HandledList.append(self, mod)
+
+ def insert(self, index, mod):
+ mod.position = index
+ i = index
+ while i < len(self):
+ self[i].position += 1
+ i += 1
+ HandledList.insert(self, index, mod)
+
+ def remove(self, mod):
+ HandledList.remove(self, mod)
+ oldPos = mod.position
+
+ mod.position = None
+ for i in xrange(oldPos, len(self)):
+ self[i].position -= 1
+
+ def toDummy(self, index):
+ mod = self[index]
+ if not mod.isEmpty:
+ dummy = eos.types.Module.buildEmpty(mod.slot)
+ dummy.position = index
+ self[index] = dummy
+
+ def freeSlot(self, slot):
+ for i in range(len(self) -1, -1, -1):
+ mod = self[i]
+ if mod.getModifiedItemAttr("subSystemSlot") == slot:
+ del self[i]
+
+class HandledDroneList(HandledList):
+ def find(self, item):
+ for d in self:
+ if d.item == item:
+ yield d
+
+ def findFirst(self, item):
+ for d in self.find(item):
+ return d
+
+ def append(self, drone):
+ list.append(self, drone)
+
+ def remove(self, drone):
+ HandledList.remove(self, drone)
+
+ def appendItem(self, item, amount = 1):
+ if amount < 1: ValueError("Amount of drones to add should be >= 1")
+ d = self.findFirst(item)
+
+ if d is None:
+ d = eos.types.Drone(item)
+ self.append(d)
+
+ d.amount += amount
+ return d
+
+ def removeItem(self, item, amount):
+ if amount < 1: ValueError("Amount of drones to remove should be >= 1")
+ d = self.findFirst(item)
+ if d is None: return
+ d.amount -= amount
+ if d.amount <= 0:
+ self.remove(d)
+ return None
+
+ return d
+
+
+class HandledImplantBoosterList(HandledList):
+ def __init__(self):
+ self.__slotCache = {}
+
+ def append(self, implant):
+ if self.__slotCache.has_key(implant.slot):
+ raise ValueError("Implant/Booster slot already in use, remove the old one first or set replace = True")
+ self.__slotCache[implant.slot] = implant
+ HandledList.append(self, implant)
+
+ def remove(self, implant):
+ HandledList.remove(self, implant)
+ del self.__slotCache[implant.slot]
+ # While we deleted this implant, in edge case seems like not all references
+ # to it are removed and object still lives in session; forcibly remove it,
+ # or otherwise when adding the same booster twice booster's table (typeID, fitID)
+ # constraint will report database integrity error
+ # TODO: make a proper fix, probably by adjusting fit-boosters sqlalchemy relationships
+ eos.db.remove(implant)
+
+ def freeSlot(self, slot):
+ if hasattr(slot, "slot"):
+ slot = slot.slot
+
+ try:
+ implant = self.__slotCache[slot]
+ except KeyError:
+ return False
+ try:
+ self.remove(implant)
+ except ValueError:
+ return False
+ return True
+
+class HandledProjectedModList(HandledList):
+ def append(self, proj):
+ proj.projected = True
+ HandledList.append(self, proj)
+
+class HandledProjectedDroneList(HandledDroneList):
+ def append(self, proj):
+ proj.projected = True
+ list.append(self, proj)
+
+class HandledProjectedFitList(HandledList):
+ def append(self, proj):
+ proj.projected = True
+ list.append(self, proj)
+
+class HandledItem(object):
+ def preAssignItemAttr(self, *args, **kwargs):
+ self.itemModifiedAttributes.preAssign(*args, **kwargs)
+
+ def increaseItemAttr(self, *args, **kwargs):
+ self.itemModifiedAttributes.increase(*args, **kwargs)
+
+ def multiplyItemAttr(self, *args, **kwargs):
+ self.itemModifiedAttributes.multiply(*args, **kwargs)
+
+ def boostItemAttr(self, *args, **kwargs):
+ self.itemModifiedAttributes.boost(*args, **kwargs)
+
+ def forceItemAttr(self, *args, **kwargs):
+ self.itemModifiedAttributes.force(*args, **kwargs)
+
+class HandledCharge(object):
+ def preAssignChargeAttr(self, *args, **kwargs):
+ self.chargeModifiedAttributes.preAssign(*args, **kwargs)
+
+ def increaseChargeAttr(self, *args, **kwargs):
+ self.chargeModifiedAttributes.increase(*args, **kwargs)
+
+ def multiplyChargeAttr(self, *args, **kwargs):
+ self.chargeModifiedAttributes.multiply(*args, **kwargs)
+
+ def boostChargeAttr(self, *args, **kwargs):
+ self.chargeModifiedAttributes.boost(*args, **kwargs)
+
+ def forceChargeAttr(self, *args, **kwargs):
+ self.chargeModifiedAttributes.force(*args, **kwargs)
diff --git a/eos/effects/__init__.py b/eos/effects/__init__.py
new file mode 100755
index 000000000..a0c0db761
--- /dev/null
+++ b/eos/effects/__init__.py
@@ -0,0 +1,19 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+# 2010 Anton Vorobyov
+#
+# This file, as well as all files in this folder, are part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
diff --git a/eos/effects/accerationcontrolcapneedbonuspostpercentcapacitorneedlocationshipgroupafterburner.py b/eos/effects/accerationcontrolcapneedbonuspostpercentcapacitorneedlocationshipgroupafterburner.py
new file mode 100755
index 000000000..2faff7f3f
--- /dev/null
+++ b/eos/effects/accerationcontrolcapneedbonuspostpercentcapacitorneedlocationshipgroupafterburner.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules named like: Dynamic Fuel Valve (8 of 8)
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Propulsion Module",
+ "capacitorNeed", container.getModifiedItemAttr("capNeedBonus"))
diff --git a/eos/effects/accerationcontrolskillabmwdspeedboost.py b/eos/effects/accerationcontrolskillabmwdspeedboost.py
new file mode 100755
index 000000000..e2f4b16d6
--- /dev/null
+++ b/eos/effects/accerationcontrolskillabmwdspeedboost.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implant: Zor's Custom Navigation Hyper-Link
+# Skill: Acceleration Control
+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 == "Propulsion Module",
+ "speedFactor", container.getModifiedItemAttr("speedFBonus") * level)
diff --git a/eos/effects/accerationcontrolspeedfbonuspostpercentspeedfactorlocationshipgroupafterburner.py b/eos/effects/accerationcontrolspeedfbonuspostpercentspeedfactorlocationshipgroupafterburner.py
new file mode 100755
index 000000000..ed14a4487
--- /dev/null
+++ b/eos/effects/accerationcontrolspeedfbonuspostpercentspeedfactorlocationshipgroupafterburner.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Eifyr and Co. 'Rogue' Acceleration Control AC (6 of 6)
+type = "passive"
+def handler(fit, implant, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Propulsion Module",
+ "speedFactor", implant.getModifiedItemAttr("speedFBonus"))
diff --git a/eos/effects/accessdifficultybonusmodifierrequiringarchaelogy.py b/eos/effects/accessdifficultybonusmodifierrequiringarchaelogy.py
new file mode 100755
index 000000000..3bd1be7a7
--- /dev/null
+++ b/eos/effects/accessdifficultybonusmodifierrequiringarchaelogy.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules named like: Emission Scope Sharpener (8 of 8)
+# Implant: Poteque 'Prospector' Archaeology AC-905
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredItemIncrease(lambda module: module.item.requiresSkill("Archaeology"),
+ "accessDifficultyBonus",
+ container.getModifiedItemAttr("accessDifficultyBonusModifier"), position="post")
diff --git a/eos/effects/accessdifficultybonusmodifierrequiringhacking.py b/eos/effects/accessdifficultybonusmodifierrequiringhacking.py
new file mode 100755
index 000000000..ebd4489bb
--- /dev/null
+++ b/eos/effects/accessdifficultybonusmodifierrequiringhacking.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules named like: Memetic Algorithm Bank (8 of 8)
+# Implant: Poteque 'Prospector' Hacking HC-905
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredItemIncrease(lambda c: c.item.requiresSkill("Hacking"),
+ "accessDifficultyBonus",
+ container.getModifiedItemAttr("accessDifficultyBonusModifier"), position="post")
diff --git a/eos/effects/adaptivearmorhardener.py b/eos/effects/adaptivearmorhardener.py
new file mode 100755
index 000000000..71055f3da
--- /dev/null
+++ b/eos/effects/adaptivearmorhardener.py
@@ -0,0 +1,8 @@
+# Used by:
+# Module: Reactive Armor Hardener
+type = "active"
+def handler(fit, module, context):
+ for type in ("kinetic", "thermal", "explosive", "em"):
+ attr = "armor%sDamageResonance" % type.capitalize()
+ fit.ship.multiplyItemAttr(attr, module.getModifiedItemAttr(attr),
+ stackingPenalties=True, penaltyGroup="preMul")
diff --git a/eos/effects/addtosignatureradius2.py b/eos/effects/addtosignatureradius2.py
new file mode 100755
index 000000000..a8a72177f
--- /dev/null
+++ b/eos/effects/addtosignatureradius2.py
@@ -0,0 +1,5 @@
+# Used by:
+# Modules from group: Shield Extender (37 of 37)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.increaseItemAttr("signatureRadius", module.getModifiedItemAttr("signatureRadiusAdd"))
\ No newline at end of file
diff --git a/eos/effects/advanceddroneinterfacingmaxgroupdcuskilllevel.py b/eos/effects/advanceddroneinterfacingmaxgroupdcuskilllevel.py
new file mode 100755
index 000000000..8f71b5ae5
--- /dev/null
+++ b/eos/effects/advanceddroneinterfacingmaxgroupdcuskilllevel.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Advanced Drone Interfacing
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemIncrease(lambda mod: mod.item.group.name == "Drone Control Unit",
+ "maxGroupActive", skill.level)
diff --git a/eos/effects/afterburnerdurationbonuspostpercentdurationlocationshipmodulesrequiringafterburner.py b/eos/effects/afterburnerdurationbonuspostpercentdurationlocationshipmodulesrequiringafterburner.py
new file mode 100755
index 000000000..5e96ff748
--- /dev/null
+++ b/eos/effects/afterburnerdurationbonuspostpercentdurationlocationshipmodulesrequiringafterburner.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implants named like: Eifyr and Co. 'Rogue' Afterburner AB (6 of 6)
+# Implant: Zor's Custom Navigation Link
+# Skill: Afterburner
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Afterburner"),
+ "duration", container.getModifiedItemAttr("durationBonus") * level)
diff --git a/eos/effects/agilitymultipliereffect.py b/eos/effects/agilitymultipliereffect.py
new file mode 100755
index 000000000..c6a6770eb
--- /dev/null
+++ b/eos/effects/agilitymultipliereffect.py
@@ -0,0 +1,9 @@
+# Used by:
+# Modules from group: Inertia Stabilizer (12 of 12)
+# Modules from group: Nanofiber Internal Structure (14 of 14)
+# Modules from group: Reinforced Bulkhead (12 of 12)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.boostItemAttr("agility",
+ module.getModifiedItemAttr("agilityMultiplier"),
+ stackingPenalties = True)
diff --git a/eos/effects/agilitymultipliereffectpassive.py b/eos/effects/agilitymultipliereffectpassive.py
new file mode 100755
index 000000000..70acc4df9
--- /dev/null
+++ b/eos/effects/agilitymultipliereffectpassive.py
@@ -0,0 +1,5 @@
+# Used by:
+# Modules named like: Polycarbon Engine Housing (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.boostItemAttr("agility", module.getModifiedItemAttr("agilityMultiplier"), stackingPenalties = True)
diff --git a/eos/effects/ammofallofmultiplier.py b/eos/effects/ammofallofmultiplier.py
new file mode 100755
index 000000000..4a5afa86e
--- /dev/null
+++ b/eos/effects/ammofallofmultiplier.py
@@ -0,0 +1,10 @@
+# Used by:
+# Charges from group: Advanced Artillery Ammo (6 of 6)
+# Charges from group: Advanced Autocannon Ammo (6 of 6)
+# Charges from group: Advanced Beam Laser Crystal (6 of 6)
+# Charges from group: Advanced Blaster Charge (6 of 6)
+# Charges from group: Advanced Pulse Laser Crystal (6 of 6)
+# Charges from group: Advanced Railgun Charge (6 of 6)
+type = "passive"
+def handler(fit, module, context):
+ module.multiplyItemAttr("falloff", module.getModifiedChargeAttr("fallofMultiplier") or 1)
diff --git a/eos/effects/ammoinfluencecapneed.py b/eos/effects/ammoinfluencecapneed.py
new file mode 100755
index 000000000..f100a752c
--- /dev/null
+++ b/eos/effects/ammoinfluencecapneed.py
@@ -0,0 +1,9 @@
+# Used by:
+# Items from category: Charge (458 of 824)
+type = "passive"
+def handler(fit, module, context):
+ # Dirty hack to work around cap charges setting cap booster
+ # injection amount to zero
+ rawAttr = module.item.getAttribute("capacitorNeed")
+ if rawAttr is not None and rawAttr >= 0:
+ module.boostItemAttr("capacitorNeed", module.getModifiedChargeAttr("capNeedBonus") or 0)
diff --git a/eos/effects/ammoinfluencerange.py b/eos/effects/ammoinfluencerange.py
new file mode 100755
index 000000000..749f2b760
--- /dev/null
+++ b/eos/effects/ammoinfluencerange.py
@@ -0,0 +1,5 @@
+# Used by:
+# Items from category: Charge (559 of 824)
+type = "passive"
+def handler(fit, module, context):
+ module.multiplyItemAttr("maxRange", module.getModifiedChargeAttr("weaponRangeMultiplier"))
\ No newline at end of file
diff --git a/eos/effects/ammospeedmultiplier.py b/eos/effects/ammospeedmultiplier.py
new file mode 100755
index 000000000..45f65e8ab
--- /dev/null
+++ b/eos/effects/ammospeedmultiplier.py
@@ -0,0 +1,7 @@
+# Used by:
+# Charges from group: Festival Charges (4 of 4)
+# Charges from group: Survey Probe (3 of 3)
+# Charge: Warp Disrupt Probe
+type = "passive"
+def handler(fit, module, context):
+ module.multiplyItemAttr("speed", module.getModifiedChargeAttr("speedMultiplier") or 1)
diff --git a/eos/effects/ammotrackingmultiplier.py b/eos/effects/ammotrackingmultiplier.py
new file mode 100755
index 000000000..13dc5579d
--- /dev/null
+++ b/eos/effects/ammotrackingmultiplier.py
@@ -0,0 +1,11 @@
+# Used by:
+# Charges from group: Advanced Artillery Ammo (6 of 6)
+# Charges from group: Advanced Autocannon Ammo (6 of 6)
+# Charges from group: Advanced Beam Laser Crystal (6 of 6)
+# Charges from group: Advanced Blaster Charge (6 of 6)
+# Charges from group: Advanced Pulse Laser Crystal (6 of 6)
+# Charges from group: Advanced Railgun Charge (6 of 6)
+# Charges from group: Projectile Ammo (129 of 129)
+type = "passive"
+def handler(fit, module, context):
+ module.multiplyItemAttr("trackingSpeed", module.getModifiedChargeAttr("trackingSpeedMultiplier"))
\ No newline at end of file
diff --git a/eos/effects/angelsetbonus.py b/eos/effects/angelsetbonus.py
new file mode 100755
index 000000000..5d609ed11
--- /dev/null
+++ b/eos/effects/angelsetbonus.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implants named like: Halo (12 of 12)
+runTime = "early"
+type = "passive"
+def handler(fit, implant, context):
+ fit.implants.filteredItemMultiply(
+ lambda implant: "signatureRadiusBonus" in implant.itemModifiedAttributes and "implantSetAngel" in implant.itemModifiedAttributes,
+ "signatureRadiusBonus",
+ implant.getModifiedItemAttr("implantSetAngel"))
\ No newline at end of file
diff --git a/eos/effects/antiwarpscramblingpassive.py b/eos/effects/antiwarpscramblingpassive.py
new file mode 100755
index 000000000..79b48e134
--- /dev/null
+++ b/eos/effects/antiwarpscramblingpassive.py
@@ -0,0 +1,5 @@
+# Used by:
+# Modules from group: Warp Core Stabilizer (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.increaseItemAttr("warmScrambleStatus", module.getModifiedItemAttr("warpScrambleStrength"))
\ No newline at end of file
diff --git a/eos/effects/archaeologyskillvirusbonus.py b/eos/effects/archaeologyskillvirusbonus.py
new file mode 100644
index 000000000..0c32e06f8
--- /dev/null
+++ b/eos/effects/archaeologyskillvirusbonus.py
@@ -0,0 +1,9 @@
+# Used by:
+# Modules named like: Emission Scope Sharpener (8 of 8)
+# Implant: Poteque 'Prospector' Archaeology AC-905
+# Skill: Archaeology
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill("Archaeology"),
+ "virusCoherence", container.getModifiedItemAttr("virusCoherenceBonus") * level)
diff --git a/eos/effects/armorallrepairsystemsamountbonuspassive.py b/eos/effects/armorallrepairsystemsamountbonuspassive.py
new file mode 100755
index 000000000..4e4a2f654
--- /dev/null
+++ b/eos/effects/armorallrepairsystemsamountbonuspassive.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Exile Booster (4 of 4)
+type = "passive"
+def handler(fit, booster, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Repair Systems"),
+ "armorDamageAmount", booster.getModifiedItemAttr("armorDamageAmountBonus"))
diff --git a/eos/effects/armordamageamountbonuscapitalarmorrepairers.py b/eos/effects/armordamageamountbonuscapitalarmorrepairers.py
new file mode 100644
index 000000000..f084ae1aa
--- /dev/null
+++ b/eos/effects/armordamageamountbonuscapitalarmorrepairers.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules named like: Auxiliary Nano Pump (8 of 8)
+type = "passive"
+def handler(fit, implant, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Repair Systems"),
+ "armorDamageAmount", implant.getModifiedItemAttr("repairBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/armoredwarfaremindlink.py b/eos/effects/armoredwarfaremindlink.py
new file mode 100755
index 000000000..a23616908
--- /dev/null
+++ b/eos/effects/armoredwarfaremindlink.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implant: Armored Warfare Mindlink
+type = "passive"
+def handler(fit, implant, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Warfare Specialist"),
+ "commandBonus", implant.getModifiedItemAttr("mindlinkBonus"))
\ No newline at end of file
diff --git a/eos/effects/armorhpbonusadd.py b/eos/effects/armorhpbonusadd.py
new file mode 100755
index 000000000..8a69e09ab
--- /dev/null
+++ b/eos/effects/armorhpbonusadd.py
@@ -0,0 +1,5 @@
+# Used by:
+# Modules from group: Armor Reinforcer (57 of 57)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.increaseItemAttr("armorHP", module.getModifiedItemAttr("armorHPBonusAdd"))
\ No newline at end of file
diff --git a/eos/effects/armorhpbonusaddpassive.py b/eos/effects/armorhpbonusaddpassive.py
new file mode 100755
index 000000000..c4b70c0b3
--- /dev/null
+++ b/eos/effects/armorhpbonusaddpassive.py
@@ -0,0 +1,5 @@
+# Used by:
+# Subsystems from group: Defensive Systems (16 of 16)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.increaseItemAttr("armorHP", module.getModifiedItemAttr("armorHPBonusAdd"))
diff --git a/eos/effects/armorhpmultiply.py b/eos/effects/armorhpmultiply.py
new file mode 100755
index 000000000..6b912e140
--- /dev/null
+++ b/eos/effects/armorhpmultiply.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules from group: Armor Coating (202 of 202)
+# Modules from group: Armor Plating Energized (187 of 187)
+# Modules named like: QA Multiship Module Players (4 of 4)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.multiplyItemAttr("armorHP", module.getModifiedItemAttr("armorHPMultiplier"))
\ No newline at end of file
diff --git a/eos/effects/armorreinforcermassadd.py b/eos/effects/armorreinforcermassadd.py
new file mode 100755
index 000000000..0d191be19
--- /dev/null
+++ b/eos/effects/armorreinforcermassadd.py
@@ -0,0 +1,5 @@
+# Used by:
+# Modules from group: Armor Reinforcer (57 of 57)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.increaseItemAttr("mass", module.getModifiedItemAttr("massAddition"))
\ No newline at end of file
diff --git a/eos/effects/armorrepair.py b/eos/effects/armorrepair.py
new file mode 100755
index 000000000..19a6c1fb6
--- /dev/null
+++ b/eos/effects/armorrepair.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules from group: Armor Repair Unit (100 of 100)
+runTime = "late"
+type = "active"
+def handler(fit, module, context):
+ amount = module.getModifiedItemAttr("armorDamageAmount")
+ speed = module.getModifiedItemAttr("duration") / 1000.0
+ fit.extraAttributes.increase("armorRepair", amount / speed)
\ No newline at end of file
diff --git a/eos/effects/armorrepairprojectormaxrangebonus.py b/eos/effects/armorrepairprojectormaxrangebonus.py
new file mode 100755
index 000000000..91757daba
--- /dev/null
+++ b/eos/effects/armorrepairprojectormaxrangebonus.py
@@ -0,0 +1,9 @@
+# Used by:
+# Ship: Augoror
+# Ship: Exequror
+# Ship: Inquisitor
+# Ship: Navitas
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Projector",
+ "maxRange", ship.getModifiedItemAttr("maxRangeBonus"))
diff --git a/eos/effects/armortankinggang.py b/eos/effects/armortankinggang.py
new file mode 100755
index 000000000..e18892b25
--- /dev/null
+++ b/eos/effects/armortankinggang.py
@@ -0,0 +1,7 @@
+# Used by:
+# Skill: Armored Warfare
+type = "gang"
+gangBoost = "armorHP"
+gangBonus = "armorHpBonus"
+def handler(fit, skill, context):
+ fit.ship.boostItemAttr(gangBoost, skill.getModifiedItemAttr(gangBonus) * skill.level)
diff --git a/eos/effects/armortankinggang2.py b/eos/effects/armortankinggang2.py
new file mode 100755
index 000000000..84d4fdf8b
--- /dev/null
+++ b/eos/effects/armortankinggang2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implant: Armored Warfare Mindlink
+type = "gang", "active"
+gangBonus = "armorHpBonus2"
+gangBoost = "armorHP"
+def handler(fit, module, context):
+ if "gang" not in context: return
+ fit.ship.boostItemAttr("armorHP", module.getModifiedItemAttr("armorHpBonus2"))
diff --git a/eos/effects/armorupgradesmasspenaltyreductionbonus.py b/eos/effects/armorupgradesmasspenaltyreductionbonus.py
new file mode 100755
index 000000000..f7f7cec12
--- /dev/null
+++ b/eos/effects/armorupgradesmasspenaltyreductionbonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Skill: Armor Honeycombing
+type = "passive"
+def handler(fit, container, context):
+ level = container.level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Reinforcer",
+ "massAddition", container.getModifiedItemAttr("massPenaltyReduction") * level)
diff --git a/eos/effects/astrogeologyminingamountbonuspostpercentminingamountlocationshipmodulesrequiringmining.py b/eos/effects/astrogeologyminingamountbonuspostpercentminingamountlocationshipmodulesrequiringmining.py
new file mode 100755
index 000000000..78699021d
--- /dev/null
+++ b/eos/effects/astrogeologyminingamountbonuspostpercentminingamountlocationshipmodulesrequiringmining.py
@@ -0,0 +1,10 @@
+# Used by:
+# Implants named like: Inherent Implants 'Highwall' Mining MX (3 of 3)
+# Implant: Michi's Excavation Augmentor
+# Skill: Astrogeology
+# Skill: Mining
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining"),
+ "miningAmount", container.getModifiedItemAttr("miningAmountBonus") * level)
diff --git a/eos/effects/basemaxscandeviationmodifiermoduleonline2none.py b/eos/effects/basemaxscandeviationmodifiermoduleonline2none.py
new file mode 100644
index 000000000..80d6542e7
--- /dev/null
+++ b/eos/effects/basemaxscandeviationmodifiermoduleonline2none.py
@@ -0,0 +1,6 @@
+# Used by:
+# Variations of module: Scan Pinpointing Array I (2 of 2)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Astrometrics"),
+ "baseMaxScanDeviation", module.getModifiedItemAttr("maxScanDeviationModifierModule"))
diff --git a/eos/effects/basemaxscandeviationmodifierrequiringastrometrics.py b/eos/effects/basemaxscandeviationmodifierrequiringastrometrics.py
new file mode 100755
index 000000000..418495810
--- /dev/null
+++ b/eos/effects/basemaxscandeviationmodifierrequiringastrometrics.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implants named like: Poteque 'Prospector' Astrometric Pinpointing AP (3 of 3)
+# Skill: Astrometric Pinpointing
+# Skill: Astrometrics
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Astrometrics"),
+ "baseMaxScanDeviation", container.getModifiedItemAttr("maxScanDeviationModifier") * level)
diff --git a/eos/effects/basesensorstrengthmodifiermodule.py b/eos/effects/basesensorstrengthmodifiermodule.py
new file mode 100644
index 000000000..44203a325
--- /dev/null
+++ b/eos/effects/basesensorstrengthmodifiermodule.py
@@ -0,0 +1,6 @@
+# Used by:
+# Variations of module: Scan Rangefinding Array I (2 of 2)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Astrometrics"),
+ "baseSensorStrength", module.getModifiedItemAttr("scanStrengthBonusModule"))
diff --git a/eos/effects/basesensorstrengthmodifierrequiringastrometrics.py b/eos/effects/basesensorstrengthmodifierrequiringastrometrics.py
new file mode 100755
index 000000000..ae7d169df
--- /dev/null
+++ b/eos/effects/basesensorstrengthmodifierrequiringastrometrics.py
@@ -0,0 +1,12 @@
+# Used by:
+# Modules from group: Scan Probe Launcher (4 of 7)
+# Implants named like: Low grade Virtue (5 of 6)
+# Implants named like: Poteque 'Prospector' Astrometric Rangefinding AR (3 of 3)
+# Modules named like: Gravity Capacitor Upgrade (8 of 8)
+# Skill: Astrometric Rangefinding
+# Skill: Astrometrics
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Astrometrics"),
+ "baseSensorStrength", container.getModifiedItemAttr("scanStrengthBonus") * level)
diff --git a/eos/effects/bclargeenergyturretcapacitorneedbonus.py b/eos/effects/bclargeenergyturretcapacitorneedbonus.py
new file mode 100755
index 000000000..ba26f78fc
--- /dev/null
+++ b/eos/effects/bclargeenergyturretcapacitorneedbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Oracle
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill("Large Energy Turret"),
+ "capacitorNeed", ship.getModifiedItemAttr("bcLargeTurretCap"))
diff --git a/eos/effects/bclargeenergyturretcpuneedbonus.py b/eos/effects/bclargeenergyturretcpuneedbonus.py
new file mode 100755
index 000000000..f3a50cc85
--- /dev/null
+++ b/eos/effects/bclargeenergyturretcpuneedbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Oracle
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill("Large Energy Turret"),
+ "cpu", ship.getModifiedItemAttr("bcLargeTurretCPU"))
diff --git a/eos/effects/bclargeenergyturretpowerneedbonus.py b/eos/effects/bclargeenergyturretpowerneedbonus.py
new file mode 100755
index 000000000..0eed6afdf
--- /dev/null
+++ b/eos/effects/bclargeenergyturretpowerneedbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Oracle
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill("Large Energy Turret"),
+ "power", ship.getModifiedItemAttr("bcLargeTurretPower"))
diff --git a/eos/effects/bclargehybridturretcapacitorneedbonus.py b/eos/effects/bclargehybridturretcapacitorneedbonus.py
new file mode 100755
index 000000000..b2e73608b
--- /dev/null
+++ b/eos/effects/bclargehybridturretcapacitorneedbonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Naga
+# Ship: Talos
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill("Large Hybrid Turret"),
+ "capacitorNeed", ship.getModifiedItemAttr("bcLargeTurretCap"))
diff --git a/eos/effects/bclargehybridturretcpuneedbonus.py b/eos/effects/bclargehybridturretcpuneedbonus.py
new file mode 100755
index 000000000..84c2fad5b
--- /dev/null
+++ b/eos/effects/bclargehybridturretcpuneedbonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Naga
+# Ship: Talos
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill("Large Hybrid Turret"),
+ "cpu", ship.getModifiedItemAttr("bcLargeTurretCPU"))
diff --git a/eos/effects/bclargehybridturretpowerneedbonus.py b/eos/effects/bclargehybridturretpowerneedbonus.py
new file mode 100755
index 000000000..60ff626b9
--- /dev/null
+++ b/eos/effects/bclargehybridturretpowerneedbonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Naga
+# Ship: Talos
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill("Large Hybrid Turret"),
+ "power", ship.getModifiedItemAttr("bcLargeTurretPower"))
diff --git a/eos/effects/bclargeprojectileturretcpuneedbonus.py b/eos/effects/bclargeprojectileturretcpuneedbonus.py
new file mode 100755
index 000000000..6371e5110
--- /dev/null
+++ b/eos/effects/bclargeprojectileturretcpuneedbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Tornado
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill("Large Projectile Turret"),
+ "cpu", ship.getModifiedItemAttr("bcLargeTurretCPU"))
diff --git a/eos/effects/bclargeprojectileturretpowerneedbonus.py b/eos/effects/bclargeprojectileturretpowerneedbonus.py
new file mode 100755
index 000000000..8322ca81d
--- /dev/null
+++ b/eos/effects/bclargeprojectileturretpowerneedbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Tornado
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill("Large Projectile Turret"),
+ "power", ship.getModifiedItemAttr("bcLargeTurretPower"))
diff --git a/eos/effects/biologytimebonusfixed.py b/eos/effects/biologytimebonusfixed.py
new file mode 100755
index 000000000..b9939858f
--- /dev/null
+++ b/eos/effects/biologytimebonusfixed.py
@@ -0,0 +1,7 @@
+# Used by:
+# Implants named like: Eifyr and Co. 'Alchemist' Biology BY (2 of 2)
+# Skill: Biology
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.boosters.filteredItemBoost(lambda bst: True, "boosterDuration", container.getModifiedItemAttr("durationBonus") * level)
diff --git a/eos/effects/blockaderunnercloakcpupercentbonus.py b/eos/effects/blockaderunnercloakcpupercentbonus.py
new file mode 100755
index 000000000..8bad7e340
--- /dev/null
+++ b/eos/effects/blockaderunnercloakcpupercentbonus.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ships from group: Blockade Runner (4 of 4)
+type = "passive"
+runTime = "early"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Transport Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Cloaking Device",
+ "cpu", ship.getModifiedItemAttr("eliteIndustrialCovertCloakBonus") * level)
diff --git a/eos/effects/boosterarmorhppenalty.py b/eos/effects/boosterarmorhppenalty.py
new file mode 100755
index 000000000..68f28a70c
--- /dev/null
+++ b/eos/effects/boosterarmorhppenalty.py
@@ -0,0 +1,5 @@
+# Used by:
+# Implants from group: Booster (12 of 37)
+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
new file mode 100755
index 000000000..b27d75cac
--- /dev/null
+++ b/eos/effects/boosterarmorrepairamountpenalty.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants from group: Booster (9 of 37)
+type = "boosterSideEffect"
+def handler(fit, booster, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Unit",
+ "armorDamageAmount", booster.getModifiedItemAttr("boosterArmorRepairAmountPenalty"))
diff --git a/eos/effects/boostercapacitorcapacitypenalty.py b/eos/effects/boostercapacitorcapacitypenalty.py
new file mode 100755
index 000000000..333563b59
--- /dev/null
+++ b/eos/effects/boostercapacitorcapacitypenalty.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Blue Pill Booster (3 of 5)
+# Implants named like: Exile Booster (3 of 4)
+type = "boosterSideEffect"
+def handler(fit, booster, context):
+ fit.ship.boostItemAttr("capacitorCapacity", booster.getModifiedItemAttr("boosterCapacitorCapacityPenalty"))
diff --git a/eos/effects/boostermaxvelocitypenalty.py b/eos/effects/boostermaxvelocitypenalty.py
new file mode 100755
index 000000000..96e6061f0
--- /dev/null
+++ b/eos/effects/boostermaxvelocitypenalty.py
@@ -0,0 +1,5 @@
+# Used by:
+# Implants from group: Booster (12 of 37)
+type = "boosterSideEffect"
+def handler(fit, booster, context):
+ fit.ship.boostItemAttr("maxVelocity", booster.getModifiedItemAttr("boosterMaxVelocityPenalty"))
diff --git a/eos/effects/boostermissileexplosioncloudpenaltyfixed.py b/eos/effects/boostermissileexplosioncloudpenaltyfixed.py
new file mode 100755
index 000000000..fba0930c1
--- /dev/null
+++ b/eos/effects/boostermissileexplosioncloudpenaltyfixed.py
@@ -0,0 +1,7 @@
+# Used by:
+# Implants named like: Exile Booster (3 of 4)
+# Implants named like: Mindflood Booster (3 of 4)
+type = "boosterSideEffect"
+def handler(fit, booster, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "aoeCloudSize", booster.getModifiedItemAttr("boosterMissileAOECloudPenalty"))
diff --git a/eos/effects/boostermissileexplosionvelocitypenalty.py b/eos/effects/boostermissileexplosionvelocitypenalty.py
new file mode 100755
index 000000000..cdefe1a20
--- /dev/null
+++ b/eos/effects/boostermissileexplosionvelocitypenalty.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Blue Pill Booster (3 of 5)
+type = "boosterSideEffect"
+def handler(fit, booster, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "aoeVelocity", booster.getModifiedItemAttr("boosterAOEVelocityPenalty"))
diff --git a/eos/effects/boostermissilevelocitypenalty.py b/eos/effects/boostermissilevelocitypenalty.py
new file mode 100755
index 000000000..db2918a35
--- /dev/null
+++ b/eos/effects/boostermissilevelocitypenalty.py
@@ -0,0 +1,7 @@
+# Used by:
+# Implants named like: Crash Booster (3 of 4)
+# Implants named like: X Instinct Booster (3 of 4)
+type = "boosterSideEffect"
+def handler(fit, booster, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "maxVelocity", "boosterMissileVelocityPenalty")
diff --git a/eos/effects/boostermodifyboosterarmorpenalties.py b/eos/effects/boostermodifyboosterarmorpenalties.py
new file mode 100755
index 000000000..396f42504
--- /dev/null
+++ b/eos/effects/boostermodifyboosterarmorpenalties.py
@@ -0,0 +1,11 @@
+# Used by:
+# Implants named like: Eifyr and Co. 'Alchemist' Nanite Control NC (2 of 2)
+# Implants named like: Low grade Edge (5 of 6)
+# Skill: Nanite Control
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ attrs = ("boosterArmorHPPenalty", "boosterArmorRepairAmountPenalty")
+ for attr in attrs:
+ fit.boosters.filteredItemBoost(lambda booster: True, attr,
+ container.getModifiedItemAttr("boosterAttributeModifier") * level)
diff --git a/eos/effects/boostermodifyboostermaxvelocityandcapacitorpenalty.py b/eos/effects/boostermodifyboostermaxvelocityandcapacitorpenalty.py
new file mode 100755
index 000000000..a92bef005
--- /dev/null
+++ b/eos/effects/boostermodifyboostermaxvelocityandcapacitorpenalty.py
@@ -0,0 +1,11 @@
+# Used by:
+# Implants named like: Eifyr and Co. 'Alchemist' Nanite Control NC (2 of 2)
+# Implants named like: Low grade Edge (5 of 6)
+# Skill: Nanite Control
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ attrs = ("boosterCapacitorCapacityPenalty", "boosterMaxVelocityPenalty")
+ for attr in attrs:
+ fit.boosters.filteredItemBoost(lambda booster: True, attr,
+ container.getModifiedItemAttr("boosterAttributeModifier") * level)
diff --git a/eos/effects/boostermodifyboostermissilepenalty.py b/eos/effects/boostermodifyboostermissilepenalty.py
new file mode 100755
index 000000000..5a9f912b4
--- /dev/null
+++ b/eos/effects/boostermodifyboostermissilepenalty.py
@@ -0,0 +1,11 @@
+# Used by:
+# Implants named like: Eifyr and Co. 'Alchemist' Nanite Control NC (2 of 2)
+# Implants named like: Low grade Edge (5 of 6)
+# Skill: Nanite Control
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ attrs = ("boosterAOEVelocityPenalty", "boosterMissileAOECloudPenalty", "boosterMissileVelocityPenalty")
+ for attr in attrs:
+ fit.boosters.filteredItemBoost(lambda booster: True, attr,
+ container.getModifiedItemAttr("boosterAttributeModifier") * level)
diff --git a/eos/effects/boostermodifyboostershieldpenalty.py b/eos/effects/boostermodifyboostershieldpenalty.py
new file mode 100755
index 000000000..15b015f71
--- /dev/null
+++ b/eos/effects/boostermodifyboostershieldpenalty.py
@@ -0,0 +1,13 @@
+# Used by:
+# Implants named like: Eifyr and Co. 'Alchemist' Nanite Control NC (2 of 2)
+# Implants named like: Low grade Edge (5 of 6)
+# Skill: Nanite Control
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ attrs = ("boosterShieldBoostAmountPenalty", "boosterShieldCapacityPenalty", "shieldBoostMultiplier")
+ for attr in attrs:
+ # shieldBoostMultiplier can be positive (Blue Pill) and negative value (other boosters)
+ # We're interested in decreasing only side-effects
+ fit.boosters.filteredItemBoost(lambda booster: booster.getModifiedItemAttr(attr) < 0,
+ attr, container.getModifiedItemAttr("boosterAttributeModifier") * level)
diff --git a/eos/effects/boostermodifyboosterturretpenalty.py b/eos/effects/boostermodifyboosterturretpenalty.py
new file mode 100755
index 000000000..2a6e0a427
--- /dev/null
+++ b/eos/effects/boostermodifyboosterturretpenalty.py
@@ -0,0 +1,11 @@
+# Used by:
+# Implants named like: Eifyr and Co. 'Alchemist' Nanite Control NC (2 of 2)
+# Implants named like: Low grade Edge (5 of 6)
+# Skill: Nanite Control
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ attrs = ("boosterTurretFalloffPenalty", "boosterTurretOptimalRange", "boosterTurretTrackingPenalty")
+ for attr in attrs:
+ fit.boosters.filteredItemBoost(lambda booster: True, attr,
+ container.getModifiedItemAttr("boosterAttributeModifier") * level)
diff --git a/eos/effects/boostershieldcapacitypenalty.py b/eos/effects/boostershieldcapacitypenalty.py
new file mode 100755
index 000000000..c7b2d0bd7
--- /dev/null
+++ b/eos/effects/boostershieldcapacitypenalty.py
@@ -0,0 +1,5 @@
+# Used by:
+# Implants from group: Booster (12 of 37)
+type = "boosterSideEffect"
+def handler(fit, booster, context):
+ fit.ship.boostItemAttr("shieldCapacity", booster.getModifiedItemAttr("boosterShieldCapacityPenalty"))
diff --git a/eos/effects/boosterturretfalloffpenalty.py b/eos/effects/boosterturretfalloffpenalty.py
new file mode 100755
index 000000000..f2719f29d
--- /dev/null
+++ b/eos/effects/boosterturretfalloffpenalty.py
@@ -0,0 +1,7 @@
+# Used by:
+# Implants named like: Drop Booster (3 of 4)
+# Implants named like: X Instinct Booster (3 of 4)
+type = "boosterSideEffect"
+def handler(fit, booster, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
+ "falloff", booster.getModifiedItemAttr("boosterTurretFalloffPenalty"))
diff --git a/eos/effects/boosterturretoptimalrangepenalty.py b/eos/effects/boosterturretoptimalrangepenalty.py
new file mode 100755
index 000000000..c1603e555
--- /dev/null
+++ b/eos/effects/boosterturretoptimalrangepenalty.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants from group: Booster (9 of 37)
+type = "boosterSideEffect"
+def handler(fit, booster, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
+ "maxRange", booster.getModifiedItemAttr("boosterTurretOptimalRange"))
diff --git a/eos/effects/boosterturrettrackingpenalty.py b/eos/effects/boosterturrettrackingpenalty.py
new file mode 100755
index 000000000..916f5f231
--- /dev/null
+++ b/eos/effects/boosterturrettrackingpenalty.py
@@ -0,0 +1,7 @@
+# Used by:
+# Implants named like: Exile Booster (3 of 4)
+# Implants named like: Frentix Booster (3 of 4)
+type = "boosterSideEffect"
+def handler(fit, booster, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
+ "trackingSpeed", booster.getModifiedItemAttr("boosterTurretTrackingPenalty"))
diff --git a/eos/effects/caldarisetbonus3.py b/eos/effects/caldarisetbonus3.py
new file mode 100755
index 000000000..f541f9822
--- /dev/null
+++ b/eos/effects/caldarisetbonus3.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Talon (6 of 12)
+runTime = "early"
+type = "passive"
+def handler(fit, implant, context):
+ fit.implants.filteredItemMultiply(lambda implant: "implantSetCaldariNavy" in implant.itemModifiedAttributes and\
+ "scanGravimetricStrengthPercent" in implant.itemModifiedAttributes,
+ "scanGravimetricStrengthPercent", implant.getModifiedItemAttr("implantSetCaldariNavy"))
diff --git a/eos/effects/caldarisetlgbonus.py b/eos/effects/caldarisetlgbonus.py
new file mode 100755
index 000000000..84afd4665
--- /dev/null
+++ b/eos/effects/caldarisetlgbonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Implants named like: Low grade Talon (6 of 6)
+runTime = "early"
+type = "passive"
+def handler(fit, item, context):
+ fit.implants.filteredItemMultiply(lambda implant: "scanGravimetricStrengthModifier" in implant.itemModifiedAttributes,
+ "scanGravimetricStrengthModifier", item.getModifiedItemAttr("implantSetLGCaldariNavy"))
diff --git a/eos/effects/caldarishipecmburstoptimalrangecb3.py b/eos/effects/caldarishipecmburstoptimalrangecb3.py
new file mode 100755
index 000000000..9ab6f7e06
--- /dev/null
+++ b/eos/effects/caldarishipecmburstoptimalrangecb3.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Scorpion
+# Ship: Scorpion Ishukone Watch
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM Burst",
+ "ecmBurstRange", ship.getModifiedItemAttr("shipBonusCB3") * level)
\ No newline at end of file
diff --git a/eos/effects/caldarishipewcapacitorneedcc.py b/eos/effects/caldarishipewcapacitorneedcc.py
new file mode 100755
index 000000000..3cf02ab7d
--- /dev/null
+++ b/eos/effects/caldarishipewcapacitorneedcc.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Falcon
+# Ship: Rook
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
+ "capacitorNeed", ship.getModifiedItemAttr("shipBonusCC") * level)
diff --git a/eos/effects/caldarishipewcapacitorneedcf2.py b/eos/effects/caldarishipewcapacitorneedcf2.py
new file mode 100755
index 000000000..de0642cf4
--- /dev/null
+++ b/eos/effects/caldarishipewcapacitorneedcf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Griffin (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
+ "capacitorNeed", ship.getModifiedItemAttr("shipBonusCF2") * level)
diff --git a/eos/effects/caldarishipewfalloffrangecb3.py b/eos/effects/caldarishipewfalloffrangecb3.py
new file mode 100755
index 000000000..aea416ad7
--- /dev/null
+++ b/eos/effects/caldarishipewfalloffrangecb3.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Scorpion
+# Ship: Scorpion Ishukone Watch
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
+ "falloff", ship.getModifiedItemAttr("shipBonusCB3") * level)
\ No newline at end of file
diff --git a/eos/effects/caldarishipewfalloffrangecc2.py b/eos/effects/caldarishipewfalloffrangecc2.py
new file mode 100755
index 000000000..012514edb
--- /dev/null
+++ b/eos/effects/caldarishipewfalloffrangecc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Blackbird
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
+ "falloff", ship.getModifiedItemAttr("shipBonusCC2") * level)
diff --git a/eos/effects/caldarishipewoptimalrangecb3.py b/eos/effects/caldarishipewoptimalrangecb3.py
new file mode 100755
index 000000000..bd730b235
--- /dev/null
+++ b/eos/effects/caldarishipewoptimalrangecb3.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Scorpion
+# Ship: Scorpion Ishukone Watch
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
+ "maxRange", ship.getModifiedItemAttr("shipBonusCB3") * level)
\ No newline at end of file
diff --git a/eos/effects/caldarishipewoptimalrangecc2.py b/eos/effects/caldarishipewoptimalrangecc2.py
new file mode 100755
index 000000000..f4f153f5c
--- /dev/null
+++ b/eos/effects/caldarishipewoptimalrangecc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Blackbird
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
+ "maxRange", ship.getModifiedItemAttr("shipBonusCC2") * level)
diff --git a/eos/effects/caldarishipewstrengthcb.py b/eos/effects/caldarishipewstrengthcb.py
new file mode 100755
index 000000000..a9b5f1efa
--- /dev/null
+++ b/eos/effects/caldarishipewstrengthcb.py
@@ -0,0 +1,10 @@
+# Used by:
+# Ship: Scorpion
+# Ship: Scorpion Ishukone Watch
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battleship").level
+ for sensorType in ("Gravimetric", "Ladar", "Magnetometric", "Radar"):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
+ "scan{0}StrengthBonus".format(sensorType),
+ ship.getModifiedItemAttr("shipBonusCB") * level)
diff --git a/eos/effects/capacitorcapacityaddpassive.py b/eos/effects/capacitorcapacityaddpassive.py
new file mode 100755
index 000000000..14ccbec3c
--- /dev/null
+++ b/eos/effects/capacitorcapacityaddpassive.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystems from group: Engineering Systems (16 of 16)
+# Subsystem: Tengu Offensive - Magnetic Infusion Basin
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.increaseItemAttr("capacitorCapacity",
+ module.getModifiedItemAttr("capacitorCapacity"))
diff --git a/eos/effects/capacitorcapacitybonus.py b/eos/effects/capacitorcapacitybonus.py
new file mode 100755
index 000000000..7c69a3a9c
--- /dev/null
+++ b/eos/effects/capacitorcapacitybonus.py
@@ -0,0 +1,5 @@
+# Used by:
+# Modules from group: Capacitor Battery (27 of 27)
+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
new file mode 100755
index 000000000..b4da5a878
--- /dev/null
+++ b/eos/effects/capacitorcapacitymultiply.py
@@ -0,0 +1,11 @@
+# Used by:
+# Modules from group: Capacitor Flux Coil (12 of 12)
+# Modules from group: Capacitor Power Relay (25 of 25)
+# Modules from group: Power Diagnostic System (31 of 31)
+# Modules from group: Propulsion Module (107 of 107)
+# Modules from group: Reactor Control Unit (28 of 28)
+# 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/capacityaddpassive.py b/eos/effects/capacityaddpassive.py
new file mode 100755
index 000000000..9caf68da3
--- /dev/null
+++ b/eos/effects/capacityaddpassive.py
@@ -0,0 +1,5 @@
+# Used by:
+# Subsystems from group: Defensive Systems (16 of 16)
+type = "passive"
+def handler(fit, subsystem, context):
+ fit.ship.increaseItemAttr("capacity", subsystem.getModifiedItemAttr("capacity") or 0)
diff --git a/eos/effects/capitallauncherskillcitadelemdamage.py b/eos/effects/capitallauncherskillcitadelemdamage.py
new file mode 100755
index 000000000..dde2baa9a
--- /dev/null
+++ b/eos/effects/capitallauncherskillcitadelemdamage.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6)
+# Skill: Citadel 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"),
+ "emDamage", container.getModifiedItemAttr("damageMultiplierBonus") * level)
diff --git a/eos/effects/capitallauncherskillcitadelexplosivedamage.py b/eos/effects/capitallauncherskillcitadelexplosivedamage.py
new file mode 100755
index 000000000..74a91dc79
--- /dev/null
+++ b/eos/effects/capitallauncherskillcitadelexplosivedamage.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6)
+# Skill: Citadel 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"),
+ "explosiveDamage", container.getModifiedItemAttr("damageMultiplierBonus") * level)
diff --git a/eos/effects/capitallauncherskillcitadelkineticdamage.py b/eos/effects/capitallauncherskillcitadelkineticdamage.py
new file mode 100755
index 000000000..eef7e95c3
--- /dev/null
+++ b/eos/effects/capitallauncherskillcitadelkineticdamage.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6)
+# Skill: Citadel 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"),
+ "kineticDamage", container.getModifiedItemAttr("damageMultiplierBonus") * level)
diff --git a/eos/effects/capitallauncherskillcitadelthermaldamage.py b/eos/effects/capitallauncherskillcitadelthermaldamage.py
new file mode 100755
index 000000000..115d0de40
--- /dev/null
+++ b/eos/effects/capitallauncherskillcitadelthermaldamage.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6)
+# Skill: Citadel 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"),
+ "thermalDamage", container.getModifiedItemAttr("damageMultiplierBonus") * level)
diff --git a/eos/effects/capitallauncherskillcruisecitadelemdamage1.py b/eos/effects/capitallauncherskillcruisecitadelemdamage1.py
new file mode 100755
index 000000000..659049e16
--- /dev/null
+++ b/eos/effects/capitallauncherskillcruisecitadelemdamage1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Citadel Cruise Missiles
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Cruise Missiles"),
+ "emDamage", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
diff --git a/eos/effects/capitallauncherskillcruisecitadelexplosivedamage1.py b/eos/effects/capitallauncherskillcruisecitadelexplosivedamage1.py
new file mode 100755
index 000000000..5e4f4ea06
--- /dev/null
+++ b/eos/effects/capitallauncherskillcruisecitadelexplosivedamage1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Citadel Cruise Missiles
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Cruise Missiles"),
+ "explosiveDamage", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
diff --git a/eos/effects/capitallauncherskillcruisecitadelkineticdamage1.py b/eos/effects/capitallauncherskillcruisecitadelkineticdamage1.py
new file mode 100755
index 000000000..8c8698c04
--- /dev/null
+++ b/eos/effects/capitallauncherskillcruisecitadelkineticdamage1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Citadel Cruise Missiles
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Cruise Missiles"),
+ "kineticDamage", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
diff --git a/eos/effects/capitallauncherskillcruisecitadelthermaldamage1.py b/eos/effects/capitallauncherskillcruisecitadelthermaldamage1.py
new file mode 100755
index 000000000..6d8981da2
--- /dev/null
+++ b/eos/effects/capitallauncherskillcruisecitadelthermaldamage1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Citadel Cruise Missiles
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Cruise Missiles"),
+ "thermalDamage", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
diff --git a/eos/effects/capitalremotearmorrepairercapneedbonusskill.py b/eos/effects/capitalremotearmorrepairercapneedbonusskill.py
new file mode 100755
index 000000000..9b6af1787
--- /dev/null
+++ b/eos/effects/capitalremotearmorrepairercapneedbonusskill.py
@@ -0,0 +1,8 @@
+# Used by:
+# Variations of module: Capital Remote Repair Augmentor I (2 of 2)
+# Skill: Capital Remote Armor Repair Systems
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Armor Repair Systems"),
+ "capacitorNeed", container.getModifiedItemAttr("capNeedBonus") * level)
diff --git a/eos/effects/capitalremoteenergytransfercapneedbonusskill.py b/eos/effects/capitalremoteenergytransfercapneedbonusskill.py
new file mode 100755
index 000000000..6858aab03
--- /dev/null
+++ b/eos/effects/capitalremoteenergytransfercapneedbonusskill.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Capital Energy Emission Systems
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Energy Emission Systems"),
+ "capacitorNeed", skill.getModifiedItemAttr("capNeedBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/capitalremoteshieldtransfercapneedbonusskill.py b/eos/effects/capitalremoteshieldtransfercapneedbonusskill.py
new file mode 100755
index 000000000..dc8321f68
--- /dev/null
+++ b/eos/effects/capitalremoteshieldtransfercapneedbonusskill.py
@@ -0,0 +1,7 @@
+# Used by:
+# Skill: Capital Shield Emission Systems
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"),
+ "capacitorNeed", container.getModifiedItemAttr("capNeedBonus") * level)
diff --git a/eos/effects/capitalrepairsystemsskilldurationbonus.py b/eos/effects/capitalrepairsystemsskilldurationbonus.py
new file mode 100755
index 000000000..fc2cb56dd
--- /dev/null
+++ b/eos/effects/capitalrepairsystemsskilldurationbonus.py
@@ -0,0 +1,9 @@
+# Used by:
+# Modules named like: Nanobot Accelerator (8 of 8)
+# Skill: Capital Repair Systems
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Repair Systems"),
+ "duration", container.getModifiedItemAttr("durationSkillBonus") * level,
+ stackingPenalties = "skill" not in context)
diff --git a/eos/effects/capitalshieldoperationskillcapacitorneedbonus.py b/eos/effects/capitalshieldoperationskillcapacitorneedbonus.py
new file mode 100755
index 000000000..c64970d8c
--- /dev/null
+++ b/eos/effects/capitalshieldoperationskillcapacitorneedbonus.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules named like: Core Defense Capacitor Safeguard (8 of 8)
+# Skill: Capital Shield Operation
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Operation"),
+ "capacitorNeed", container.getModifiedItemAttr("shieldBoostCapacitorBonus") * level)
diff --git a/eos/effects/capitalturretskillhybriddamage.py b/eos/effects/capitalturretskillhybriddamage.py
new file mode 100755
index 000000000..3fa8dbf76
--- /dev/null
+++ b/eos/effects/capitalturretskillhybriddamage.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Capital Hybrid Turret
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Hybrid Turret"),
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/capitalturretskilllaserdamage.py b/eos/effects/capitalturretskilllaserdamage.py
new file mode 100755
index 000000000..a811ddd2e
--- /dev/null
+++ b/eos/effects/capitalturretskilllaserdamage.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Capital Energy Turret
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Energy Turret"),
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/capitalturretskillprojectiledamage.py b/eos/effects/capitalturretskillprojectiledamage.py
new file mode 100755
index 000000000..19d71c92b
--- /dev/null
+++ b/eos/effects/capitalturretskillprojectiledamage.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Capital Projectile Turret
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Projectile Turret"),
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/capneedbonuseffecthybrids.py b/eos/effects/capneedbonuseffecthybrids.py
new file mode 100755
index 000000000..57924c71e
--- /dev/null
+++ b/eos/effects/capneedbonuseffecthybrids.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules named like: Hybrid Discharge Elutriation (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Hybrid Weapon",
+ "capacitorNeed", module.getModifiedItemAttr("capNeedBonus"))
\ No newline at end of file
diff --git a/eos/effects/capneedbonuseffectlasers.py b/eos/effects/capneedbonuseffectlasers.py
new file mode 100755
index 000000000..cfca86f0a
--- /dev/null
+++ b/eos/effects/capneedbonuseffectlasers.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules named like: Energy Discharge Elutriation (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Weapon",
+ "capacitorNeed", module.getModifiedItemAttr("capNeedBonus"))
diff --git a/eos/effects/cargocapacitymultiply.py b/eos/effects/cargocapacitymultiply.py
new file mode 100755
index 000000000..c719d57c1
--- /dev/null
+++ b/eos/effects/cargocapacitymultiply.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules from group: Expanded Cargohold (13 of 13)
+# Modules from group: Overdrive Injector System (14 of 14)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.multiplyItemAttr("capacity", module.getModifiedItemAttr("cargoCapacityMultiplier"))
diff --git a/eos/effects/carrieramarrarmorenergytransferrange3.py b/eos/effects/carrieramarrarmorenergytransferrange3.py
new file mode 100755
index 000000000..024325aeb
--- /dev/null
+++ b/eos/effects/carrieramarrarmorenergytransferrange3.py
@@ -0,0 +1,11 @@
+# Used by:
+# Ship: Aeon
+# Ship: Archon
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Carrier").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Armor Repair Systems"),
+ "maxRange", ship.getModifiedItemAttr("carrierAmarrBonus3") * level)
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Energy Emission Systems"),
+ "powerTransferRange", ship.getModifiedItemAttr("carrierAmarrBonus3") * level)
+
\ No newline at end of file
diff --git a/eos/effects/carrieramarrarmorresist2.py b/eos/effects/carrieramarrarmorresist2.py
new file mode 100755
index 000000000..bdcde59c0
--- /dev/null
+++ b/eos/effects/carrieramarrarmorresist2.py
@@ -0,0 +1,9 @@
+# Used by:
+# Ship: Aeon
+# Ship: Archon
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Carrier").level
+ for resType in ("Em", "Explosive", "Kinetic", "Thermal"):
+ fit.ship.boostItemAttr("armor{0}DamageResonance".format(resType),
+ ship.getModifiedItemAttr("carrierAmarrBonus2") * level)
diff --git a/eos/effects/carrieramarrdronemax1.py b/eos/effects/carrieramarrdronemax1.py
new file mode 100755
index 000000000..2e9ca1145
--- /dev/null
+++ b/eos/effects/carrieramarrdronemax1.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Aeon
+# Ship: Archon
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Carrier").level
+ amount = ship.getModifiedItemAttr("carrierAmarrBonus1")
+ fit.extraAttributes.increase("maxActiveDrones", amount * level)
diff --git a/eos/effects/carrieramarrfighterbombermaxvelocity2.py b/eos/effects/carrieramarrfighterbombermaxvelocity2.py
new file mode 100755
index 000000000..82f0bfda2
--- /dev/null
+++ b/eos/effects/carrieramarrfighterbombermaxvelocity2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Revenant
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Carrier").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Fighter Bombers"),
+ "maxVelocity", ship.getModifiedItemAttr("carrierAmarrBonus2") * level)
diff --git a/eos/effects/carrieramarrfightermaxvelocity2.py b/eos/effects/carrieramarrfightermaxvelocity2.py
new file mode 100755
index 000000000..0dbfba739
--- /dev/null
+++ b/eos/effects/carrieramarrfightermaxvelocity2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Revenant
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Carrier").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Fighters"),
+ "maxVelocity", ship.getModifiedItemAttr("carrierAmarrBonus2") * level)
diff --git a/eos/effects/carrieramarrleadershipmaxgroupactive4.py b/eos/effects/carrieramarrleadershipmaxgroupactive4.py
new file mode 100755
index 000000000..e1064e43c
--- /dev/null
+++ b/eos/effects/carrieramarrleadershipmaxgroupactive4.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Aeon
+# Ship: Revenant
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Carrier").level
+ fit.modules.filteredItemIncrease(lambda mod: mod.item.group.name == "Gang Coordinator",
+ "maxGroupActive", ship.getModifiedItemAttr("carrierAmarrBonus4") * level)
diff --git a/eos/effects/carriercaldaridronemax1.py b/eos/effects/carriercaldaridronemax1.py
new file mode 100755
index 000000000..3b67951f4
--- /dev/null
+++ b/eos/effects/carriercaldaridronemax1.py
@@ -0,0 +1,9 @@
+# Used by:
+# Ship: Chimera
+# Ship: Revenant
+# Ship: Wyvern
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Carrier").level
+ amount = ship.getModifiedItemAttr("carrierCaldariBonus1")
+ fit.extraAttributes.increase("maxActiveDrones", amount * level)
diff --git a/eos/effects/carriercaldarileadershipmaxgroupactive4.py b/eos/effects/carriercaldarileadershipmaxgroupactive4.py
new file mode 100755
index 000000000..345dc2347
--- /dev/null
+++ b/eos/effects/carriercaldarileadershipmaxgroupactive4.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Wyvern
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Carrier").level
+ fit.modules.filteredItemIncrease(lambda mod: mod.item.group.name == "Gang Coordinator",
+ "maxGroupActive", ship.getModifiedItemAttr("carrierCaldariBonus4") * level)
diff --git a/eos/effects/carriercaldarishieldenergytransferrange3.py b/eos/effects/carriercaldarishieldenergytransferrange3.py
new file mode 100755
index 000000000..2b820caa3
--- /dev/null
+++ b/eos/effects/carriercaldarishieldenergytransferrange3.py
@@ -0,0 +1,11 @@
+# Used by:
+# Ship: Chimera
+# Ship: Revenant
+# Ship: Wyvern
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Carrier").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"),
+ "shieldTransferRange", ship.getModifiedItemAttr("carrierCaldariBonus3") * level)
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Energy Emission Systems"),
+ "powerTransferRange", ship.getModifiedItemAttr("carrierCaldariBonus3") * level)
diff --git a/eos/effects/carriercaldarishieldresist2.py b/eos/effects/carriercaldarishieldresist2.py
new file mode 100755
index 000000000..f97726012
--- /dev/null
+++ b/eos/effects/carriercaldarishieldresist2.py
@@ -0,0 +1,9 @@
+# Used by:
+# Ship: Chimera
+# Ship: Wyvern
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Carrier").level
+ for resType in ("Em", "Explosive", "Kinetic", "Thermal"):
+ fit.ship.boostItemAttr("shield{0}DamageResonance".format(resType),
+ ship.getModifiedItemAttr("carrierCaldariBonus2") * level)
diff --git a/eos/effects/carrierfightercontrolrangebonus.py b/eos/effects/carrierfightercontrolrangebonus.py
new file mode 100755
index 000000000..d2b6ffe94
--- /dev/null
+++ b/eos/effects/carrierfightercontrolrangebonus.py
@@ -0,0 +1,10 @@
+# Used by:
+# Ships from group: Carrier (4 of 4)
+# Ships from group: Supercarrier (5 of 5)
+type = "passive"
+def handler(fit, ship, context):
+ # The fighter control range bonus only affects fighters.
+ # Until we can calculate and display control range on a per-drone level,
+ # we will have to leave this effect as a dummy.
+ pass
+ # fit.extraAttributes.multiply("droneControlRange", ship.getModifiedItemAttr("droneRangeBonus"))
diff --git a/eos/effects/carriergallentearmorshieldtransferrange3.py b/eos/effects/carriergallentearmorshieldtransferrange3.py
new file mode 100755
index 000000000..c21a4145c
--- /dev/null
+++ b/eos/effects/carriergallentearmorshieldtransferrange3.py
@@ -0,0 +1,10 @@
+# Used by:
+# Ship: Nyx
+# Ship: Thanatos
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Carrier").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"),
+ "shieldTransferRange", ship.getModifiedItemAttr("carrierGallenteBonus3") * level)
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Armor Repair Systems"),
+ "maxRange", ship.getModifiedItemAttr("carrierGallenteBonus3") * level)
diff --git a/eos/effects/carriergallentebomberdroneowndmg2.py b/eos/effects/carriergallentebomberdroneowndmg2.py
new file mode 100755
index 000000000..874c7baf6
--- /dev/null
+++ b/eos/effects/carriergallentebomberdroneowndmg2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Nyx
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Carrier").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Fighter Bombers"),
+ "damageMultiplier", ship.getModifiedItemAttr("carrierGallenteBonus2") * level)
diff --git a/eos/effects/carriergallentedronemax1.py b/eos/effects/carriergallentedronemax1.py
new file mode 100755
index 000000000..a54a3c274
--- /dev/null
+++ b/eos/effects/carriergallentedronemax1.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Nyx
+# Ship: Thanatos
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Carrier").level
+ amount = ship.getModifiedItemAttr("carrierGallenteBonus1")
+ fit.extraAttributes.increase("maxActiveDrones", amount * level)
diff --git a/eos/effects/carriergallentedroneowndmg2.py b/eos/effects/carriergallentedroneowndmg2.py
new file mode 100755
index 000000000..b8d7a6e89
--- /dev/null
+++ b/eos/effects/carriergallentedroneowndmg2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Nyx
+# Ship: Thanatos
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Carrier").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Fighters"),
+ "damageMultiplier", ship.getModifiedItemAttr("carrierGallenteBonus2") * level)
diff --git a/eos/effects/carriergallenteleadershipmaxgroupactive4.py b/eos/effects/carriergallenteleadershipmaxgroupactive4.py
new file mode 100755
index 000000000..62f17ab61
--- /dev/null
+++ b/eos/effects/carriergallenteleadershipmaxgroupactive4.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Nyx
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Carrier").level
+ fit.modules.filteredItemIncrease(lambda mod: mod.item.group.name == "Gang Coordinator",
+ "maxGroupActive", ship.getModifiedItemAttr("carrierGallenteBonus4") * level)
diff --git a/eos/effects/carrierminmatararmorshieldamount.py b/eos/effects/carrierminmatararmorshieldamount.py
new file mode 100755
index 000000000..9990a5dc2
--- /dev/null
+++ b/eos/effects/carrierminmatararmorshieldamount.py
@@ -0,0 +1,10 @@
+# Used by:
+# Ship: Hel
+# Ship: Nidhoggur
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Carrier").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Shield Transporter",
+ "shieldBonus", ship.getModifiedItemAttr("carrierMinmatarBonus2") * level)
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Projector",
+ "armorDamageAmount", ship.getModifiedItemAttr("carrierMinmatarBonus2") * level)
diff --git a/eos/effects/carrierminmatararmorshieldtransferrange3.py b/eos/effects/carrierminmatararmorshieldtransferrange3.py
new file mode 100755
index 000000000..0ac8f2cfc
--- /dev/null
+++ b/eos/effects/carrierminmatararmorshieldtransferrange3.py
@@ -0,0 +1,10 @@
+# Used by:
+# Ship: Hel
+# Ship: Nidhoggur
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Carrier").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"),
+ "shieldTransferRange", ship.getModifiedItemAttr("carrierMinmatarBonus3") * level)
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Armor Repair Systems"),
+ "maxRange", ship.getModifiedItemAttr("carrierMinmatarBonus3") * level)
diff --git a/eos/effects/carrierminmatardronemax1.py b/eos/effects/carrierminmatardronemax1.py
new file mode 100755
index 000000000..664d7068e
--- /dev/null
+++ b/eos/effects/carrierminmatardronemax1.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Hel
+# Ship: Nidhoggur
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Carrier").level
+ amount = ship.getModifiedItemAttr("carrierMinmatarBonus1")
+ fit.extraAttributes.increase("maxActiveDrones", amount * level)
diff --git a/eos/effects/carrierminmatarleadershipmaxgroupactive4.py b/eos/effects/carrierminmatarleadershipmaxgroupactive4.py
new file mode 100755
index 000000000..14d96e46b
--- /dev/null
+++ b/eos/effects/carrierminmatarleadershipmaxgroupactive4.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Hel
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Carrier").level
+ fit.modules.filteredItemIncrease(lambda mod: mod.item.group.name == "Gang Coordinator",
+ "maxGroupActive", ship.getModifiedItemAttr("carrierMinmatarBonus4") * level)
diff --git a/eos/effects/cloaking.py b/eos/effects/cloaking.py
new file mode 100755
index 000000000..f21d6b55a
--- /dev/null
+++ b/eos/effects/cloaking.py
@@ -0,0 +1,12 @@
+# Used by:
+# Modules from group: Cloaking Device (12 of 14)
+type = "active"
+runTime = "early"
+#TODO: Rewrite this effect
+def handler(fit, module, context):
+ # Set flag which is used to determine if ship is cloaked or not
+ # This is used to apply cloak-only bonuses, like Black Ops' speed bonus
+ # Doesn't apply to covops cloaks
+ fit.extraAttributes["cloaked"] = True
+ # Apply speed penalty
+ fit.ship.multiplyItemAttr("maxVelocity", module.getModifiedItemAttr("maxVelocityBonus"))
diff --git a/eos/effects/cloakingscanresolutionmultiplier.py b/eos/effects/cloakingscanresolutionmultiplier.py
new file mode 100755
index 000000000..3b7648c2a
--- /dev/null
+++ b/eos/effects/cloakingscanresolutionmultiplier.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules from group: Cloaking Device (12 of 14)
+type = "offline"
+def handler(fit, module, context):
+ fit.ship.multiplyItemAttr("scanResolution",
+ module.getModifiedItemAttr("scanResolutionMultiplier"),
+ stackingPenalties = True, penaltyGroup="cloakingScanResolutionMultiplier")
diff --git a/eos/effects/cloakingtargetingdelaybonuslrsmcloakingpassive.py b/eos/effects/cloakingtargetingdelaybonuslrsmcloakingpassive.py
new file mode 100755
index 000000000..d4fd4a1ec
--- /dev/null
+++ b/eos/effects/cloakingtargetingdelaybonuslrsmcloakingpassive.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules named like: Targeting Systems Stabilizer (8 of 8)
+type = "offline"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda module: module.item.requiresSkill("Cloaking"),
+ "cloakingTargetingDelay", module.getModifiedItemAttr("cloakingTargetingDelayBonus"))
diff --git a/eos/effects/cloakingtargetingdelaybonuspostpercentcloakingtargetingdelaybonusforshipmodulesrequiringcloaking.py b/eos/effects/cloakingtargetingdelaybonuspostpercentcloakingtargetingdelaybonusforshipmodulesrequiringcloaking.py
new file mode 100755
index 000000000..e4c4f7f1e
--- /dev/null
+++ b/eos/effects/cloakingtargetingdelaybonuspostpercentcloakingtargetingdelaybonusforshipmodulesrequiringcloaking.py
@@ -0,0 +1,7 @@
+# Used by:
+# Skill: Cloaking
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Cloaking"),
+ "cloakingTargetingDelay",
+ skill.getModifiedItemAttr("cloakingTargetingDelayBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/cloakingwarpsafe.py b/eos/effects/cloakingwarpsafe.py
new file mode 100755
index 000000000..29094714f
--- /dev/null
+++ b/eos/effects/cloakingwarpsafe.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules named like: Covert Ops Cloaking Device II (2 of 2)
+type = "active"
+runTime = "early"
+def handler(fit, ship, context):
+ fit.extraAttributes["cloaked"] = True
+ #TODO: Implement
\ No newline at end of file
diff --git a/eos/effects/clonevatmaxjumpclonebonusskillnew.py b/eos/effects/clonevatmaxjumpclonebonusskillnew.py
new file mode 100755
index 000000000..565529669
--- /dev/null
+++ b/eos/effects/clonevatmaxjumpclonebonusskillnew.py
@@ -0,0 +1,5 @@
+# Used by:
+# Skill: Cloning Facility Operation
+type = "passive"
+def handler(fit, skill, context):
+ fit.ship.boostItemAttr("maxJumpClones", skill.getModifiedItemAttr("maxJumpClonesBonus") * skill.level)
diff --git a/eos/effects/commandbonusecmmultiplywithcommandbonushidden.py b/eos/effects/commandbonusecmmultiplywithcommandbonushidden.py
new file mode 100755
index 000000000..e133132a4
--- /dev/null
+++ b/eos/effects/commandbonusecmmultiplywithcommandbonushidden.py
@@ -0,0 +1,12 @@
+# Used by:
+# Variations of module: Information Warfare Link - Electronic Superiority I (2 of 2)
+gangBonus = "commandBonusECM"
+gangBoost = "ewarStrECM"
+type = "active", "gang"
+def handler(fit, module, context):
+ if "gang" not in context: return
+ for scanType in ("Magnetometric", "Radar", "Ladar", "Gravimetric"):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
+ "scan%sStrengthBonus" % scanType,
+ module.getModifiedItemAttr("commandBonusECM"),
+ stackingPenalties = True)
diff --git a/eos/effects/commandbonusrsdmultiplywithcommandbonushidden.py b/eos/effects/commandbonusrsdmultiplywithcommandbonushidden.py
new file mode 100755
index 000000000..137c17694
--- /dev/null
+++ b/eos/effects/commandbonusrsdmultiplywithcommandbonushidden.py
@@ -0,0 +1,11 @@
+# Used by:
+# Variations of module: Information Warfare Link - Electronic Superiority I (2 of 2)
+gangBonus = "commandBonusRSD"
+gangBoost = "ewarStrRSD"
+type = "active", "gang"
+def handler(fit, module, context):
+ if "gang" not in context: return
+ for bonus in ("scanResolutionBonus", "maxTargetRangeBonus"):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Sensor Damper",
+ bonus, module.getModifiedItemAttr("commandBonusRSD"),
+ stackingPenalties = True)
diff --git a/eos/effects/commandbonustdmultiplywithcommandbonushidden.py b/eos/effects/commandbonustdmultiplywithcommandbonushidden.py
new file mode 100755
index 000000000..70be60af7
--- /dev/null
+++ b/eos/effects/commandbonustdmultiplywithcommandbonushidden.py
@@ -0,0 +1,10 @@
+# Used by:
+# Variations of module: Information Warfare Link - Electronic Superiority I (2 of 2)
+gangBonus = "commandBonusTD"
+gangBoost = "ewarStrTD"
+type = "active", "gang"
+def handler(fit, module, context):
+ for bonus in ("maxRangeBonus", "falloffBonus", "trackingSpeedBonus"):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Disruptor",
+ bonus, module.getModifiedItemAttr("commandBonusTD"),
+ stackingPenalties = True)
diff --git a/eos/effects/commandbonustpmultiplywithcommandbonushidden.py b/eos/effects/commandbonustpmultiplywithcommandbonushidden.py
new file mode 100755
index 000000000..6ae07e2d3
--- /dev/null
+++ b/eos/effects/commandbonustpmultiplywithcommandbonushidden.py
@@ -0,0 +1,10 @@
+# Used by:
+# Variations of module: Information Warfare Link - Electronic Superiority I (2 of 2)
+gangBonus = "commandBonusTP"
+gangBoost = "ewarStrTP"
+type = "active", "gang"
+def handler(fit, module, context):
+ if "gang" not in context: return
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Target Painter",
+ "signatureRadiusBonus", module.getModifiedItemAttr("commandBonusTP"),
+ stackingPenalties = True)
diff --git a/eos/effects/commandmultiplier.py b/eos/effects/commandmultiplier.py
new file mode 100755
index 000000000..d0a69f359
--- /dev/null
+++ b/eos/effects/commandmultiplier.py
@@ -0,0 +1,7 @@
+# Used by:
+# Skills named like: Warfare Specialist (4 of 5)
+# Skill: Mining Director
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill(skill),
+ "commandBonus", skill.level)
diff --git a/eos/effects/commandmultiplierinformationwarfarespecialisthidden.py b/eos/effects/commandmultiplierinformationwarfarespecialisthidden.py
new file mode 100755
index 000000000..6b459e0f1
--- /dev/null
+++ b/eos/effects/commandmultiplierinformationwarfarespecialisthidden.py
@@ -0,0 +1,7 @@
+# Used by:
+# Skill: Information Warfare Specialist
+runTime = "early"
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill(skill),
+ "commandBonusHidden", skill.level)
diff --git a/eos/effects/commandshipmultirelayeffect.py b/eos/effects/commandshipmultirelayeffect.py
new file mode 100755
index 000000000..1eca071b1
--- /dev/null
+++ b/eos/effects/commandshipmultirelayeffect.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ships from group: Command Ship (8 of 8)
+# Ship: Orca
+# Ship: Rorqual
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemIncrease(lambda mod: mod.item.group.name == "Gang Coordinator",
+ "maxGroupActive", ship.getModifiedItemAttr("maxGangModules"))
diff --git a/eos/effects/controlledburstscapneedbonuspostpercentcapacitorneedlocationshipmodulesrequiringgunnery.py b/eos/effects/controlledburstscapneedbonuspostpercentcapacitorneedlocationshipmodulesrequiringgunnery.py
new file mode 100755
index 000000000..ceb7e76c5
--- /dev/null
+++ b/eos/effects/controlledburstscapneedbonuspostpercentcapacitorneedlocationshipmodulesrequiringgunnery.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Inherent Implants 'Lancer' Controlled Bursts CB (6 of 6)
+# Skill: Controlled Bursts
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
+ "capacitorNeed", container.getModifiedItemAttr("capNeedBonus") * level)
diff --git a/eos/effects/covertcloakcpuaddition.py b/eos/effects/covertcloakcpuaddition.py
new file mode 100644
index 000000000..b36d4da96
--- /dev/null
+++ b/eos/effects/covertcloakcpuaddition.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules named like: Covert Ops Cloaking Device II (2 of 2)
+# Module: Covert Cynosural Field Generator I
+type = "passive"
+def handler(fit, module, context):
+ module.increaseItemAttr("cpu", module.getModifiedItemAttr("covertCloakCPUAdd") or 0)
diff --git a/eos/effects/covertcynocpupenalty.py b/eos/effects/covertcynocpupenalty.py
new file mode 100755
index 000000000..cc2b76a90
--- /dev/null
+++ b/eos/effects/covertcynocpupenalty.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystems from group: Offensive Systems (12 of 16)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill("Cynosural Field Theory"),
+ "covertCloakCPUAdd", module.getModifiedItemAttr("covertCloakCPUPenalty"))
+
diff --git a/eos/effects/covertopsandreconopscloakmoduledelaybonus.py b/eos/effects/covertopsandreconopscloakmoduledelaybonus.py
new file mode 100755
index 000000000..596651f3d
--- /dev/null
+++ b/eos/effects/covertopsandreconopscloakmoduledelaybonus.py
@@ -0,0 +1,11 @@
+# Used by:
+# Ships from group: Black Ops (4 of 4)
+# Ships from group: Blockade Runner (4 of 4)
+# Ships from group: Covert Ops (4 of 4)
+# Ships from group: Force Recon Ship (4 of 4)
+# Ships from group: Stealth Bomber (4 of 4)
+# Subsystems named like: Offensive Covert Reconfiguration (4 of 4)
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredItemForce(lambda mod: mod.item.group.name == "Cloaking Device",
+ "moduleReactivationDelay", container.getModifiedItemAttr("covertOpsAndReconOpsCloakModuleDelay"))
diff --git a/eos/effects/covertopscloakcpupenalty.py b/eos/effects/covertopscloakcpupenalty.py
new file mode 100755
index 000000000..50a71b80e
--- /dev/null
+++ b/eos/effects/covertopscloakcpupenalty.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystems from group: Offensive Systems (12 of 16)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill("Cloaking"),
+ "covertCloakCPUAdd", module.getModifiedItemAttr("covertCloakCPUPenalty"))
+
diff --git a/eos/effects/covertopscloakcpupercentbonus1.py b/eos/effects/covertopscloakcpupercentbonus1.py
new file mode 100755
index 000000000..89a6fc2ce
--- /dev/null
+++ b/eos/effects/covertopscloakcpupercentbonus1.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ships from group: Covert Ops (4 of 4)
+type = "passive"
+runTime = "early"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Covert Ops").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Cloaking Device",
+ "cpu", ship.getModifiedItemAttr("eliteBonusCoverOps1") * level)
diff --git a/eos/effects/covertopscpubonus1.py b/eos/effects/covertopscpubonus1.py
new file mode 100755
index 000000000..1be6060a0
--- /dev/null
+++ b/eos/effects/covertopscpubonus1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ships from group: Stealth Bomber (4 of 4)
+# Subsystems named like: Offensive Covert Reconfiguration (4 of 4)
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Cloaking Device",
+ "cpu", container.getModifiedItemAttr("cloakingCpuNeedBonus"))
diff --git a/eos/effects/covertopsstealthbombersiegemissilelauncerpowerneedbonus.py b/eos/effects/covertopsstealthbombersiegemissilelauncerpowerneedbonus.py
new file mode 100755
index 000000000..8d90c22ef
--- /dev/null
+++ b/eos/effects/covertopsstealthbombersiegemissilelauncerpowerneedbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ships from group: Stealth Bomber (4 of 4)
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Missile Launcher Torpedo",
+ "power", ship.getModifiedItemAttr("stealthBomberLauncherPower"))
diff --git a/eos/effects/covertopsstealthbombertargettingdelaybonus.py b/eos/effects/covertopsstealthbombertargettingdelaybonus.py
new file mode 100755
index 000000000..cdc678887
--- /dev/null
+++ b/eos/effects/covertopsstealthbombertargettingdelaybonus.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ships from group: Black Ops (4 of 4)
+# Ships from group: Stealth Bomber (4 of 4)
+# Ship: Etana
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemForce(lambda mod: mod.item.group.name == "Cloaking Device",
+ "cloakingTargetingDelay", ship.getModifiedItemAttr("covertOpsStealthBomberTargettingDelay"))
diff --git a/eos/effects/cpumultiplierpostmulcpuoutputship.py b/eos/effects/cpumultiplierpostmulcpuoutputship.py
new file mode 100755
index 000000000..bfad0d9fa
--- /dev/null
+++ b/eos/effects/cpumultiplierpostmulcpuoutputship.py
@@ -0,0 +1,5 @@
+# Used by:
+# Modules from group: CPU Enhancer (27 of 27)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.multiplyItemAttr("cpuOutput", module.getModifiedItemAttr("cpuMultiplier"))
\ No newline at end of file
diff --git a/eos/effects/cpuneedbonuseffecthybrid.py b/eos/effects/cpuneedbonuseffecthybrid.py
new file mode 100755
index 000000000..4df8eb71e
--- /dev/null
+++ b/eos/effects/cpuneedbonuseffecthybrid.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules named like: Algid Hybrid Administrations Unit (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Hybrid Weapon",
+ "cpu", module.getModifiedItemAttr("cpuNeedBonus"))
\ No newline at end of file
diff --git a/eos/effects/cpuneedbonuseffectlasers.py b/eos/effects/cpuneedbonuseffectlasers.py
new file mode 100755
index 000000000..4220f70aa
--- /dev/null
+++ b/eos/effects/cpuneedbonuseffectlasers.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules named like: Algid Energy Administrations Unit (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Weapon",
+ "cpu", module.getModifiedItemAttr("cpuNeedBonus"))
\ No newline at end of file
diff --git a/eos/effects/cpuoutputaddcpuoutputpassive.py b/eos/effects/cpuoutputaddcpuoutputpassive.py
new file mode 100755
index 000000000..071551521
--- /dev/null
+++ b/eos/effects/cpuoutputaddcpuoutputpassive.py
@@ -0,0 +1,5 @@
+# Used by:
+# Items from category: Subsystem (40 of 80)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.increaseItemAttr("cpuOutput", module.getModifiedItemAttr("cpuOutput"))
diff --git a/eos/effects/cynosuraldurationbonus.py b/eos/effects/cynosuraldurationbonus.py
new file mode 100755
index 000000000..597c34daa
--- /dev/null
+++ b/eos/effects/cynosuraldurationbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ships from group: Force Recon Ship (4 of 4)
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Cynosural Field",
+ "duration", ship.getModifiedItemAttr("durationBonus"))
diff --git a/eos/effects/cynosuralgeneration.py b/eos/effects/cynosuralgeneration.py
new file mode 100755
index 000000000..66c653347
--- /dev/null
+++ b/eos/effects/cynosuralgeneration.py
@@ -0,0 +1,5 @@
+# Used by:
+# Modules from group: Cynosural Field (2 of 2)
+type = "active"
+def handler(fit, module, context):
+ fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("speedFactor"))
diff --git a/eos/effects/cynosuraltheoryconsumptionbonus.py b/eos/effects/cynosuraltheoryconsumptionbonus.py
new file mode 100755
index 000000000..fd2c83f1c
--- /dev/null
+++ b/eos/effects/cynosuraltheoryconsumptionbonus.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ships from group: Force Recon Ship (4 of 4)
+# Skill: Cynosural Field Theory
+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 == "Cynosural Field",
+ "consumptionQuantity", container.getModifiedItemAttr("consumptionQuantityBonusPercentage") * level)
diff --git a/eos/effects/damagecontrol.py b/eos/effects/damagecontrol.py
new file mode 100755
index 000000000..ab02b6e80
--- /dev/null
+++ b/eos/effects/damagecontrol.py
@@ -0,0 +1,11 @@
+# Used by:
+# Modules from group: Damage Control (14 of 14)
+type = "active"
+def handler(fit, module, context):
+ for layer, attrPrefix in (('shield', 'shield'), ('armor', 'armor'), ('hull', '')):
+ for damageType in ('Kinetic', 'Thermal', 'Explosive', 'Em'):
+ bonus = "%s%sDamageResonance" % (attrPrefix, damageType)
+ bonus = "%s%s" % (bonus[0].lower(), bonus[1:])
+ booster = "%s%sDamageResonance" % (layer, damageType)
+ fit.ship.multiplyItemAttr(bonus, module.getModifiedItemAttr(booster),
+ stackingPenalties=True, penaltyGroup="preMul")
diff --git a/eos/effects/dataminermoduledurationreduction.py b/eos/effects/dataminermoduledurationreduction.py
new file mode 100755
index 000000000..d87c2045e
--- /dev/null
+++ b/eos/effects/dataminermoduledurationreduction.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implant: Poteque 'Prospector' Environmental Analysis EY-1005
+type = "passive"
+def handler(fit, implant, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Data Miners",
+ "duration", implant.getModifiedItemAttr("durationBonus"))
\ No newline at end of file
diff --git a/eos/effects/dataminingskillboostaccessdifficultybonusabsolutepercent.py b/eos/effects/dataminingskillboostaccessdifficultybonusabsolutepercent.py
new file mode 100755
index 000000000..f96f8166a
--- /dev/null
+++ b/eos/effects/dataminingskillboostaccessdifficultybonusabsolutepercent.py
@@ -0,0 +1,8 @@
+# Used by:
+# Skill: Archaeology
+# Skill: Hacking
+# Skill: Salvaging
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill(skill), "accessDifficultyBonus",
+ skill.getModifiedItemAttr("accessDifficultyBonusAbsolutePercent") * skill.level)
diff --git a/eos/effects/decreasetargetspeed.py b/eos/effects/decreasetargetspeed.py
new file mode 100755
index 000000000..06dc45d32
--- /dev/null
+++ b/eos/effects/decreasetargetspeed.py
@@ -0,0 +1,9 @@
+# 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:
+ return
+ fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("speedFactor"),
+ stackingPenalties = True)
diff --git a/eos/effects/drawbackarmorhp.py b/eos/effects/drawbackarmorhp.py
new file mode 100755
index 000000000..8be21214a
--- /dev/null
+++ b/eos/effects/drawbackarmorhp.py
@@ -0,0 +1,5 @@
+# Used by:
+# Modules from group: Rig Astronautic (64 of 64)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.boostItemAttr("armorHP", module.getModifiedItemAttr("drawback"))
\ No newline at end of file
diff --git a/eos/effects/drawbackcapreppgneed.py b/eos/effects/drawbackcapreppgneed.py
new file mode 100644
index 000000000..88d0cf3e8
--- /dev/null
+++ b/eos/effects/drawbackcapreppgneed.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of module: Capital Auxiliary Nano Pump I (2 of 2)
+# Variations of module: Capital Nanobot Accelerator I (2 of 2)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Repair Systems"),
+ "power", module.getModifiedItemAttr("drawback"))
diff --git a/eos/effects/drawbackcpuneedlaunchers.py b/eos/effects/drawbackcpuneedlaunchers.py
new file mode 100755
index 000000000..24957627d
--- /dev/null
+++ b/eos/effects/drawbackcpuneedlaunchers.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules from group: Rig Launcher (48 of 48)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Missile Launcher Operation"),
+ "cpu", module.getModifiedItemAttr("drawback"))
diff --git a/eos/effects/drawbackcpuoutput.py b/eos/effects/drawbackcpuoutput.py
new file mode 100755
index 000000000..230dfb827
--- /dev/null
+++ b/eos/effects/drawbackcpuoutput.py
@@ -0,0 +1,5 @@
+# Used by:
+# Modules from group: Rig Drones (64 of 64)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.boostItemAttr("cpuOutput", module.getModifiedItemAttr("drawback"))
\ No newline at end of file
diff --git a/eos/effects/drawbackmaxvelocity.py b/eos/effects/drawbackmaxvelocity.py
new file mode 100755
index 000000000..962e9ed5f
--- /dev/null
+++ b/eos/effects/drawbackmaxvelocity.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules from group: Rig Armor (56 of 72)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("drawback"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/drawbackpowerneedhybrids.py b/eos/effects/drawbackpowerneedhybrids.py
new file mode 100755
index 000000000..ca6edf10e
--- /dev/null
+++ b/eos/effects/drawbackpowerneedhybrids.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules from group: Rig Hybrid Weapon (56 of 56)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Hybrid Weapon",
+ "power", module.getModifiedItemAttr("drawback"))
\ No newline at end of file
diff --git a/eos/effects/drawbackpowerneedlasers.py b/eos/effects/drawbackpowerneedlasers.py
new file mode 100755
index 000000000..6ed7ce056
--- /dev/null
+++ b/eos/effects/drawbackpowerneedlasers.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules from group: Rig Energy Weapon (56 of 56)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Weapon",
+ "power", module.getModifiedItemAttr("drawback"))
\ No newline at end of file
diff --git a/eos/effects/drawbackpowerneedprojectiles.py b/eos/effects/drawbackpowerneedprojectiles.py
new file mode 100755
index 000000000..46d2334fd
--- /dev/null
+++ b/eos/effects/drawbackpowerneedprojectiles.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules from group: Rig Projectile Weapon (40 of 40)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Projectile Weapon",
+ "power", module.getModifiedItemAttr("drawback"))
\ No newline at end of file
diff --git a/eos/effects/drawbackrepairsystemspgneed.py b/eos/effects/drawbackrepairsystemspgneed.py
new file mode 100755
index 000000000..828e8426a
--- /dev/null
+++ b/eos/effects/drawbackrepairsystemspgneed.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules named like: Auxiliary Nano Pump (6 of 8)
+# Modules named like: Nanobot Accelerator (6 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Repair Systems"),
+ "power", module.getModifiedItemAttr("drawback"))
\ No newline at end of file
diff --git a/eos/effects/drawbackshieldcapacity.py b/eos/effects/drawbackshieldcapacity.py
new file mode 100755
index 000000000..d5a23d21c
--- /dev/null
+++ b/eos/effects/drawbackshieldcapacity.py
@@ -0,0 +1,5 @@
+# Used by:
+# Modules from group: Rig Electronics Superiority (64 of 64)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.boostItemAttr("shieldCapacity", module.getModifiedItemAttr("drawback"))
diff --git a/eos/effects/drawbacksigrad.py b/eos/effects/drawbacksigrad.py
new file mode 100755
index 000000000..dad74b90e
--- /dev/null
+++ b/eos/effects/drawbacksigrad.py
@@ -0,0 +1,5 @@
+# Used by:
+# Modules from group: Rig Shield (72 of 72)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.boostItemAttr("signatureRadius", module.getModifiedItemAttr("drawback"), stackingPenalties = True)
diff --git a/eos/effects/dreadnoughtmd1projdmgbonus.py b/eos/effects/dreadnoughtmd1projdmgbonus.py
new file mode 100755
index 000000000..6055be9e8
--- /dev/null
+++ b/eos/effects/dreadnoughtmd1projdmgbonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Naglfar
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Dreadnought").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Projectile Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("dreadnoughtShipBonusM1") * level)
diff --git a/eos/effects/dreadnoughtmd3projrofbonus.py b/eos/effects/dreadnoughtmd3projrofbonus.py
new file mode 100755
index 000000000..3e0bcd2bb
--- /dev/null
+++ b/eos/effects/dreadnoughtmd3projrofbonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Naglfar
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Dreadnought").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Projectile Turret"),
+ "speed", ship.getModifiedItemAttr("dreadnoughtShipBonusM3") * level)
diff --git a/eos/effects/dreadnoughtshipbonushybriddmgg1.py b/eos/effects/dreadnoughtshipbonushybriddmgg1.py
new file mode 100755
index 000000000..1c93fd558
--- /dev/null
+++ b/eos/effects/dreadnoughtshipbonushybriddmgg1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Moros
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Dreadnought").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Hybrid Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("dreadnoughtShipBonusG1") * level)
diff --git a/eos/effects/dreadnoughtshipbonushybridrofg2.py b/eos/effects/dreadnoughtshipbonushybridrofg2.py
new file mode 100755
index 000000000..a4792adae
--- /dev/null
+++ b/eos/effects/dreadnoughtshipbonushybridrofg2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Moros
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Dreadnought").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Hybrid Turret"),
+ "speed", ship.getModifiedItemAttr("dreadnoughtShipBonusG2") * level)
diff --git a/eos/effects/dreadnoughtshipbonuslasercapneeda1.py b/eos/effects/dreadnoughtshipbonuslasercapneeda1.py
new file mode 100755
index 000000000..e520aad11
--- /dev/null
+++ b/eos/effects/dreadnoughtshipbonuslasercapneeda1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Revelation
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Dreadnought").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Energy Turret"),
+ "capacitorNeed", ship.getModifiedItemAttr("dreadnoughtShipBonusA1") * level)
diff --git a/eos/effects/dreadnoughtshipbonuslaserrofa2.py b/eos/effects/dreadnoughtshipbonuslaserrofa2.py
new file mode 100755
index 000000000..80c5214a9
--- /dev/null
+++ b/eos/effects/dreadnoughtshipbonuslaserrofa2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Revelation
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Dreadnought").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Energy Turret"),
+ "speed", ship.getModifiedItemAttr("dreadnoughtShipBonusA2") * level)
diff --git a/eos/effects/dreadnoughtshipbonuslauncherrofc1.py b/eos/effects/dreadnoughtshipbonuslauncherrofc1.py
new file mode 100755
index 000000000..f7189b76e
--- /dev/null
+++ b/eos/effects/dreadnoughtshipbonuslauncherrofc1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Phoenix
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Dreadnought").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Citadel",
+ "speed", ship.getModifiedItemAttr("dreadnoughtShipBonusC1") * level)
diff --git a/eos/effects/dreadnoughtshipbonusmissilekineticdmgc2.py b/eos/effects/dreadnoughtshipbonusmissilekineticdmgc2.py
new file mode 100755
index 000000000..f6ff28bd4
--- /dev/null
+++ b/eos/effects/dreadnoughtshipbonusmissilekineticdmgc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Phoenix
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Dreadnought").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Torpedoes"),
+ "kineticDamage", ship.getModifiedItemAttr("dreadnoughtShipBonusC2") * level)
diff --git a/eos/effects/dreadnoughtshipbonusmissilekineticdmgc3.py b/eos/effects/dreadnoughtshipbonusmissilekineticdmgc3.py
new file mode 100755
index 000000000..53c7ab339
--- /dev/null
+++ b/eos/effects/dreadnoughtshipbonusmissilekineticdmgc3.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Phoenix
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Dreadnought").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Cruise Missiles"),
+ "kineticDamage", ship.getModifiedItemAttr("dreadnoughtShipBonusC3") * level)
diff --git a/eos/effects/dronearmordamagebonuseffect.py b/eos/effects/dronearmordamagebonuseffect.py
new file mode 100755
index 000000000..57ddea536
--- /dev/null
+++ b/eos/effects/dronearmordamagebonuseffect.py
@@ -0,0 +1,11 @@
+# Used by:
+# Ship: Exequror
+# Ship: Guardian
+# Ship: Oneiros
+# Ship: Scythe
+type = "passive"
+def handler(fit, ship, context):
+ # This is actually level-less bonus, anyway you have to train cruisers 5
+ # and will get 100% (20%/lvl as stated by description)
+ fit.drones.filteredItemBoost(lambda drone: drone.item.group.name == "Logistic Drone",
+ "armorDamageAmount", ship.getModifiedItemAttr("droneArmorDamageAmountBonus"))
diff --git a/eos/effects/dronebandwidthaddpassive.py b/eos/effects/dronebandwidthaddpassive.py
new file mode 100755
index 000000000..44836fefe
--- /dev/null
+++ b/eos/effects/dronebandwidthaddpassive.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystems from group: Engineering Systems (13 of 16)
+# Subsystems from group: Offensive Systems (16 of 16)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.increaseItemAttr("droneBandwidth", module.getModifiedItemAttr("droneBandwidth"))
diff --git a/eos/effects/dronecapacityadddronecapacitypassive.py b/eos/effects/dronecapacityadddronecapacitypassive.py
new file mode 100755
index 000000000..43d89fc33
--- /dev/null
+++ b/eos/effects/dronecapacityadddronecapacitypassive.py
@@ -0,0 +1,5 @@
+# Used by:
+# Items from category: Subsystem (42 of 80)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.increaseItemAttr("droneCapacity", module.getModifiedItemAttr("droneCapacity"))
diff --git a/eos/effects/dronedamagebonusonline.py b/eos/effects/dronedamagebonusonline.py
new file mode 100755
index 000000000..c257366ae
--- /dev/null
+++ b/eos/effects/dronedamagebonusonline.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules from group: Drone Damage Modules (6 of 6)
+type = "passive"
+def handler(fit, module, context):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "damageMultiplier", module.getModifiedItemAttr("droneDamageBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/dronedamagebonusrequringdrones.py b/eos/effects/dronedamagebonusrequringdrones.py
new file mode 100755
index 000000000..1bdc2759b
--- /dev/null
+++ b/eos/effects/dronedamagebonusrequringdrones.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Drone Interfacing
+type = "passive"
+def handler(fit, skill, context):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
diff --git a/eos/effects/dronedmgbonus.py b/eos/effects/dronedmgbonus.py
new file mode 100755
index 000000000..7e85625de
--- /dev/null
+++ b/eos/effects/dronedmgbonus.py
@@ -0,0 +1,8 @@
+# Used by:
+# Skills named like: Drone Specialization (4 of 4)
+# Skill: Heavy Drone Operation
+# Skill: Sentry Drone Interfacing
+type = "passive"
+def handler(fit, skill, context):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill(skill),
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
diff --git a/eos/effects/dronedmgbonusrequiringscoutdroneop.py b/eos/effects/dronedmgbonusrequiringscoutdroneop.py
new file mode 100755
index 000000000..701340ec8
--- /dev/null
+++ b/eos/effects/dronedmgbonusrequiringscoutdroneop.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Combat Drone Operation
+type = "passive"
+def handler(fit, skill, context):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Scout Drone Operation"),
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
diff --git a/eos/effects/dronedurabilityarmorhpbonus.py b/eos/effects/dronedurabilityarmorhpbonus.py
new file mode 100755
index 000000000..39bb7802a
--- /dev/null
+++ b/eos/effects/dronedurabilityarmorhpbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules named like: Drone Durability Enhancer (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "armorHP", module.getModifiedItemAttr("hullHpBonus"))
diff --git a/eos/effects/dronedurabilityarmorhpbonus2.py b/eos/effects/dronedurabilityarmorhpbonus2.py
new file mode 100755
index 000000000..609b19ba3
--- /dev/null
+++ b/eos/effects/dronedurabilityarmorhpbonus2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Drone Durability
+type = "passive"
+def handler(fit, skill, context):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "armorHP", skill.getModifiedItemAttr("armorHpBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/dronedurabilityhpbonus.py b/eos/effects/dronedurabilityhpbonus.py
new file mode 100755
index 000000000..3cff6fc2a
--- /dev/null
+++ b/eos/effects/dronedurabilityhpbonus.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules named like: Drone Durability Enhancer (8 of 8)
+# Skill: Drone Durability
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "hp", container.getModifiedItemAttr("hullHpBonus") * level)
diff --git a/eos/effects/dronedurabilityshieldcapbonus.py b/eos/effects/dronedurabilityshieldcapbonus.py
new file mode 100755
index 000000000..dc586ad02
--- /dev/null
+++ b/eos/effects/dronedurabilityshieldcapbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules named like: Drone Durability Enhancer (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "shieldCapacity", module.getModifiedItemAttr("hullHpBonus"))
diff --git a/eos/effects/dronedurabilityshieldcapbonus2.py b/eos/effects/dronedurabilityshieldcapbonus2.py
new file mode 100755
index 000000000..0bfffa159
--- /dev/null
+++ b/eos/effects/dronedurabilityshieldcapbonus2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Drone Durability
+type = "passive"
+def handler(fit, skill, context):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "shieldCapacity", skill.getModifiedItemAttr("shieldCapacityBonus") * skill.level)
diff --git a/eos/effects/dronemaxrangebonus.py b/eos/effects/dronemaxrangebonus.py
new file mode 100755
index 000000000..321975046
--- /dev/null
+++ b/eos/effects/dronemaxrangebonus.py
@@ -0,0 +1,11 @@
+# Used by:
+# Modules named like: Drone Scope Chip (8 of 8)
+# Skill: Drone Sharpshooting
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ stacking = False if "skill" in context else True
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "maxRange",
+ container.getModifiedItemAttr("rangeSkillBonus") * level,
+ stackingPenalties = stacking)
diff --git a/eos/effects/dronemaxvelocitybonus.py b/eos/effects/dronemaxvelocitybonus.py
new file mode 100755
index 000000000..e92b0dc3c
--- /dev/null
+++ b/eos/effects/dronemaxvelocitybonus.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules named like: Drone Speed Augmentor (8 of 8)
+# Skill: Drone Navigation
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "maxVelocity", container.getModifiedItemAttr("droneMaxVelocityBonus") * level)
diff --git a/eos/effects/dronemwdboostonline.py b/eos/effects/dronemwdboostonline.py
new file mode 100755
index 000000000..ad6ae178e
--- /dev/null
+++ b/eos/effects/dronemwdboostonline.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules from group: Drone Navigation Computer (6 of 6)
+type = "passive"
+def handler(fit, module, context):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"), "maxVelocity",
+ module.getModifiedItemAttr("speedBoostFactor"), stackingPenalties = True)
diff --git a/eos/effects/dronerangebonusadd.py b/eos/effects/dronerangebonusadd.py
new file mode 100755
index 000000000..21f8ad6c2
--- /dev/null
+++ b/eos/effects/dronerangebonusadd.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules from group: Drone Control Range Module (7 of 7)
+type = "passive"
+def handler(fit, module, context):
+ amount = module.getModifiedItemAttr("droneRangeBonus")
+ fit.extraAttributes.increase("droneControlRange", amount)
diff --git a/eos/effects/dronerigstasiswebspeedfactorbonus.py b/eos/effects/dronerigstasiswebspeedfactorbonus.py
new file mode 100755
index 000000000..83fe8eaf7
--- /dev/null
+++ b/eos/effects/dronerigstasiswebspeedfactorbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules named like: Stasis Drone Augmentor (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.group.name == "Stasis Webifying Drone",
+ "speedFactor", module.getModifiedItemAttr("webSpeedFactorBonus"))
\ No newline at end of file
diff --git a/eos/effects/dronesalvagebonus.py b/eos/effects/dronesalvagebonus.py
new file mode 100755
index 000000000..6c44dd34e
--- /dev/null
+++ b/eos/effects/dronesalvagebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Salvage Drone Operation
+type = "passive"
+def handler(fit, container, context):
+ fit.drones.filteredItemIncrease(lambda drone: drone.item.requiresSkill("Salvage Drone Operation"),
+ "accessDifficultyBonus", container.getModifiedItemAttr("accessDifficultyBonus") * container.level)
diff --git a/eos/effects/droneshieldbonusbonuseffect.py b/eos/effects/droneshieldbonusbonuseffect.py
new file mode 100755
index 000000000..d1c6e3a70
--- /dev/null
+++ b/eos/effects/droneshieldbonusbonuseffect.py
@@ -0,0 +1,10 @@
+# Used by:
+# Ships from group: Logistics (3 of 5)
+# Ship: Exequror
+# Ship: Scythe
+type = "passive"
+def handler(fit, ship, context):
+ # This is actually level-less bonus, anyway you have to train cruisers 5
+ # and will get 100% (20%/lvl as stated by description)
+ fit.drones.filteredItemBoost(lambda drone: drone.item.group.name == "Logistic Drone",
+ "shieldBonus", ship.getModifiedItemAttr("droneShieldBonusBonus"))
diff --git a/eos/effects/dronesmaxactivedronebonusmodaddmaxactiveactive.py b/eos/effects/dronesmaxactivedronebonusmodaddmaxactiveactive.py
new file mode 100755
index 000000000..8a6415412
--- /dev/null
+++ b/eos/effects/dronesmaxactivedronebonusmodaddmaxactiveactive.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules from group: Drone Control Unit (5 of 5)
+type = "active"
+def handler(fit, module, context):
+ amount = module.getModifiedItemAttr("maxActiveDroneBonus")
+ fit.extraAttributes.increase("maxActiveDrones", amount)
diff --git a/eos/effects/dronesskillboostmaxactivedronebonus.py b/eos/effects/dronesskillboostmaxactivedronebonus.py
new file mode 100755
index 000000000..4e0c9402d
--- /dev/null
+++ b/eos/effects/dronesskillboostmaxactivedronebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Drones
+type = "passive"
+def handler(fit, skill, context):
+ amount = skill.getModifiedItemAttr("maxActiveDroneBonus") * skill.level
+ fit.extraAttributes.increase("maxActiveDrones", amount)
diff --git a/eos/effects/dronetrackingcomputermultiply.py b/eos/effects/dronetrackingcomputermultiply.py
new file mode 100755
index 000000000..42d759a1a
--- /dev/null
+++ b/eos/effects/dronetrackingcomputermultiply.py
@@ -0,0 +1,10 @@
+# Used by:
+# Modules from group: Drone Tracking Modules (7 of 7)
+type = "passive"
+def handler(fit, module, context):
+ fit.drones.filteredItemMultiply(lambda drone: drone.item.requiresSkill("Drones"),
+ "trackingSpeed", module.getModifiedItemAttr("trackingSpeedMultiplier"),
+ stackingPenalties = True, penaltyGroup="postMul")
+ fit.drones.filteredItemMultiply(lambda drone: drone.item.requiresSkill("Drones"),
+ "maxRange", module.getModifiedItemAttr("maxRangeMultiplier"),
+ stackingPenalties = True, penaltyGroup="postMul")
diff --git a/eos/effects/durationbonusforgroupafterburner.py b/eos/effects/durationbonusforgroupafterburner.py
new file mode 100755
index 000000000..096700c1d
--- /dev/null
+++ b/eos/effects/durationbonusforgroupafterburner.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules named like: Engine Thermal Shielding (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Propulsion Module",
+ "duration", module.getModifiedItemAttr("durationBonus"))
diff --git a/eos/effects/ecmburst.py b/eos/effects/ecmburst.py
new file mode 100755
index 000000000..b6e63cf00
--- /dev/null
+++ b/eos/effects/ecmburst.py
@@ -0,0 +1,5 @@
+# Used by:
+# Modules from group: ECM Burst (7 of 7)
+type = "active"
+def handler(fit, module, context):
+ pass
\ No newline at end of file
diff --git a/eos/effects/ecmgravimetricstrengthbonuspercent.py b/eos/effects/ecmgravimetricstrengthbonuspercent.py
new file mode 100755
index 000000000..31b5df5df
--- /dev/null
+++ b/eos/effects/ecmgravimetricstrengthbonuspercent.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules from group: ECM Stabilizer (6 of 6)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
+ "scanGravimetricStrengthBonus", module.getModifiedItemAttr("ecmStrengthBonusPercent"),
+ stackingPenalties = True)
diff --git a/eos/effects/ecmladarstrengthbonuspercent.py b/eos/effects/ecmladarstrengthbonuspercent.py
new file mode 100755
index 000000000..093ffd427
--- /dev/null
+++ b/eos/effects/ecmladarstrengthbonuspercent.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules from group: ECM Stabilizer (6 of 6)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
+ "scanLadarStrengthBonus", module.getModifiedItemAttr("ecmStrengthBonusPercent"),
+ stackingPenalties = True)
diff --git a/eos/effects/ecmmagnetometricstrengthbonuspercent.py b/eos/effects/ecmmagnetometricstrengthbonuspercent.py
new file mode 100755
index 000000000..052530a92
--- /dev/null
+++ b/eos/effects/ecmmagnetometricstrengthbonuspercent.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules from group: ECM Stabilizer (6 of 6)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
+ "scanMagnetometricStrengthBonus", module.getModifiedItemAttr("ecmStrengthBonusPercent"),
+ stackingPenalties = True)
diff --git a/eos/effects/ecmradarstrengthbonuspercent.py b/eos/effects/ecmradarstrengthbonuspercent.py
new file mode 100755
index 000000000..154b09493
--- /dev/null
+++ b/eos/effects/ecmradarstrengthbonuspercent.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules from group: ECM Stabilizer (6 of 6)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
+ "scanRadarStrengthBonus", module.getModifiedItemAttr("ecmStrengthBonusPercent"),
+ stackingPenalties = True)
diff --git a/eos/effects/ecmrangebonusmoduleeffect.py b/eos/effects/ecmrangebonusmoduleeffect.py
new file mode 100755
index 000000000..ee9af9254
--- /dev/null
+++ b/eos/effects/ecmrangebonusmoduleeffect.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules from group: ECM Stabilizer (6 of 6)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
+ "maxRange", module.getModifiedItemAttr("ecmRangeBonus"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/electronicattributemodifyonline.py b/eos/effects/electronicattributemodifyonline.py
new file mode 100755
index 000000000..0262283b7
--- /dev/null
+++ b/eos/effects/electronicattributemodifyonline.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules from group: Automated Targeting System (6 of 6)
+# Module: QA Damage Module
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.increaseItemAttr("maxLockedTargets", module.getModifiedItemAttr("maxLockedTargetsBonus"))
diff --git a/eos/effects/electronicscpuoutputbonuspostpercentcpuoutputlocationshipgroupcomputer.py b/eos/effects/electronicscpuoutputbonuspostpercentcpuoutputlocationshipgroupcomputer.py
new file mode 100755
index 000000000..7a31228b9
--- /dev/null
+++ b/eos/effects/electronicscpuoutputbonuspostpercentcpuoutputlocationshipgroupcomputer.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implants named like: Zainou 'Gypsy' Electronics EE (6 of 6)
+# Modules named like: Processor Overclocking Unit (8 of 8)
+# Implant: Genolution Core Augmentation CA-2
+# Skill: Electronics
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.ship.boostItemAttr("cpuOutput", container.getModifiedItemAttr("cpuOutputBonus2") * level)
diff --git a/eos/effects/elitebargebonusiceharvestingcycletimebarge3.py b/eos/effects/elitebargebonusiceharvestingcycletimebarge3.py
new file mode 100755
index 000000000..2442c051d
--- /dev/null
+++ b/eos/effects/elitebargebonusiceharvestingcycletimebarge3.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ships from group: Exhumer (3 of 3)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Exhumers").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Ice Harvesting"),
+ "duration", ship.getModifiedItemAttr("eliteBonusBarge2") * level)
diff --git a/eos/effects/elitebonusassaultshiplightmissilerof.py b/eos/effects/elitebonusassaultshiplightmissilerof.py
new file mode 100644
index 000000000..8f27cd142
--- /dev/null
+++ b/eos/effects/elitebonusassaultshiplightmissilerof.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Cambion
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Assault Frigates").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Light",
+ "speed", ship.getModifiedItemAttr("eliteBonusGunship1") * level)
diff --git a/eos/effects/elitebonusassaultshipmissilevelocity1.py b/eos/effects/elitebonusassaultshipmissilevelocity1.py
new file mode 100755
index 000000000..ab26bc0a3
--- /dev/null
+++ b/eos/effects/elitebonusassaultshipmissilevelocity1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Hawk
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Assault Frigates").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "maxVelocity", ship.getModifiedItemAttr("eliteBonusGunship1") * level)
\ No newline at end of file
diff --git a/eos/effects/elitebonusassaultshiprocketrof.py b/eos/effects/elitebonusassaultshiprocketrof.py
new file mode 100644
index 000000000..daa5e1ae6
--- /dev/null
+++ b/eos/effects/elitebonusassaultshiprocketrof.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Cambion
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Assault Frigates").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Rocket",
+ "speed", ship.getModifiedItemAttr("eliteBonusGunship1") * level)
diff --git a/eos/effects/elitebonusbargeminingyield.py b/eos/effects/elitebonusbargeminingyield.py
new file mode 100755
index 000000000..4f35203a4
--- /dev/null
+++ b/eos/effects/elitebonusbargeminingyield.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ships from group: Exhumer (3 of 3)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Exhumers").level
+ groups = ("Strip Miner", "Frequency Mining Laser")
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
+ "miningAmount", ship.getModifiedItemAttr("eliteBonusBarge1") * level)
diff --git a/eos/effects/elitebonusblackopsagiliy1.py b/eos/effects/elitebonusblackopsagiliy1.py
new file mode 100755
index 000000000..93853b75b
--- /dev/null
+++ b/eos/effects/elitebonusblackopsagiliy1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Sin
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Black Ops").level
+ fit.ship.boostItemAttr("agility", ship.getModifiedItemAttr("eliteBonusBlackOps1") * level)
\ No newline at end of file
diff --git a/eos/effects/elitebonusblackopscloakvelocity2.py b/eos/effects/elitebonusblackopscloakvelocity2.py
new file mode 100755
index 000000000..cc7a0ed1d
--- /dev/null
+++ b/eos/effects/elitebonusblackopscloakvelocity2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ships from group: Black Ops (4 of 4)
+type = "passive"
+def handler(fit, ship, context):
+ if fit.extraAttributes["cloaked"]:
+ level = fit.character.getSkill("Black Ops").level
+ fit.ship.multiplyItemAttr("maxVelocity", ship.getModifiedItemAttr("eliteBonusBlackOps2") * level)
diff --git a/eos/effects/elitebonusblackopsecmburstgravandladarandmagnetoandradar.py b/eos/effects/elitebonusblackopsecmburstgravandladarandmagnetoandradar.py
new file mode 100755
index 000000000..8896f4cf7
--- /dev/null
+++ b/eos/effects/elitebonusblackopsecmburstgravandladarandmagnetoandradar.py
@@ -0,0 +1,9 @@
+# Used by:
+# Ship: Widow
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Black Ops").level
+ 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),
+ ship.getModifiedItemAttr("eliteBonusBlackOps1") * level)
diff --git a/eos/effects/elitebonusblackopsecmgravandladarandmagnetometricandradarstrength1.py b/eos/effects/elitebonusblackopsecmgravandladarandmagnetometricandradarstrength1.py
new file mode 100755
index 000000000..f4c31ea9a
--- /dev/null
+++ b/eos/effects/elitebonusblackopsecmgravandladarandmagnetometricandradarstrength1.py
@@ -0,0 +1,9 @@
+# Used by:
+# Ship: Widow
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Black Ops").level
+ sensorTypes = ("Gravimetric", "Ladar", "Magnetometric", "Radar")
+ for type in sensorTypes:
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM", "scan{0}StrengthBonus".format(type),
+ ship.getModifiedItemAttr("eliteBonusBlackOps1") * level)
diff --git a/eos/effects/elitebonusblackopslargeenergyturrettracking1.py b/eos/effects/elitebonusblackopslargeenergyturrettracking1.py
new file mode 100755
index 000000000..53a665d41
--- /dev/null
+++ b/eos/effects/elitebonusblackopslargeenergyturrettracking1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Redeemer
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Black Ops").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Energy Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("eliteBonusBlackOps1") * level)
diff --git a/eos/effects/elitebonusblackopsmaxvelocity1.py b/eos/effects/elitebonusblackopsmaxvelocity1.py
new file mode 100755
index 000000000..7af3bc55a
--- /dev/null
+++ b/eos/effects/elitebonusblackopsmaxvelocity1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Panther
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Black Ops").level
+ fit.ship.boostItemAttr("maxVelocity", ship.getModifiedItemAttr("eliteBonusBlackOps1") * level)
\ No newline at end of file
diff --git a/eos/effects/elitebonuscommandshiparmoredcs2.py b/eos/effects/elitebonuscommandshiparmoredcs2.py
new file mode 100755
index 000000000..01de7115e
--- /dev/null
+++ b/eos/effects/elitebonuscommandshiparmoredcs2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Damnation
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Command Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Warfare Specialist"),
+ "commandBonus", ship.getModifiedItemAttr("eliteBonusCommandShips2") * level)
diff --git a/eos/effects/elitebonuscommandshiparmorhp1.py b/eos/effects/elitebonuscommandshiparmorhp1.py
new file mode 100755
index 000000000..37411572f
--- /dev/null
+++ b/eos/effects/elitebonuscommandshiparmorhp1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Damnation
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Command Ships").level
+ fit.ship.boostItemAttr("armorHP", ship.getModifiedItemAttr("eliteBonusCommandShips1") * level)
\ No newline at end of file
diff --git a/eos/effects/elitebonuscommandshiphybriddamagecs1.py b/eos/effects/elitebonuscommandshiphybriddamagecs1.py
new file mode 100755
index 000000000..2ac0ebd06
--- /dev/null
+++ b/eos/effects/elitebonuscommandshiphybriddamagecs1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Astarte
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Command Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("eliteBonusCommandShips1") * level)
diff --git a/eos/effects/elitebonuscommandshiphybridfalloffcs2.py b/eos/effects/elitebonuscommandshiphybridfalloffcs2.py
new file mode 100755
index 000000000..75d416d70
--- /dev/null
+++ b/eos/effects/elitebonuscommandshiphybridfalloffcs2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Astarte
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Command Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
+ "falloff", ship.getModifiedItemAttr("eliteBonusCommandShips2") * level)
diff --git a/eos/effects/elitebonuscommandshiphybridoptimalcs1.py b/eos/effects/elitebonuscommandshiphybridoptimalcs1.py
new file mode 100755
index 000000000..f2008b88f
--- /dev/null
+++ b/eos/effects/elitebonuscommandshiphybridoptimalcs1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Vulture
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Command Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
+ "maxRange", ship.getModifiedItemAttr("eliteBonusCommandShips1") * level)
diff --git a/eos/effects/elitebonuscommandshipinfocs2.py b/eos/effects/elitebonuscommandshipinfocs2.py
new file mode 100755
index 000000000..046cf6024
--- /dev/null
+++ b/eos/effects/elitebonuscommandshipinfocs2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Eos
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Command Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Warfare Specialist"),
+ "commandBonus", ship.getModifiedItemAttr("eliteBonusCommandShips2") * level)
diff --git a/eos/effects/elitebonuscommandshipinfohiddencs2.py b/eos/effects/elitebonuscommandshipinfohiddencs2.py
new file mode 100755
index 000000000..071188eaf
--- /dev/null
+++ b/eos/effects/elitebonuscommandshipinfohiddencs2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Eos
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Command Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Warfare Specialist"),
+ "commandBonusHidden", ship.getModifiedItemAttr("eliteBonusCommandShips2") * level)
diff --git a/eos/effects/elitebonuscommandshiplaserdamagecs1.py b/eos/effects/elitebonuscommandshiplaserdamagecs1.py
new file mode 100755
index 000000000..184ff8842
--- /dev/null
+++ b/eos/effects/elitebonuscommandshiplaserdamagecs1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Absolution
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Command Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Energy Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("eliteBonusCommandShips1") * level)
diff --git a/eos/effects/elitebonuscommandshiplaserrofcs2.py b/eos/effects/elitebonuscommandshiplaserrofcs2.py
new file mode 100755
index 000000000..33fc356c9
--- /dev/null
+++ b/eos/effects/elitebonuscommandshiplaserrofcs2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Absolution
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Command Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Energy Turret"),
+ "speed", ship.getModifiedItemAttr("eliteBonusCommandShips2") * level)
diff --git a/eos/effects/elitebonuscommandshipmissilekineticdamagecs1.py b/eos/effects/elitebonuscommandshipmissilekineticdamagecs1.py
new file mode 100755
index 000000000..c97eec1ef
--- /dev/null
+++ b/eos/effects/elitebonuscommandshipmissilekineticdamagecs1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Nighthawk
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Command Ships").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "kineticDamage", ship.getModifiedItemAttr("eliteBonusCommandShips1") * level)
diff --git a/eos/effects/elitebonuscommandshipprojectiledamagecs1.py b/eos/effects/elitebonuscommandshipprojectiledamagecs1.py
new file mode 100755
index 000000000..1ed15febf
--- /dev/null
+++ b/eos/effects/elitebonuscommandshipprojectiledamagecs1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Sleipnir
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Command Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("eliteBonusCommandShips1") * level)
diff --git a/eos/effects/elitebonuscommandshipprojectilefalloffcs2.py b/eos/effects/elitebonuscommandshipprojectilefalloffcs2.py
new file mode 100755
index 000000000..479fd6baf
--- /dev/null
+++ b/eos/effects/elitebonuscommandshipprojectilefalloffcs2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Sleipnir
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Command Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
+ "falloff", ship.getModifiedItemAttr("eliteBonusCommandShips2") * level)
diff --git a/eos/effects/elitebonuscommandshipprojectiletrackingcs1.py b/eos/effects/elitebonuscommandshipprojectiletrackingcs1.py
new file mode 100755
index 000000000..705d8f69e
--- /dev/null
+++ b/eos/effects/elitebonuscommandshipprojectiletrackingcs1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Claymore
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Command Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("eliteBonusCommandShips1") * level)
diff --git a/eos/effects/elitebonuscommandshipsheavymissileexplosionvelocitycs2.py b/eos/effects/elitebonuscommandshipsheavymissileexplosionvelocitycs2.py
new file mode 100755
index 000000000..35aabbcca
--- /dev/null
+++ b/eos/effects/elitebonuscommandshipsheavymissileexplosionvelocitycs2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Nighthawk
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Command Ships").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Missiles"),
+ "aoeVelocity", ship.getModifiedItemAttr("eliteBonusCommandShips2") * level)
diff --git a/eos/effects/elitebonuscommandshipsiegecs2.py b/eos/effects/elitebonuscommandshipsiegecs2.py
new file mode 100755
index 000000000..0bff2972b
--- /dev/null
+++ b/eos/effects/elitebonuscommandshipsiegecs2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Vulture
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Command Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Siege Warfare Specialist"),
+ "commandBonus", ship.getModifiedItemAttr("eliteBonusCommandShips2") * level)
diff --git a/eos/effects/elitebonuscommandshipskirmishcs2.py b/eos/effects/elitebonuscommandshipskirmishcs2.py
new file mode 100755
index 000000000..ae1202117
--- /dev/null
+++ b/eos/effects/elitebonuscommandshipskirmishcs2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Claymore
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Command Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Warfare Specialist"),
+ "commandBonus", ship.getModifiedItemAttr("eliteBonusCommandShips2") * level)
diff --git a/eos/effects/elitebonuscoveropsbombemdmg1.py b/eos/effects/elitebonuscoveropsbombemdmg1.py
new file mode 100755
index 000000000..f0ba72b71
--- /dev/null
+++ b/eos/effects/elitebonuscoveropsbombemdmg1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Purifier
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Covert Ops").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Bomb Deployment"),
+ "emDamage", ship.getModifiedItemAttr("eliteBonusCoverOps1") * level)
diff --git a/eos/effects/elitebonuscoveropsbombexplosivedmg1.py b/eos/effects/elitebonuscoveropsbombexplosivedmg1.py
new file mode 100755
index 000000000..36a07a25c
--- /dev/null
+++ b/eos/effects/elitebonuscoveropsbombexplosivedmg1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Hound
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Covert Ops").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Bomb Deployment"),
+ "explosiveDamage", ship.getModifiedItemAttr("eliteBonusCoverOps1") * level)
diff --git a/eos/effects/elitebonuscoveropsbombkineticdmg1.py b/eos/effects/elitebonuscoveropsbombkineticdmg1.py
new file mode 100755
index 000000000..d0c33a43c
--- /dev/null
+++ b/eos/effects/elitebonuscoveropsbombkineticdmg1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Manticore
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Covert Ops").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Bomb Deployment"),
+ "kineticDamage", ship.getModifiedItemAttr("eliteBonusCoverOps1") * level)
diff --git a/eos/effects/elitebonuscoveropsbombthermaldmg1.py b/eos/effects/elitebonuscoveropsbombthermaldmg1.py
new file mode 100755
index 000000000..3f499d0b9
--- /dev/null
+++ b/eos/effects/elitebonuscoveropsbombthermaldmg1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Nemesis
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Covert Ops").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Bomb Deployment"),
+ "thermalDamage", ship.getModifiedItemAttr("eliteBonusCoverOps1") * level)
diff --git a/eos/effects/elitebonuscoveropsscanprobestrength2.py b/eos/effects/elitebonuscoveropsscanprobestrength2.py
new file mode 100755
index 000000000..368b2b456
--- /dev/null
+++ b/eos/effects/elitebonuscoveropsscanprobestrength2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ships from group: Covert Ops (4 of 4)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Covert Ops").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.group.name == "Scanner Probe",
+ "baseSensorStrength", ship.getModifiedItemAttr("eliteBonusCoverOps2") * level)
diff --git a/eos/effects/elitebonuselectronicattackshipcapacitorcapacity2.py b/eos/effects/elitebonuselectronicattackshipcapacitorcapacity2.py
new file mode 100755
index 000000000..071023533
--- /dev/null
+++ b/eos/effects/elitebonuselectronicattackshipcapacitorcapacity2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Kitsune
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Electronic Attack Ships").level
+ fit.ship.boostItemAttr("capacitorCapacity", ship.getModifiedItemAttr("eliteBonusElectronicAttackShip2") * level)
diff --git a/eos/effects/elitebonuselectronicattackshipecmoptimalrange1.py b/eos/effects/elitebonuselectronicattackshipecmoptimalrange1.py
new file mode 100755
index 000000000..d27b39641
--- /dev/null
+++ b/eos/effects/elitebonuselectronicattackshipecmoptimalrange1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Kitsune
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Electronic Attack Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
+ "maxRange", ship.getModifiedItemAttr("eliteBonusElectronicAttackShip1") * level)
diff --git a/eos/effects/elitebonuselectronicattackshipenergyneutrange1.py b/eos/effects/elitebonuselectronicattackshipenergyneutrange1.py
new file mode 100755
index 000000000..0aa5c02b9
--- /dev/null
+++ b/eos/effects/elitebonuselectronicattackshipenergyneutrange1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Sentinel
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Electronic Attack Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer",
+ "energyDestabilizationRange", ship.getModifiedItemAttr("eliteBonusElectronicAttackShip1") * level)
diff --git a/eos/effects/elitebonuselectronicattackshipenergyvampirerange1.py b/eos/effects/elitebonuselectronicattackshipenergyvampirerange1.py
new file mode 100755
index 000000000..981155517
--- /dev/null
+++ b/eos/effects/elitebonuselectronicattackshipenergyvampirerange1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Sentinel
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Electronic Attack Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire",
+ "powerTransferRange", ship.getModifiedItemAttr("eliteBonusElectronicAttackShip1") * level)
diff --git a/eos/effects/elitebonuselectronicattackshiprechargerate2.py b/eos/effects/elitebonuselectronicattackshiprechargerate2.py
new file mode 100755
index 000000000..a13be267c
--- /dev/null
+++ b/eos/effects/elitebonuselectronicattackshiprechargerate2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Sentinel
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Electronic Attack Ships").level
+ fit.ship.boostItemAttr("rechargeRate", ship.getModifiedItemAttr("eliteBonusElectronicAttackShip2") * level)
diff --git a/eos/effects/elitebonuselectronicattackshipsignatureradius2.py b/eos/effects/elitebonuselectronicattackshipsignatureradius2.py
new file mode 100755
index 000000000..2ac7540b2
--- /dev/null
+++ b/eos/effects/elitebonuselectronicattackshipsignatureradius2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Hyena
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Electronic Attack Ships").level
+ fit.ship.boostItemAttr("signatureRadius", ship.getModifiedItemAttr("eliteBonusElectronicAttackShip2") * level)
diff --git a/eos/effects/elitebonuselectronicattackshipstasiswebmaxrange1.py b/eos/effects/elitebonuselectronicattackshipstasiswebmaxrange1.py
new file mode 100755
index 000000000..30a56a339
--- /dev/null
+++ b/eos/effects/elitebonuselectronicattackshipstasiswebmaxrange1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Hyena
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Electronic Attack Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Stasis Web",
+ "maxRange", ship.getModifiedItemAttr("eliteBonusElectronicAttackShip1") * level)
diff --git a/eos/effects/elitebonuselectronicattackshipwarpscramblercapneed2.py b/eos/effects/elitebonuselectronicattackshipwarpscramblercapneed2.py
new file mode 100755
index 000000000..b0944c46f
--- /dev/null
+++ b/eos/effects/elitebonuselectronicattackshipwarpscramblercapneed2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Keres
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Electronic Attack Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Warp Scrambler",
+ "capacitorNeed", ship.getModifiedItemAttr("eliteBonusElectronicAttackShip2") * level)
\ No newline at end of file
diff --git a/eos/effects/elitebonuselectronicattackshipwarpscramblermaxrange1.py b/eos/effects/elitebonuselectronicattackshipwarpscramblermaxrange1.py
new file mode 100755
index 000000000..9e902e29b
--- /dev/null
+++ b/eos/effects/elitebonuselectronicattackshipwarpscramblermaxrange1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Keres
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Electronic Attack Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Warp Scrambler",
+ "maxRange", ship.getModifiedItemAttr("eliteBonusElectronicAttackShip1") * level)
diff --git a/eos/effects/elitebonusgunshiparmoremresistance1.py b/eos/effects/elitebonusgunshiparmoremresistance1.py
new file mode 100755
index 000000000..7f15a128a
--- /dev/null
+++ b/eos/effects/elitebonusgunshiparmoremresistance1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Vengeance
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Assault Frigates").level
+ fit.ship.boostItemAttr("armorEmDamageResonance", ship.getModifiedItemAttr("eliteBonusGunship1") * level)
\ No newline at end of file
diff --git a/eos/effects/elitebonusgunshiparmorexplosiveresistance1.py b/eos/effects/elitebonusgunshiparmorexplosiveresistance1.py
new file mode 100755
index 000000000..bf6b0a9bc
--- /dev/null
+++ b/eos/effects/elitebonusgunshiparmorexplosiveresistance1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Vengeance
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Assault Frigates").level
+ fit.ship.boostItemAttr("armorExplosiveDamageResonance", ship.getModifiedItemAttr("eliteBonusGunship1") * level)
\ No newline at end of file
diff --git a/eos/effects/elitebonusgunshiparmorkineticresistance1.py b/eos/effects/elitebonusgunshiparmorkineticresistance1.py
new file mode 100755
index 000000000..c4368f94c
--- /dev/null
+++ b/eos/effects/elitebonusgunshiparmorkineticresistance1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Vengeance
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Assault Frigates").level
+ fit.ship.boostItemAttr("armorKineticDamageResonance", ship.getModifiedItemAttr("eliteBonusGunship1") * level)
\ No newline at end of file
diff --git a/eos/effects/elitebonusgunshiparmorthermalresistance1.py b/eos/effects/elitebonusgunshiparmorthermalresistance1.py
new file mode 100755
index 000000000..370a24f4a
--- /dev/null
+++ b/eos/effects/elitebonusgunshiparmorthermalresistance1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Vengeance
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Assault Frigates").level
+ fit.ship.boostItemAttr("armorThermalDamageResonance", ship.getModifiedItemAttr("eliteBonusGunship1") * level)
\ No newline at end of file
diff --git a/eos/effects/elitebonusgunshipcaprecharge2.py b/eos/effects/elitebonusgunshipcaprecharge2.py
new file mode 100755
index 000000000..89b23beb0
--- /dev/null
+++ b/eos/effects/elitebonusgunshipcaprecharge2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Vengeance
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Assault Frigates").level
+ fit.ship.boostItemAttr("rechargeRate", ship.getModifiedItemAttr("eliteBonusGunship2") * level)
\ No newline at end of file
diff --git a/eos/effects/elitebonusgunshipdronecapacity2.py b/eos/effects/elitebonusgunshipdronecapacity2.py
new file mode 100755
index 000000000..94ae06d5b
--- /dev/null
+++ b/eos/effects/elitebonusgunshipdronecapacity2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Ishkur
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Assault Frigates").level
+ fit.ship.increaseItemAttr("droneCapacity", ship.getModifiedItemAttr("eliteBonusGunship2") * level)
\ No newline at end of file
diff --git a/eos/effects/elitebonusgunshiphybriddmg2.py b/eos/effects/elitebonusgunshiphybriddmg2.py
new file mode 100755
index 000000000..23e323ed0
--- /dev/null
+++ b/eos/effects/elitebonusgunshiphybriddmg2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Harpy
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Assault Frigates").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Hybrid Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("eliteBonusGunship2") * level)
\ No newline at end of file
diff --git a/eos/effects/elitebonusgunshiphybridoptimal1.py b/eos/effects/elitebonusgunshiphybridoptimal1.py
new file mode 100755
index 000000000..f326e0227
--- /dev/null
+++ b/eos/effects/elitebonusgunshiphybridoptimal1.py
@@ -0,0 +1,9 @@
+# Used by:
+# Ship: Enyo
+# Ship: Harpy
+# Ship: Ishkur
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Assault Frigates").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Hybrid Turret"),
+ "maxRange", ship.getModifiedItemAttr("eliteBonusGunship1") * level)
\ No newline at end of file
diff --git a/eos/effects/elitebonusgunshiphybridtracking2.py b/eos/effects/elitebonusgunshiphybridtracking2.py
new file mode 100755
index 000000000..2c4f3c17f
--- /dev/null
+++ b/eos/effects/elitebonusgunshiphybridtracking2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Enyo
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Assault Frigates").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Hybrid Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("eliteBonusGunship2") * level)
\ No newline at end of file
diff --git a/eos/effects/elitebonusgunshiplaserdamage2.py b/eos/effects/elitebonusgunshiplaserdamage2.py
new file mode 100755
index 000000000..72f29e80a
--- /dev/null
+++ b/eos/effects/elitebonusgunshiplaserdamage2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Retribution
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Assault Frigates").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("eliteBonusGunship2") * level)
\ No newline at end of file
diff --git a/eos/effects/elitebonusgunshiplaseroptimal1.py b/eos/effects/elitebonusgunshiplaseroptimal1.py
new file mode 100755
index 000000000..6a00d364f
--- /dev/null
+++ b/eos/effects/elitebonusgunshiplaseroptimal1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Retribution
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Assault Frigates").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"),
+ "maxRange", ship.getModifiedItemAttr("eliteBonusGunship1") * level)
\ No newline at end of file
diff --git a/eos/effects/elitebonusgunshipprojectiledamage1.py b/eos/effects/elitebonusgunshipprojectiledamage1.py
new file mode 100755
index 000000000..17a49cce5
--- /dev/null
+++ b/eos/effects/elitebonusgunshipprojectiledamage1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Wolf
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Assault Frigates").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Projectile Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("eliteBonusGunship1") * level)
\ No newline at end of file
diff --git a/eos/effects/elitebonusgunshipprojectiledamage2.py b/eos/effects/elitebonusgunshipprojectiledamage2.py
new file mode 100755
index 000000000..b8180488e
--- /dev/null
+++ b/eos/effects/elitebonusgunshipprojectiledamage2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Jaguar
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Assault Frigates").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Projectile Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("eliteBonusGunship2") * level)
\ No newline at end of file
diff --git a/eos/effects/elitebonusgunshipprojectilefalloff2.py b/eos/effects/elitebonusgunshipprojectilefalloff2.py
new file mode 100755
index 000000000..5a90749b6
--- /dev/null
+++ b/eos/effects/elitebonusgunshipprojectilefalloff2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Wolf
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Assault Frigates").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Projectile Turret"),
+ "falloff", ship.getModifiedItemAttr("eliteBonusGunship2") * level)
\ No newline at end of file
diff --git a/eos/effects/elitebonusgunshipprojectileoptimal1.py b/eos/effects/elitebonusgunshipprojectileoptimal1.py
new file mode 100755
index 000000000..eccdc038e
--- /dev/null
+++ b/eos/effects/elitebonusgunshipprojectileoptimal1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Jaguar
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Assault Frigates").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Projectile Turret"),
+ "maxRange", ship.getModifiedItemAttr("eliteBonusGunship1") * level)
\ No newline at end of file
diff --git a/eos/effects/elitebonusgunshipshieldboost2.py b/eos/effects/elitebonusgunshipshieldboost2.py
new file mode 100755
index 000000000..51ac962db
--- /dev/null
+++ b/eos/effects/elitebonusgunshipshieldboost2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Hawk
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Assault Frigates").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Operation"),
+ "shieldBonus", ship.getModifiedItemAttr("eliteBonusGunship2") * level)
diff --git a/eos/effects/elitebonusheavygunshipassaultmissileflighttime1.py b/eos/effects/elitebonusheavygunshipassaultmissileflighttime1.py
new file mode 100755
index 000000000..2422913c5
--- /dev/null
+++ b/eos/effects/elitebonusheavygunshipassaultmissileflighttime1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Cerberus
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Heavy Assault Cruisers").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
+ "explosionDelay", ship.getModifiedItemAttr("eliteBonusHeavyGunship1") * level)
diff --git a/eos/effects/elitebonusheavygunshipassaultmissilelaunhcerrof2.py b/eos/effects/elitebonusheavygunshipassaultmissilelaunhcerrof2.py
new file mode 100755
index 000000000..72fff4673
--- /dev/null
+++ b/eos/effects/elitebonusheavygunshipassaultmissilelaunhcerrof2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Cerberus
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Heavy Assault Cruisers").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Rapid Light",
+ "speed", ship.getModifiedItemAttr("eliteBonusHeavyGunship2") * level)
diff --git a/eos/effects/elitebonusheavygunshipcaprecharge1.py b/eos/effects/elitebonusheavygunshipcaprecharge1.py
new file mode 100755
index 000000000..d6ef32a52
--- /dev/null
+++ b/eos/effects/elitebonusheavygunshipcaprecharge1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Sacrilege
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Heavy Assault Cruisers").level
+ fit.ship.boostItemAttr("rechargeRate", ship.getModifiedItemAttr("eliteBonusHeavyGunship1") * level)
diff --git a/eos/effects/elitebonusheavygunshipdronecapacity2.py b/eos/effects/elitebonusheavygunshipdronecapacity2.py
new file mode 100755
index 000000000..b3686024f
--- /dev/null
+++ b/eos/effects/elitebonusheavygunshipdronecapacity2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Ishtar
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Heavy Assault Cruisers").level
+ fit.ship.increaseItemAttr("droneCapacity", ship.getModifiedItemAttr("eliteBonusHeavyGunship2") * level)
diff --git a/eos/effects/elitebonusheavygunshipdronecontrolrange1.py b/eos/effects/elitebonusheavygunshipdronecontrolrange1.py
new file mode 100755
index 000000000..e3ce17137
--- /dev/null
+++ b/eos/effects/elitebonusheavygunshipdronecontrolrange1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Ishtar
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Heavy Assault Cruisers").level
+ amount = ship.getModifiedItemAttr("eliteBonusHeavyGunship1") * level
+ fit.extraAttributes.increase("droneControlRange", amount)
diff --git a/eos/effects/elitebonusheavygunshipheavyandheavyassaultandassaultmissilelauncherrof.py b/eos/effects/elitebonusheavygunshipheavyandheavyassaultandassaultmissilelauncherrof.py
new file mode 100755
index 000000000..c07396d7f
--- /dev/null
+++ b/eos/effects/elitebonusheavygunshipheavyandheavyassaultandassaultmissilelauncherrof.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Sacrilege
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Heavy Assault Cruisers").level
+ groups = ("Missile Launcher Rapid Light", "Missile Launcher Heavy Assault", "Missile Launcher Heavy")
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
+ "speed", ship.getModifiedItemAttr("eliteBonusHeavyGunship2") * level)
diff --git a/eos/effects/elitebonusheavygunshipheavyassaultmissilelaunhcerrof2.py b/eos/effects/elitebonusheavygunshipheavyassaultmissilelaunhcerrof2.py
new file mode 100755
index 000000000..6a201e2cc
--- /dev/null
+++ b/eos/effects/elitebonusheavygunshipheavyassaultmissilelaunhcerrof2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Cerberus
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Heavy Assault Cruisers").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Heavy Assault",
+ "speed", ship.getModifiedItemAttr("eliteBonusHeavyGunship2") * level)
diff --git a/eos/effects/elitebonusheavygunshipheavymissileflighttime1.py b/eos/effects/elitebonusheavygunshipheavymissileflighttime1.py
new file mode 100755
index 000000000..49228c061
--- /dev/null
+++ b/eos/effects/elitebonusheavygunshipheavymissileflighttime1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Cerberus
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Heavy Assault Cruisers").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Missiles"),
+ "explosionDelay", ship.getModifiedItemAttr("eliteBonusHeavyGunship1") * level)
diff --git a/eos/effects/elitebonusheavygunshipheavymissilelaunhcerrof2.py b/eos/effects/elitebonusheavygunshipheavymissilelaunhcerrof2.py
new file mode 100755
index 000000000..fedf5d4fd
--- /dev/null
+++ b/eos/effects/elitebonusheavygunshipheavymissilelaunhcerrof2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Cerberus
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Heavy Assault Cruisers").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Heavy",
+ "speed", ship.getModifiedItemAttr("eliteBonusHeavyGunship2") * level)
diff --git a/eos/effects/elitebonusheavygunshiphybriddmg2.py b/eos/effects/elitebonusheavygunshiphybriddmg2.py
new file mode 100755
index 000000000..f03bd5d0e
--- /dev/null
+++ b/eos/effects/elitebonusheavygunshiphybriddmg2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Deimos
+# Ship: Eagle
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Heavy Assault Cruisers").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("eliteBonusHeavyGunship2") * level)
diff --git a/eos/effects/elitebonusheavygunshiphybridfalloff1.py b/eos/effects/elitebonusheavygunshiphybridfalloff1.py
new file mode 100755
index 000000000..87d72b50f
--- /dev/null
+++ b/eos/effects/elitebonusheavygunshiphybridfalloff1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Deimos
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Heavy Assault Cruisers").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
+ "falloff", ship.getModifiedItemAttr("eliteBonusHeavyGunship1") * level)
diff --git a/eos/effects/elitebonusheavygunshiphybridoptimal1.py b/eos/effects/elitebonusheavygunshiphybridoptimal1.py
new file mode 100755
index 000000000..17808cb38
--- /dev/null
+++ b/eos/effects/elitebonusheavygunshiphybridoptimal1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Eagle
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Heavy Assault Cruisers").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
+ "maxRange", ship.getModifiedItemAttr("eliteBonusHeavyGunship1") * level)
diff --git a/eos/effects/elitebonusheavygunshiplaserdmg2.py b/eos/effects/elitebonusheavygunshiplaserdmg2.py
new file mode 100755
index 000000000..7bc969196
--- /dev/null
+++ b/eos/effects/elitebonusheavygunshiplaserdmg2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Zealot
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Heavy Assault Cruisers").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Energy Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("eliteBonusHeavyGunship2") * level)
diff --git a/eos/effects/elitebonusheavygunshiplaseroptimal1.py b/eos/effects/elitebonusheavygunshiplaseroptimal1.py
new file mode 100755
index 000000000..4f1ee2503
--- /dev/null
+++ b/eos/effects/elitebonusheavygunshiplaseroptimal1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Zealot
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Heavy Assault Cruisers").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Energy Turret"),
+ "maxRange", ship.getModifiedItemAttr("eliteBonusHeavyGunship1") * level)
diff --git a/eos/effects/elitebonusheavygunshiplightmissileflighttime1.py b/eos/effects/elitebonusheavygunshiplightmissileflighttime1.py
new file mode 100755
index 000000000..7f1848e8d
--- /dev/null
+++ b/eos/effects/elitebonusheavygunshiplightmissileflighttime1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Cerberus
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Heavy Assault Cruisers").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Light Missiles"),
+ "explosionDelay", ship.getModifiedItemAttr("eliteBonusHeavyGunship1") * level)
diff --git a/eos/effects/elitebonusheavygunshipprojectiledmg2.py b/eos/effects/elitebonusheavygunshipprojectiledmg2.py
new file mode 100755
index 000000000..c17dda1e4
--- /dev/null
+++ b/eos/effects/elitebonusheavygunshipprojectiledmg2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Vagabond
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Heavy Assault Cruisers").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("eliteBonusHeavyGunship2") * level)
diff --git a/eos/effects/elitebonusheavygunshipprojectilefalloff1.py b/eos/effects/elitebonusheavygunshipprojectilefalloff1.py
new file mode 100755
index 000000000..0ec83a5c6
--- /dev/null
+++ b/eos/effects/elitebonusheavygunshipprojectilefalloff1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Vagabond
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Heavy Assault Cruisers").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
+ "falloff", ship.getModifiedItemAttr("eliteBonusHeavyGunship1") * level)
diff --git a/eos/effects/elitebonusheavygunshipprojectileoptimal1.py b/eos/effects/elitebonusheavygunshipprojectileoptimal1.py
new file mode 100755
index 000000000..b404d5ff6
--- /dev/null
+++ b/eos/effects/elitebonusheavygunshipprojectileoptimal1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Muninn
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Heavy Assault Cruisers").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
+ "maxRange", ship.getModifiedItemAttr("eliteBonusHeavyGunship1") * level)
diff --git a/eos/effects/elitebonusheavygunshipprojectiletracking2.py b/eos/effects/elitebonusheavygunshipprojectiletracking2.py
new file mode 100755
index 000000000..ea501e8bd
--- /dev/null
+++ b/eos/effects/elitebonusheavygunshipprojectiletracking2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Muninn
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Heavy Assault Cruisers").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("eliteBonusHeavyGunship2") * level)
diff --git a/eos/effects/elitebonusheavyinterdictorheavyassaultmissilevelocitybonus.py b/eos/effects/elitebonusheavyinterdictorheavyassaultmissilevelocitybonus.py
new file mode 100755
index 000000000..691fe2cd1
--- /dev/null
+++ b/eos/effects/elitebonusheavyinterdictorheavyassaultmissilevelocitybonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Onyx
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Heavy Interdiction Cruisers").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
+ "maxVelocity", ship.getModifiedItemAttr("eliteBonusHeavyInterdictors1") * level)
diff --git a/eos/effects/elitebonusheavyinterdictorheavymissilevelocitybonus1.py b/eos/effects/elitebonusheavyinterdictorheavymissilevelocitybonus1.py
new file mode 100755
index 000000000..eb391ded1
--- /dev/null
+++ b/eos/effects/elitebonusheavyinterdictorheavymissilevelocitybonus1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Onyx
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Heavy Interdiction Cruisers").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Missiles"),
+ "maxVelocity", ship.getModifiedItemAttr("eliteBonusHeavyInterdictors1") * level)
diff --git a/eos/effects/elitebonusheavyinterdictorlaserrof.py b/eos/effects/elitebonusheavyinterdictorlaserrof.py
new file mode 100755
index 000000000..2dea9942b
--- /dev/null
+++ b/eos/effects/elitebonusheavyinterdictorlaserrof.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Devoter
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Heavy Interdiction Cruisers").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Energy Turret"),
+ "speed", ship.getModifiedItemAttr("eliteBonusHeavyInterdictors1") * level)
diff --git a/eos/effects/elitebonusheavyinterdictorshybridfalloff1.py b/eos/effects/elitebonusheavyinterdictorshybridfalloff1.py
new file mode 100755
index 000000000..6b7283329
--- /dev/null
+++ b/eos/effects/elitebonusheavyinterdictorshybridfalloff1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Phobos
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Heavy Interdiction Cruisers").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
+ "falloff", ship.getModifiedItemAttr("eliteBonusHeavyInterdictors1") * level)
diff --git a/eos/effects/elitebonusheavyinterdictorsprojectilefalloff1.py b/eos/effects/elitebonusheavyinterdictorsprojectilefalloff1.py
new file mode 100755
index 000000000..500263fd9
--- /dev/null
+++ b/eos/effects/elitebonusheavyinterdictorsprojectilefalloff1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Broadsword
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Heavy Interdiction Cruisers").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
+ "falloff", ship.getModifiedItemAttr("eliteBonusHeavyInterdictors1") * level)
diff --git a/eos/effects/elitebonusheavyinterdictorswarpdisruptfieldgeneratorwarpscramblerange2.py b/eos/effects/elitebonusheavyinterdictorswarpdisruptfieldgeneratorwarpscramblerange2.py
new file mode 100755
index 000000000..d559e3005
--- /dev/null
+++ b/eos/effects/elitebonusheavyinterdictorswarpdisruptfieldgeneratorwarpscramblerange2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ships from group: Heavy Interdiction Cruiser (4 of 4)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Heavy Interdiction Cruisers").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Warp Disrupt Field Generator",
+ "warpScrambleRange", ship.getModifiedItemAttr("eliteBonusHeavyInterdictors2") * level)
\ No newline at end of file
diff --git a/eos/effects/elitebonusinterdictorsbubblerof2.py b/eos/effects/elitebonusinterdictorsbubblerof2.py
new file mode 100755
index 000000000..e54939009
--- /dev/null
+++ b/eos/effects/elitebonusinterdictorsbubblerof2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ships from group: Interdictor (4 of 4)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Interdictors").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Interdiction Sphere Launcher",
+ "speed", ship.getModifiedItemAttr("eliteBonusInterdictors2") * level)
diff --git a/eos/effects/elitebonusinterdictorsinterdictionspherelauncherreactivationdelay2.py b/eos/effects/elitebonusinterdictorsinterdictionspherelauncherreactivationdelay2.py
new file mode 100755
index 000000000..96645ef18
--- /dev/null
+++ b/eos/effects/elitebonusinterdictorsinterdictionspherelauncherreactivationdelay2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ships from group: Interdictor (4 of 4)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Interdictors").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Interdiction Sphere Launcher",
+ "moduleReactivationDelay", ship.getModifiedItemAttr("eliteBonusInterdictors2") * level)
diff --git a/eos/effects/elitebonusinterdictorsmissilekineticdamage1.py b/eos/effects/elitebonusinterdictorsmissilekineticdamage1.py
new file mode 100755
index 000000000..11695301d
--- /dev/null
+++ b/eos/effects/elitebonusinterdictorsmissilekineticdamage1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Flycatcher
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Interdictors").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Light Missiles") or mod.charge.requiresSkill("Rockets"),
+ "kineticDamage", ship.getModifiedItemAttr("eliteBonusInterdictors1") * level)
diff --git a/eos/effects/elitebonusinterdictorsmissilethermaldamage1.py b/eos/effects/elitebonusinterdictorsmissilethermaldamage1.py
new file mode 100755
index 000000000..bc08b4d08
--- /dev/null
+++ b/eos/effects/elitebonusinterdictorsmissilethermaldamage1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Eris
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Interdictors").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Light Missiles") or mod.charge.requiresSkill("Rockets"),
+ "thermalDamage", ship.getModifiedItemAttr("eliteBonusInterdictors1") * level)
diff --git a/eos/effects/elitebonusinterdictorsmissilevelocity1.py b/eos/effects/elitebonusinterdictorsmissilevelocity1.py
new file mode 100755
index 000000000..4ea5d781f
--- /dev/null
+++ b/eos/effects/elitebonusinterdictorsmissilevelocity1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Heretic
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Interdictors").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "maxVelocity", ship.getModifiedItemAttr("eliteBonusInterdictors1") * level)
diff --git a/eos/effects/elitebonusinterdictorsprojectilefalloff1.py b/eos/effects/elitebonusinterdictorsprojectilefalloff1.py
new file mode 100755
index 000000000..6d47af695
--- /dev/null
+++ b/eos/effects/elitebonusinterdictorsprojectilefalloff1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Sabre
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Interdictors").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Projectile Turret"),
+ "falloff", ship.getModifiedItemAttr("eliteBonusInterdictors1") * level)
diff --git a/eos/effects/elitebonusjumpfreighterarmorhp1.py b/eos/effects/elitebonusjumpfreighterarmorhp1.py
new file mode 100755
index 000000000..0d0f730f8
--- /dev/null
+++ b/eos/effects/elitebonusjumpfreighterarmorhp1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ships from group: Jump Freighter (4 of 4)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Jump Freighters").level
+ fit.ship.boostItemAttr("armorHP", ship.getModifiedItemAttr("eliteBonusJumpFreighter1") * level)
diff --git a/eos/effects/elitebonusjumpfreighterhullhp1.py b/eos/effects/elitebonusjumpfreighterhullhp1.py
new file mode 100755
index 000000000..3a7f26b95
--- /dev/null
+++ b/eos/effects/elitebonusjumpfreighterhullhp1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ships from group: Jump Freighter (4 of 4)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Jump Freighters").level
+ fit.ship.boostItemAttr("hp", ship.getModifiedItemAttr("eliteBonusJumpFreighter1") * level)
diff --git a/eos/effects/elitebonusjumpfreighterjumpdriveconsumptionamount2.py b/eos/effects/elitebonusjumpfreighterjumpdriveconsumptionamount2.py
new file mode 100755
index 000000000..277721a76
--- /dev/null
+++ b/eos/effects/elitebonusjumpfreighterjumpdriveconsumptionamount2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ships from group: Jump Freighter (4 of 4)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Jump Freighters").level
+ fit.ship.boostItemAttr("jumpDriveConsumptionAmount", ship.getModifiedItemAttr("eliteBonusJumpFreighter2") * level)
diff --git a/eos/effects/elitebonusjumpfreightershieldhp1.py b/eos/effects/elitebonusjumpfreightershieldhp1.py
new file mode 100755
index 000000000..aff71a550
--- /dev/null
+++ b/eos/effects/elitebonusjumpfreightershieldhp1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ships from group: Jump Freighter (4 of 4)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Jump Freighters").level
+ fit.ship.boostItemAttr("shieldCapacity", ship.getModifiedItemAttr("eliteBonusJumpFreighter1") * level)
diff --git a/eos/effects/elitebonuslogisticenergytransfercapneed1.py b/eos/effects/elitebonuslogisticenergytransfercapneed1.py
new file mode 100755
index 000000000..55b3f9a4f
--- /dev/null
+++ b/eos/effects/elitebonuslogisticenergytransfercapneed1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Guardian
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Logistics").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Transfer Array",
+ "capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics1") * level)
diff --git a/eos/effects/elitebonuslogisticenergytransfercapneed2.py b/eos/effects/elitebonuslogisticenergytransfercapneed2.py
new file mode 100755
index 000000000..2577e2bce
--- /dev/null
+++ b/eos/effects/elitebonuslogisticenergytransfercapneed2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Basilisk
+# Ship: Etana
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Logistics").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Transfer Array",
+ "capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics2") * level)
diff --git a/eos/effects/elitebonuslogisticremotearmorrepaircapneed1.py b/eos/effects/elitebonuslogisticremotearmorrepaircapneed1.py
new file mode 100755
index 000000000..21bc21c2a
--- /dev/null
+++ b/eos/effects/elitebonuslogisticremotearmorrepaircapneed1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Oneiros
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Logistics").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Projector",
+ "capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics1") * level)
diff --git a/eos/effects/elitebonuslogisticremotearmorrepaircapneed2.py b/eos/effects/elitebonuslogisticremotearmorrepaircapneed2.py
new file mode 100755
index 000000000..a42cc11a1
--- /dev/null
+++ b/eos/effects/elitebonuslogisticremotearmorrepaircapneed2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Guardian
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Logistics").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Projector",
+ "capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics2") * level)
diff --git a/eos/effects/elitebonuslogisticshieldtransfercapneed1.py b/eos/effects/elitebonuslogisticshieldtransfercapneed1.py
new file mode 100755
index 000000000..998cd3909
--- /dev/null
+++ b/eos/effects/elitebonuslogisticshieldtransfercapneed1.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Basilisk
+# Ship: Etana
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Logistics").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Shield Transporter",
+ "capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics1") * level)
diff --git a/eos/effects/elitebonuslogisticshieldtransfercapneed2.py b/eos/effects/elitebonuslogisticshieldtransfercapneed2.py
new file mode 100755
index 000000000..64360d2e7
--- /dev/null
+++ b/eos/effects/elitebonuslogisticshieldtransfercapneed2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Scimitar
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Logistics").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Shield Transporter",
+ "capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics2") * level)
diff --git a/eos/effects/elitebonuslogisticstrackinglinkfalloffbonus1.py b/eos/effects/elitebonuslogisticstrackinglinkfalloffbonus1.py
new file mode 100755
index 000000000..26bac2307
--- /dev/null
+++ b/eos/effects/elitebonuslogisticstrackinglinkfalloffbonus1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Scimitar
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Logistics").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Link",
+ "falloffBonus", ship.getModifiedItemAttr("eliteBonusLogistics1") * level)
diff --git a/eos/effects/elitebonuslogisticstrackinglinkfalloffbonus2.py b/eos/effects/elitebonuslogisticstrackinglinkfalloffbonus2.py
new file mode 100755
index 000000000..0a2ca01c6
--- /dev/null
+++ b/eos/effects/elitebonuslogisticstrackinglinkfalloffbonus2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Oneiros
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Logistics").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Link",
+ "falloffBonus", ship.getModifiedItemAttr("eliteBonusLogistics2") * level)
diff --git a/eos/effects/elitebonuslogisticstrackinglinkmaxrangebonus1.py b/eos/effects/elitebonuslogisticstrackinglinkmaxrangebonus1.py
new file mode 100755
index 000000000..2d259cb28
--- /dev/null
+++ b/eos/effects/elitebonuslogisticstrackinglinkmaxrangebonus1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Scimitar
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Logistics").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Link",
+ "maxRangeBonus", ship.getModifiedItemAttr("eliteBonusLogistics1") * level)
diff --git a/eos/effects/elitebonuslogisticstrackinglinkmaxrangebonus2.py b/eos/effects/elitebonuslogisticstrackinglinkmaxrangebonus2.py
new file mode 100755
index 000000000..668a9e846
--- /dev/null
+++ b/eos/effects/elitebonuslogisticstrackinglinkmaxrangebonus2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Oneiros
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Logistics").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Link",
+ "maxRangeBonus", ship.getModifiedItemAttr("eliteBonusLogistics2") * level)
diff --git a/eos/effects/elitebonuslogisticstrackinglinktrackingspeedbonus1.py b/eos/effects/elitebonuslogisticstrackinglinktrackingspeedbonus1.py
new file mode 100755
index 000000000..7b97fb28b
--- /dev/null
+++ b/eos/effects/elitebonuslogisticstrackinglinktrackingspeedbonus1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Scimitar
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Logistics").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Link",
+ "trackingSpeedBonus", ship.getModifiedItemAttr("eliteBonusLogistics1") * level)
diff --git a/eos/effects/elitebonuslogisticstrackinglinktrackingspeedbonus2.py b/eos/effects/elitebonuslogisticstrackinglinktrackingspeedbonus2.py
new file mode 100755
index 000000000..8b36b982b
--- /dev/null
+++ b/eos/effects/elitebonuslogisticstrackinglinktrackingspeedbonus2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Oneiros
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Logistics").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Link",
+ "trackingSpeedBonus", ship.getModifiedItemAttr("eliteBonusLogistics2") * level)
diff --git a/eos/effects/elitebonusmarauderscruiseandtorpedodamagerole1.py b/eos/effects/elitebonusmarauderscruiseandtorpedodamagerole1.py
new file mode 100755
index 000000000..24be84628
--- /dev/null
+++ b/eos/effects/elitebonusmarauderscruiseandtorpedodamagerole1.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Golem
+type = "passive"
+def handler(fit, ship, context):
+ damageTypes = ("em", "explosive", "kinetic", "thermal")
+ for damageType in damageTypes:
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Cruise Missiles") or mod.charge.requiresSkill("Torpedoes"),
+ "{0}Damage".format(damageType), ship.getModifiedItemAttr("eliteBonusViolatorsRole1"))
diff --git a/eos/effects/elitebonusmaraudershieldbonus2a.py b/eos/effects/elitebonusmaraudershieldbonus2a.py
new file mode 100755
index 000000000..5bda615df
--- /dev/null
+++ b/eos/effects/elitebonusmaraudershieldbonus2a.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Golem
+# Ship: Vargur
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Marauders").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Operation"),
+ "shieldBonus", ship.getModifiedItemAttr("eliteBonusViolators2") * level)
diff --git a/eos/effects/elitebonusvampiredrainamount2.py b/eos/effects/elitebonusvampiredrainamount2.py
new file mode 100755
index 000000000..138014953
--- /dev/null
+++ b/eos/effects/elitebonusvampiredrainamount2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Curse
+# Ship: Pilgrim
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Recon Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire",
+ "powerTransferAmount", ship.getModifiedItemAttr("eliteBonusReconShip2") * level)
diff --git a/eos/effects/elitebonusviolatorsewtargetpainting1.py b/eos/effects/elitebonusviolatorsewtargetpainting1.py
new file mode 100755
index 000000000..588d4cf7d
--- /dev/null
+++ b/eos/effects/elitebonusviolatorsewtargetpainting1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Golem
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Marauders").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Target Painter",
+ "signatureRadiusBonus", ship.getModifiedItemAttr("eliteBonusViolators1") * level)
diff --git a/eos/effects/elitebonusviolatorslargeenergyturretdamage1.py b/eos/effects/elitebonusviolatorslargeenergyturretdamage1.py
new file mode 100755
index 000000000..22216ee42
--- /dev/null
+++ b/eos/effects/elitebonusviolatorslargeenergyturretdamage1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Paladin
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Marauders").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Energy Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("eliteBonusViolators1") * level)
diff --git a/eos/effects/elitebonusviolatorslargeenergyturretdamagerole1.py b/eos/effects/elitebonusviolatorslargeenergyturretdamagerole1.py
new file mode 100755
index 000000000..dd9fd0d76
--- /dev/null
+++ b/eos/effects/elitebonusviolatorslargeenergyturretdamagerole1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Paladin
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Energy Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("eliteBonusViolatorsRole1"))
diff --git a/eos/effects/elitebonusviolatorslargehybridturretdamagerole1.py b/eos/effects/elitebonusviolatorslargehybridturretdamagerole1.py
new file mode 100755
index 000000000..b586ef259
--- /dev/null
+++ b/eos/effects/elitebonusviolatorslargehybridturretdamagerole1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Kronos
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Hybrid Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("eliteBonusViolatorsRole1"))
\ No newline at end of file
diff --git a/eos/effects/elitebonusviolatorslargehybridturrettracking1.py b/eos/effects/elitebonusviolatorslargehybridturrettracking1.py
new file mode 100755
index 000000000..c670f3c81
--- /dev/null
+++ b/eos/effects/elitebonusviolatorslargehybridturrettracking1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Kronos
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Marauders").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Hybrid Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("eliteBonusViolators1") * level)
diff --git a/eos/effects/elitebonusviolatorslargeprojectileturretdamagerole1.py b/eos/effects/elitebonusviolatorslargeprojectileturretdamagerole1.py
new file mode 100755
index 000000000..f23d4db91
--- /dev/null
+++ b/eos/effects/elitebonusviolatorslargeprojectileturretdamagerole1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Vargur
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Projectile Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("eliteBonusViolatorsRole1"))
diff --git a/eos/effects/elitebonusviolatorslargeprojectileturrettracking1.py b/eos/effects/elitebonusviolatorslargeprojectileturrettracking1.py
new file mode 100755
index 000000000..11fe6ebd5
--- /dev/null
+++ b/eos/effects/elitebonusviolatorslargeprojectileturrettracking1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Vargur
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Marauders").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Projectile Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("eliteBonusViolators1") * level)
diff --git a/eos/effects/elitebonusviolatorsrepairsystemsarmordamageamount2.py b/eos/effects/elitebonusviolatorsrepairsystemsarmordamageamount2.py
new file mode 100755
index 000000000..95ebdae82
--- /dev/null
+++ b/eos/effects/elitebonusviolatorsrepairsystemsarmordamageamount2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Kronos
+# Ship: Paladin
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Marauders").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Repair Systems"),
+ "armorDamageAmount", ship.getModifiedItemAttr("eliteBonusViolators2") * level)
diff --git a/eos/effects/elitebonusviolatorstractorbeammaxrangerole2.py b/eos/effects/elitebonusviolatorstractorbeammaxrangerole2.py
new file mode 100755
index 000000000..d0c584e51
--- /dev/null
+++ b/eos/effects/elitebonusviolatorstractorbeammaxrangerole2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ships from group: Marauder (4 of 4)
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tractor Beam",
+ "maxRange", ship.getModifiedItemAttr("eliteBonusViolatorsRole2"))
diff --git a/eos/effects/elitebonusviolatorstractorbeammaxtractorvelocityrole3.py b/eos/effects/elitebonusviolatorstractorbeammaxtractorvelocityrole3.py
new file mode 100755
index 000000000..045194aed
--- /dev/null
+++ b/eos/effects/elitebonusviolatorstractorbeammaxtractorvelocityrole3.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ships from group: Marauder (4 of 4)
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tractor Beam",
+ "maxTractorVelocity", ship.getModifiedItemAttr("eliteBonusViolatorsRole3"))
diff --git a/eos/effects/eliteelitebonuscommandshipdronebay1.py b/eos/effects/eliteelitebonuscommandshipdronebay1.py
new file mode 100755
index 000000000..5c63da1b7
--- /dev/null
+++ b/eos/effects/eliteelitebonuscommandshipdronebay1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Eos
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Command Ships").level
+ fit.ship.increaseItemAttr("droneCapacity", ship.getModifiedItemAttr("eliteBonusCommandShips1") * level)
diff --git a/eos/effects/eliteindustrialarmorrepairamountelite1.py b/eos/effects/eliteindustrialarmorrepairamountelite1.py
new file mode 100755
index 000000000..fa2cd62a6
--- /dev/null
+++ b/eos/effects/eliteindustrialarmorrepairamountelite1.py
@@ -0,0 +1,9 @@
+# Used by:
+# Ship: Impel
+# Ship: Occator
+# Ship: Prorator
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Transport Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Repair Systems"),
+ "armorDamageAmount", ship.getModifiedItemAttr("eliteBonusIndustrial1") * level)
diff --git a/eos/effects/eliteindustrialarmorrepairdurationelite2.py b/eos/effects/eliteindustrialarmorrepairdurationelite2.py
new file mode 100755
index 000000000..0950eda9d
--- /dev/null
+++ b/eos/effects/eliteindustrialarmorrepairdurationelite2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Viator
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Transport Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Repair Systems"),
+ "duration", ship.getModifiedItemAttr("eliteBonusIndustrial2") * level)
diff --git a/eos/effects/eliteindustrialshieldboostamountelite1.py b/eos/effects/eliteindustrialshieldboostamountelite1.py
new file mode 100755
index 000000000..60488a972
--- /dev/null
+++ b/eos/effects/eliteindustrialshieldboostamountelite1.py
@@ -0,0 +1,10 @@
+# Used by:
+# Ship: Bustard
+# Ship: Crane
+# Ship: Mastodon
+# Ship: Prowler
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Transport Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Operation"),
+ "shieldBonus", ship.getModifiedItemAttr("eliteBonusIndustrial1") * level)
diff --git a/eos/effects/elitereconbonusassaultlauncherrof1.py b/eos/effects/elitereconbonusassaultlauncherrof1.py
new file mode 100755
index 000000000..4fdef9b3d
--- /dev/null
+++ b/eos/effects/elitereconbonusassaultlauncherrof1.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Huginn
+# Ship: Lachesis
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Recon Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Rapid Light",
+ "speed", ship.getModifiedItemAttr("eliteBonusReconShip1") * level)
diff --git a/eos/effects/elitereconbonusenergyneutamount2.py b/eos/effects/elitereconbonusenergyneutamount2.py
new file mode 100755
index 000000000..34ee87ce7
--- /dev/null
+++ b/eos/effects/elitereconbonusenergyneutamount2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Curse
+# Ship: Pilgrim
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Recon Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer",
+ "energyDestabilizationAmount", ship.getModifiedItemAttr("eliteBonusReconShip2") * level)
diff --git a/eos/effects/elitereconbonusenergyneutrange1.py b/eos/effects/elitereconbonusenergyneutrange1.py
new file mode 100755
index 000000000..b4529dce3
--- /dev/null
+++ b/eos/effects/elitereconbonusenergyneutrange1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Curse
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Recon Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer",
+ "energyDestabilizationRange", ship.getModifiedItemAttr("eliteBonusReconShip1") * level)
diff --git a/eos/effects/elitereconbonusgravimetricstrength2.py b/eos/effects/elitereconbonusgravimetricstrength2.py
new file mode 100755
index 000000000..1c3134077
--- /dev/null
+++ b/eos/effects/elitereconbonusgravimetricstrength2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Falcon
+# Ship: Rook
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Recon Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
+ "scanGravimetricStrengthBonus", ship.getModifiedItemAttr("eliteBonusReconShip2") * level)
diff --git a/eos/effects/elitereconbonusheavyassaultlauncherrof1.py b/eos/effects/elitereconbonusheavyassaultlauncherrof1.py
new file mode 100755
index 000000000..c28d1a017
--- /dev/null
+++ b/eos/effects/elitereconbonusheavyassaultlauncherrof1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Huginn
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Recon Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Heavy Assault",
+ "speed", ship.getModifiedItemAttr("eliteBonusReconShip1") * level)
diff --git a/eos/effects/elitereconbonusheavyassaultmissilevelocity.py b/eos/effects/elitereconbonusheavyassaultmissilevelocity.py
new file mode 100755
index 000000000..4222e545f
--- /dev/null
+++ b/eos/effects/elitereconbonusheavyassaultmissilevelocity.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Rook
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Recon Ships").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
+ "maxVelocity", ship.getModifiedItemAttr("eliteBonusReconShip1") * level)
diff --git a/eos/effects/elitereconbonusheavylauncherrof1.py b/eos/effects/elitereconbonusheavylauncherrof1.py
new file mode 100755
index 000000000..63d6d21bc
--- /dev/null
+++ b/eos/effects/elitereconbonusheavylauncherrof1.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Huginn
+# Ship: Lachesis
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Recon Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Heavy",
+ "speed", ship.getModifiedItemAttr("eliteBonusReconShip1") * level)
diff --git a/eos/effects/elitereconbonusheavymissilevelocity.py b/eos/effects/elitereconbonusheavymissilevelocity.py
new file mode 100755
index 000000000..a64a50618
--- /dev/null
+++ b/eos/effects/elitereconbonusheavymissilevelocity.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Rook
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Recon Ships").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Missiles"),
+ "maxVelocity", ship.getModifiedItemAttr("eliteBonusReconShip1") * level)
diff --git a/eos/effects/elitereconbonusladarstrength2.py b/eos/effects/elitereconbonusladarstrength2.py
new file mode 100755
index 000000000..fb8051783
--- /dev/null
+++ b/eos/effects/elitereconbonusladarstrength2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Falcon
+# Ship: Rook
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Recon Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
+ "scanLadarStrengthBonus", ship.getModifiedItemAttr("eliteBonusReconShip2") * level)
diff --git a/eos/effects/elitereconbonusmagnetometricstrength2.py b/eos/effects/elitereconbonusmagnetometricstrength2.py
new file mode 100755
index 000000000..f11e9aa22
--- /dev/null
+++ b/eos/effects/elitereconbonusmagnetometricstrength2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Falcon
+# Ship: Rook
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Recon Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
+ "scanMagnetometricStrengthBonus", ship.getModifiedItemAttr("eliteBonusReconShip2") * level)
diff --git a/eos/effects/elitereconbonusradarstrength2.py b/eos/effects/elitereconbonusradarstrength2.py
new file mode 100755
index 000000000..5db4d230d
--- /dev/null
+++ b/eos/effects/elitereconbonusradarstrength2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Falcon
+# Ship: Rook
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Recon Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
+ "scanRadarStrengthBonus", ship.getModifiedItemAttr("eliteBonusReconShip2") * level)
diff --git a/eos/effects/elitereconenergyvampirerangebonus1.py b/eos/effects/elitereconenergyvampirerangebonus1.py
new file mode 100755
index 000000000..b04aff8ac
--- /dev/null
+++ b/eos/effects/elitereconenergyvampirerangebonus1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Curse
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Recon Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire",
+ "powerTransferRange", ship.getModifiedItemAttr("eliteBonusReconShip1") * level)
diff --git a/eos/effects/elitereconjumpscramblerrangebonus2.py b/eos/effects/elitereconjumpscramblerrangebonus2.py
new file mode 100755
index 000000000..bcc9f868a
--- /dev/null
+++ b/eos/effects/elitereconjumpscramblerrangebonus2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Arazu
+# Ship: Lachesis
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Recon Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Warp Scrambler",
+ "maxRange", ship.getModifiedItemAttr("eliteBonusReconShip2") * level)
diff --git a/eos/effects/elitereconstasiswebbonus2.py b/eos/effects/elitereconstasiswebbonus2.py
new file mode 100755
index 000000000..b8239e55d
--- /dev/null
+++ b/eos/effects/elitereconstasiswebbonus2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Huginn
+# Ship: Rapier
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Recon Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Stasis Web",
+ "maxRange", ship.getModifiedItemAttr("eliteBonusReconShip2") * level)
diff --git a/eos/effects/emarmorcompensationhardeningbonusgrouparmorcoating.py b/eos/effects/emarmorcompensationhardeningbonusgrouparmorcoating.py
new file mode 100755
index 000000000..d16659dfa
--- /dev/null
+++ b/eos/effects/emarmorcompensationhardeningbonusgrouparmorcoating.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: EM Armor Compensation
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Coating",
+ "emDamageResistanceBonus", skill.getModifiedItemAttr("hardeningBonus") * skill.level)
diff --git a/eos/effects/emarmorcompensationhardeningbonusgroupenergized.py b/eos/effects/emarmorcompensationhardeningbonusgroupenergized.py
new file mode 100755
index 000000000..d40051c96
--- /dev/null
+++ b/eos/effects/emarmorcompensationhardeningbonusgroupenergized.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: EM Armor Compensation
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Plating Energized",
+ "emDamageResistanceBonus", skill.getModifiedItemAttr("hardeningBonus") * skill.level)
diff --git a/eos/effects/empwave.py b/eos/effects/empwave.py
new file mode 100755
index 000000000..91e0f380e
--- /dev/null
+++ b/eos/effects/empwave.py
@@ -0,0 +1,5 @@
+# Used by:
+# Modules from group: Smart Bomb (118 of 118)
+type = "active"
+def handler(fit, module, context):
+ pass
diff --git a/eos/effects/emshieldcompensationhardeningbonusgroupshieldamp.py b/eos/effects/emshieldcompensationhardeningbonusgroupshieldamp.py
new file mode 100755
index 000000000..3f83f020a
--- /dev/null
+++ b/eos/effects/emshieldcompensationhardeningbonusgroupshieldamp.py
@@ -0,0 +1,7 @@
+# Used by:
+# Skill: EM Shield Compensation
+type = "passive"
+def handler(fit, skill, context):
+ level = fit.character.getSkill("EM Shield Compensation").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Shield Amplifier",
+ "emDamageResistanceBonus", skill.getModifiedItemAttr("hardeningBonus") * level)
\ No newline at end of file
diff --git a/eos/effects/energydestabilizationnew.py b/eos/effects/energydestabilizationnew.py
new file mode 100755
index 000000000..be353eaa2
--- /dev/null
+++ b/eos/effects/energydestabilizationnew.py
@@ -0,0 +1,12 @@
+# Used by:
+# Drones from group: Cap Drain Drone (3 of 3)
+# Modules from group: Energy Destabilizer (41 of 41)
+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/energyemmisionsystemscapneedbonuspostpercentcapacitorneedlocationshipmodulesrequiringenergyemmisionsystems.py b/eos/effects/energyemmisionsystemscapneedbonuspostpercentcapacitorneedlocationshipmodulesrequiringenergyemmisionsystems.py
new file mode 100755
index 000000000..ff17bcbbb
--- /dev/null
+++ b/eos/effects/energyemmisionsystemscapneedbonuspostpercentcapacitorneedlocationshipmodulesrequiringenergyemmisionsystems.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implants named like: Inherent Implants 'Squire' Energy Emission Systems ES (6 of 6)
+# Modules named like: Egress Port Maximizer (8 of 8)
+# Skill: Energy Emission Systems
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Energy Emission Systems"),
+ "capacitorNeed", container.getModifiedItemAttr("capNeedBonus") * level)
diff --git a/eos/effects/energygridupgradescpuneedbonuspostpercentcpulocationshipmodulesrequiringenergygridupgrades.py b/eos/effects/energygridupgradescpuneedbonuspostpercentcpulocationshipmodulesrequiringenergygridupgrades.py
new file mode 100755
index 000000000..f503897fa
--- /dev/null
+++ b/eos/effects/energygridupgradescpuneedbonuspostpercentcpulocationshipmodulesrequiringenergygridupgrades.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implants named like: Inherent Implants 'Squire' Energy Grid Upgrades EU (6 of 6)
+# Modules named like: Powergrid Subroutine Maximizer (8 of 8)
+# Skill: Energy Grid Upgrades
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Energy Grid Upgrades"),
+ "cpu", container.getModifiedItemAttr("cpuNeedBonus") * level)
diff --git a/eos/effects/energymanagementcapacitorbonuspostpercentcapacitylocationshipgroupcapacitorcapacitybonus.py b/eos/effects/energymanagementcapacitorbonuspostpercentcapacitylocationshipgroupcapacitorcapacitybonus.py
new file mode 100755
index 000000000..b6f65ac07
--- /dev/null
+++ b/eos/effects/energymanagementcapacitorbonuspostpercentcapacitylocationshipgroupcapacitorcapacitybonus.py
@@ -0,0 +1,10 @@
+# Used by:
+# Implants named like: Inherent Implants 'Squire' Energy Management EM (6 of 6)
+# Implants named like: Mindflood Booster (4 of 4)
+# Modules named like: Semiconductor Memory Cell (8 of 8)
+# Implant: Genolution Core Augmentation CA-1
+# Skill: Energy Management
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.ship.boostItemAttr("capacitorCapacity", container.getModifiedItemAttr("capacitorCapacityBonus") * level)
diff --git a/eos/effects/energypulseweaponsdurationbonuspostpercentdurationlocationshipmodulesrequiringenergypulseweapons.py b/eos/effects/energypulseweaponsdurationbonuspostpercentdurationlocationshipmodulesrequiringenergypulseweapons.py
new file mode 100755
index 000000000..41b004ecc
--- /dev/null
+++ b/eos/effects/energypulseweaponsdurationbonuspostpercentdurationlocationshipmodulesrequiringenergypulseweapons.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Inherent Implants 'Squire' Energy Pulse Weapons EP (6 of 6)
+# Skill: Energy Pulse Weapons
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Energy Pulse Weapons"),
+ "duration", container.getModifiedItemAttr("durationBonus") * level)
\ No newline at end of file
diff --git a/eos/effects/energysystemsoperationcaprechargebonuspostpercentrechargeratelocationshipgroupcapacitor.py b/eos/effects/energysystemsoperationcaprechargebonuspostpercentrechargeratelocationshipgroupcapacitor.py
new file mode 100755
index 000000000..f5042d690
--- /dev/null
+++ b/eos/effects/energysystemsoperationcaprechargebonuspostpercentrechargeratelocationshipgroupcapacitor.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implants named like: Inherent Implants 'Squire' Energy Systems Operation EO (6 of 6)
+# Modules named like: Capacitor Control Circuit (8 of 8)
+# Implant: Genolution Core Augmentation CA-2
+# Skill: Energy Systems Operation
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.ship.boostItemAttr("rechargeRate", container.getModifiedItemAttr("capRechargeBonus") * level)
diff --git a/eos/effects/energytransfer.py b/eos/effects/energytransfer.py
new file mode 100755
index 000000000..8c1904ab2
--- /dev/null
+++ b/eos/effects/energytransfer.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules from group: Energy Transfer Array (38 of 38)
+type = "projected", "active"
+def handler(fit, module, context):
+ if "projected" in context:
+ amount = module.getModifiedItemAttr("powerTransferAmount")
+ duration = module.getModifiedItemAttr("duration")
+ fit.addDrain(duration, -amount, 0)
diff --git a/eos/effects/energytransferarraymaxrangebonus.py b/eos/effects/energytransferarraymaxrangebonus.py
new file mode 100755
index 000000000..dca541353
--- /dev/null
+++ b/eos/effects/energytransferarraymaxrangebonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Augoror
+# Ship: Osprey
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Transfer Array",
+ "powerTransferRange", ship.getModifiedItemAttr("maxRangeBonus"))
diff --git a/eos/effects/energytransferarraytransferamountbonus.py b/eos/effects/energytransferarraytransferamountbonus.py
new file mode 100755
index 000000000..22ac3fd0b
--- /dev/null
+++ b/eos/effects/energytransferarraytransferamountbonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Augoror
+# Ship: Osprey
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Transfer Array",
+ "powerTransferAmount", ship.getModifiedItemAttr("energyTransferAmountBonus"))
diff --git a/eos/effects/energytransferpowerneedbonuseffect.py b/eos/effects/energytransferpowerneedbonuseffect.py
new file mode 100755
index 000000000..2be09991c
--- /dev/null
+++ b/eos/effects/energytransferpowerneedbonuseffect.py
@@ -0,0 +1,6 @@
+# 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 == "Energy Transfer Array",
+ "power", ship.getModifiedItemAttr("powerTransferPowerNeedBonus"))
diff --git a/eos/effects/energyweapondamagemultiply.py b/eos/effects/energyweapondamagemultiply.py
new file mode 100755
index 000000000..554bcc0b5
--- /dev/null
+++ b/eos/effects/energyweapondamagemultiply.py
@@ -0,0 +1,9 @@
+# Used by:
+# Modules from group: Heat Sink (25 of 25)
+# Modules named like: QA Multiship Module Players (4 of 4)
+# Module: QA Damage Module
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Energy Weapon",
+ "damageMultiplier", module.getModifiedItemAttr("damageMultiplier"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/energyweapondamagemultiplypassive.py b/eos/effects/energyweapondamagemultiplypassive.py
new file mode 100755
index 000000000..b79833675
--- /dev/null
+++ b/eos/effects/energyweapondamagemultiplypassive.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules named like: Energy Collision Accelerator (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Energy Weapon",
+ "damageMultiplier", module.getModifiedItemAttr("damageMultiplier"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/energyweaponspeedmultiply.py b/eos/effects/energyweaponspeedmultiply.py
new file mode 100755
index 000000000..60d15a46d
--- /dev/null
+++ b/eos/effects/energyweaponspeedmultiply.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules from group: Heat Sink (25 of 25)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Energy Weapon",
+ "speed", module.getModifiedItemAttr("speedMultiplier"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/energyweaponspeedmultiplypassive.py b/eos/effects/energyweaponspeedmultiplypassive.py
new file mode 100755
index 000000000..0f8a5a5e9
--- /dev/null
+++ b/eos/effects/energyweaponspeedmultiplypassive.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules named like: Energy Burst Aerator (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Energy Weapon",
+ "speed", module.getModifiedItemAttr("speedMultiplier"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/engineeringpowerengineeringoutputbonuspostpercentpoweroutputlocationshipgrouppowercore.py b/eos/effects/engineeringpowerengineeringoutputbonuspostpercentpoweroutputlocationshipgrouppowercore.py
new file mode 100755
index 000000000..43a85bb58
--- /dev/null
+++ b/eos/effects/engineeringpowerengineeringoutputbonuspostpercentpoweroutputlocationshipgrouppowercore.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implants named like: Inherent Implants 'Squire' Engineering EG (6 of 6)
+# Modules named like: Ancillary Current Router (8 of 8)
+# Implant: Genolution Core Augmentation CA-1
+# Skill: Engineering
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.ship.boostItemAttr("powerOutput", container.getModifiedItemAttr("powerEngineeringOutputBonus") * level)
diff --git a/eos/effects/evasivemaneuveringagilitybonuspostpercentagilityship.py b/eos/effects/evasivemaneuveringagilitybonuspostpercentagilityship.py
new file mode 100755
index 000000000..3a6c1254b
--- /dev/null
+++ b/eos/effects/evasivemaneuveringagilitybonuspostpercentagilityship.py
@@ -0,0 +1,11 @@
+# Used by:
+# Implants named like: Eifyr and Co. 'Rogue' Evasive Maneuvering EM (6 of 6)
+# Implants named like: Low grade Nomad (5 of 6)
+# Modules named like: Low Friction Nozzle Joints (8 of 8)
+# Skill: Evasive Maneuvering
+# Skill: Spaceship Command
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.ship.boostItemAttr("agility", container.getModifiedItemAttr("agilityBonus") * level,
+ stackingPenalties = "skill" not in context and "implant" not in context)
diff --git a/eos/effects/ewgroupecmburstmaxrangebonus.py b/eos/effects/ewgroupecmburstmaxrangebonus.py
new file mode 100755
index 000000000..8ec6ab7b1
--- /dev/null
+++ b/eos/effects/ewgroupecmburstmaxrangebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Low grade Centurion (5 of 6)
+type = "passive"
+def handler(fit, implant, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote ECM Burst",
+ "maxRange", implant.getModifiedItemAttr("rangeSkillBonus"))
\ No newline at end of file
diff --git a/eos/effects/ewgrouprsdmaxrangebonus.py b/eos/effects/ewgrouprsdmaxrangebonus.py
new file mode 100755
index 000000000..6f0cb57bc
--- /dev/null
+++ b/eos/effects/ewgrouprsdmaxrangebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Low grade Centurion (5 of 6)
+type = "passive"
+def handler(fit, implant, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Sensor Damper",
+ "maxRange", implant.getModifiedItemAttr("rangeSkillBonus"))
\ No newline at end of file
diff --git a/eos/effects/ewgrouptdmaxrangebonus.py b/eos/effects/ewgrouptdmaxrangebonus.py
new file mode 100755
index 000000000..7036ffa49
--- /dev/null
+++ b/eos/effects/ewgrouptdmaxrangebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Low grade Centurion (5 of 6)
+type = "passive"
+def handler(fit, implant, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Disruptor",
+ "maxRange", implant.getModifiedItemAttr("rangeSkillBonus"))
\ No newline at end of file
diff --git a/eos/effects/ewgrouptpmaxrangebonus.py b/eos/effects/ewgrouptpmaxrangebonus.py
new file mode 100755
index 000000000..ef6ca3232
--- /dev/null
+++ b/eos/effects/ewgrouptpmaxrangebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Low grade Centurion (5 of 6)
+type = "passive"
+def handler(fit, implant, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Target Painter",
+ "maxRange", implant.getModifiedItemAttr("rangeSkillBonus"))
\ No newline at end of file
diff --git a/eos/effects/ewskillecmburstcapneedbonus.py b/eos/effects/ewskillecmburstcapneedbonus.py
new file mode 100755
index 000000000..c4f67d9d2
--- /dev/null
+++ b/eos/effects/ewskillecmburstcapneedbonus.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implants named like: Zainou 'Gypsy' Electronic Warfare EW (6 of 6)
+# Modules named like: Signal Disruption Amplifier (8 of 8)
+# Skill: Electronic Warfare
+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",
+ "capacitorNeed", container.getModifiedItemAttr("capNeedBonus") * level)
diff --git a/eos/effects/ewskillecmburstfalloffbonus.py b/eos/effects/ewskillecmburstfalloffbonus.py
new file mode 100755
index 000000000..c98f9b948
--- /dev/null
+++ b/eos/effects/ewskillecmburstfalloffbonus.py
@@ -0,0 +1,6 @@
+# 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
new file mode 100755
index 000000000..cd5947836
--- /dev/null
+++ b/eos/effects/ewskillecmburstrangebonus.py
@@ -0,0 +1,9 @@
+# Used by:
+# Modules named like: Particle Dispersion Projector (8 of 8)
+# Skill: Long Distance Jamming
+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",
+ "ecmBurstRange", container.getModifiedItemAttr("rangeSkillBonus") * level,
+ stackingPenalties = False if "skill" in context else True)
diff --git a/eos/effects/ewskillewcapneedskilllevel.py b/eos/effects/ewskillewcapneedskilllevel.py
new file mode 100755
index 000000000..07b7f318f
--- /dev/null
+++ b/eos/effects/ewskillewcapneedskilllevel.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implants named like: Zainou 'Gypsy' Electronic Warfare EW (6 of 6)
+# Modules named like: Signal Disruption Amplifier (8 of 8)
+# Skill: Electronic Warfare
+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",
+ "capacitorNeed", container.getModifiedItemAttr("capNeedBonus") * level)
diff --git a/eos/effects/ewskillewfalloffbonus.py b/eos/effects/ewskillewfalloffbonus.py
new file mode 100755
index 000000000..d27c15c15
--- /dev/null
+++ b/eos/effects/ewskillewfalloffbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Frequency Modulation
+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
diff --git a/eos/effects/ewskillewmaxrangebonus.py b/eos/effects/ewskillewmaxrangebonus.py
new file mode 100755
index 000000000..d56a72a8f
--- /dev/null
+++ b/eos/effects/ewskillewmaxrangebonus.py
@@ -0,0 +1,10 @@
+# Used by:
+# Implants named like: Low grade Centurion (5 of 6)
+# Modules named like: Particle Dispersion Projector (8 of 8)
+# Skill: Long Distance Jamming
+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",
+ "maxRange", container.getModifiedItemAttr("rangeSkillBonus") * level,
+ stackingPenalties = "skill" not in context and "implant" not in context)
diff --git a/eos/effects/ewskillrsdcapneedbonusskilllevel.py b/eos/effects/ewskillrsdcapneedbonusskilllevel.py
new file mode 100755
index 000000000..1ad07b22b
--- /dev/null
+++ b/eos/effects/ewskillrsdcapneedbonusskilllevel.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Zainou 'Gypsy' Sensor Linking SL (6 of 6)
+# Skill: Sensor Linking
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Sensor Linking"),
+ "capacitorNeed", container.getModifiedItemAttr("capNeedBonus") * level)
diff --git a/eos/effects/ewskillrsdfalloffbonus.py b/eos/effects/ewskillrsdfalloffbonus.py
new file mode 100755
index 000000000..c7aa8046a
--- /dev/null
+++ b/eos/effects/ewskillrsdfalloffbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Frequency Modulation
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Sensor Linking"),
+ "falloff", skill.getModifiedItemAttr("falloffBonus") * skill.level)
diff --git a/eos/effects/ewskillrsdmaxrangebonus.py b/eos/effects/ewskillrsdmaxrangebonus.py
new file mode 100755
index 000000000..252a1b72b
--- /dev/null
+++ b/eos/effects/ewskillrsdmaxrangebonus.py
@@ -0,0 +1,9 @@
+# Used by:
+# Modules named like: Particle Dispersion Projector (8 of 8)
+# Skill: Long Distance Jamming
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Sensor Linking"),
+ "maxRange", container.getModifiedItemAttr("rangeSkillBonus") * level,
+ stackingPenalties = "skill" not in context)
diff --git a/eos/effects/ewskillscanstrengthbonus.py b/eos/effects/ewskillscanstrengthbonus.py
new file mode 100755
index 000000000..aceb14c33
--- /dev/null
+++ b/eos/effects/ewskillscanstrengthbonus.py
@@ -0,0 +1,11 @@
+# Used by:
+# Modules named like: Particle Dispersion Augmentor (8 of 8)
+# Skill: Signal Dispersion
+type = "passive"
+def handler(fit, container, context):
+ groups = ("ECM", "ECM Burst")
+ 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,
+ "scan{0}StrengthBonus".format(scanType), container.getModifiedItemAttr("scanSkillEwStrengthBonus") * level,
+ stackingPenalties = False if "skill" in context else True)
diff --git a/eos/effects/ewskillsignalsuppressionmaxtargetrangebonus.py b/eos/effects/ewskillsignalsuppressionmaxtargetrangebonus.py
new file mode 100755
index 000000000..3ff0e750c
--- /dev/null
+++ b/eos/effects/ewskillsignalsuppressionmaxtargetrangebonus.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules named like: Inverted Signal Field Projector (8 of 8)
+# Skill: Signal Suppression
+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",
+ "maxTargetRangeBonus", container.getModifiedItemAttr("scanSkillEwStrengthBonus") * level)
diff --git a/eos/effects/ewskillsignalsuppressionscanresolutionbonus.py b/eos/effects/ewskillsignalsuppressionscanresolutionbonus.py
new file mode 100755
index 000000000..912ee1947
--- /dev/null
+++ b/eos/effects/ewskillsignalsuppressionscanresolutionbonus.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules named like: Inverted Signal Field Projector (8 of 8)
+# Skill: Signal Suppression
+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",
+ "scanResolutionBonus", container.getModifiedItemAttr("scanSkillEwStrengthBonus") * level)
diff --git a/eos/effects/ewskilltargetpaintingstrengthbonus.py b/eos/effects/ewskilltargetpaintingstrengthbonus.py
new file mode 100755
index 000000000..4b667a088
--- /dev/null
+++ b/eos/effects/ewskilltargetpaintingstrengthbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Signature Focusing
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Target Painter",
+ "signatureRadiusBonus", skill.getModifiedItemAttr("scanSkillTargetPaintStrengthBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/ewskilltdcapneedbonusskilllevel.py b/eos/effects/ewskilltdcapneedbonusskilllevel.py
new file mode 100755
index 000000000..ec98761e7
--- /dev/null
+++ b/eos/effects/ewskilltdcapneedbonusskilllevel.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Zainou 'Gypsy' Weapon Disruption WD (6 of 6)
+# Skill: Weapon Disruption
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"),
+ "capacitorNeed", container.getModifiedItemAttr("capNeedBonus") * level)
diff --git a/eos/effects/ewskilltdfalloffbonus.py b/eos/effects/ewskilltdfalloffbonus.py
new file mode 100755
index 000000000..7f9506f9a
--- /dev/null
+++ b/eos/effects/ewskilltdfalloffbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# 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
diff --git a/eos/effects/ewskilltdmaxrangebonus.py b/eos/effects/ewskilltdmaxrangebonus.py
new file mode 100755
index 000000000..b4d6e47f8
--- /dev/null
+++ b/eos/effects/ewskilltdmaxrangebonus.py
@@ -0,0 +1,9 @@
+# Used by:
+# Modules named like: Particle Dispersion Projector (8 of 8)
+# Skill: Long Distance Jamming
+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",
+ "maxRange", container.getModifiedItemAttr("rangeSkillBonus") * level,
+ stackingPenalties = "skill" not in context)
diff --git a/eos/effects/ewskilltpcapneedbonusskilllevel.py b/eos/effects/ewskilltpcapneedbonusskilllevel.py
new file mode 100755
index 000000000..0ed38fa8e
--- /dev/null
+++ b/eos/effects/ewskilltpcapneedbonusskilllevel.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Zainou 'Gypsy' Target Painting TG (6 of 6)
+# Skill: Target Painting
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Target Painting"),
+ "capacitorNeed", container.getModifiedItemAttr("capNeedBonus") * level)
diff --git a/eos/effects/ewskilltpfalloffbonus.py b/eos/effects/ewskilltpfalloffbonus.py
new file mode 100755
index 000000000..d5bdacb89
--- /dev/null
+++ b/eos/effects/ewskilltpfalloffbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Frequency Modulation
+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
diff --git a/eos/effects/ewskilltpmaxrangebonus.py b/eos/effects/ewskilltpmaxrangebonus.py
new file mode 100755
index 000000000..0080ef9a3
--- /dev/null
+++ b/eos/effects/ewskilltpmaxrangebonus.py
@@ -0,0 +1,9 @@
+# Used by:
+# Modules named like: Particle Dispersion Projector (8 of 8)
+# Skill: Long Distance Jamming
+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 == "Target Painter",
+ "maxRange", container.getModifiedItemAttr("rangeSkillBonus") * level,
+ stackingPenalties = "skill" not in context)
diff --git a/eos/effects/ewskilltrackingdisruptionmaxrangebonus.py b/eos/effects/ewskilltrackingdisruptionmaxrangebonus.py
new file mode 100755
index 000000000..c60213c19
--- /dev/null
+++ b/eos/effects/ewskilltrackingdisruptionmaxrangebonus.py
@@ -0,0 +1,10 @@
+# Used by:
+# Modules named like: Tracking Diagnostic Subroutines (8 of 8)
+# Skill: Turret Destabilization
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ for attr in ("maxRangeBonus", "falloffBonus"):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Disruptor",
+ attr, container.getModifiedItemAttr("scanSkillEwStrengthBonus") * level,
+ stackingPenalties = "skill" not in context)
diff --git a/eos/effects/ewskilltrackingdisruptiontrackingspeedbonus.py b/eos/effects/ewskilltrackingdisruptiontrackingspeedbonus.py
new file mode 100755
index 000000000..8b282691d
--- /dev/null
+++ b/eos/effects/ewskilltrackingdisruptiontrackingspeedbonus.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules named like: Tracking Diagnostic Subroutines (8 of 8)
+# Skill: Turret 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",
+ "trackingSpeedBonus", container.getModifiedItemAttr("scanSkillEwStrengthBonus") * level)
diff --git a/eos/effects/ewtargetpaint.py b/eos/effects/ewtargetpaint.py
new file mode 100755
index 000000000..9c16f8a32
--- /dev/null
+++ b/eos/effects/ewtargetpaint.py
@@ -0,0 +1,8 @@
+# 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):
+ if "projected" in context:
+ fit.ship.boostItemAttr("signatureRadius", container.getModifiedItemAttr("signatureRadiusBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/ewtesteffectjam.py b/eos/effects/ewtesteffectjam.py
new file mode 100755
index 000000000..7c18b5682
--- /dev/null
+++ b/eos/effects/ewtesteffectjam.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules from group: ECM (44 of 44)
+# Drones named like: EC (3 of 3)
+type = "projected", "active"
+def handler(fit, container, context):
+ pass
diff --git a/eos/effects/explosivearmorcompensationhardeningbonusgrouparmorcoating.py b/eos/effects/explosivearmorcompensationhardeningbonusgrouparmorcoating.py
new file mode 100755
index 000000000..0463f1716
--- /dev/null
+++ b/eos/effects/explosivearmorcompensationhardeningbonusgrouparmorcoating.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Explosive Armor Compensation
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Coating",
+ "explosiveDamageResistanceBonus", skill.getModifiedItemAttr("hardeningBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/explosivearmorcompensationhardeningbonusgroupenergized.py b/eos/effects/explosivearmorcompensationhardeningbonusgroupenergized.py
new file mode 100755
index 000000000..87c117daa
--- /dev/null
+++ b/eos/effects/explosivearmorcompensationhardeningbonusgroupenergized.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Explosive Armor Compensation
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Plating Energized",
+ "explosiveDamageResistanceBonus", skill.getModifiedItemAttr("hardeningBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/explosiveshieldcompensationhardeningbonusgroupshieldamp.py b/eos/effects/explosiveshieldcompensationhardeningbonusgroupshieldamp.py
new file mode 100755
index 000000000..3ddc34ab1
--- /dev/null
+++ b/eos/effects/explosiveshieldcompensationhardeningbonusgroupshieldamp.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Explosive Shield Compensation
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Shield Amplifier",
+ "explosiveDamageResistanceBonus", skill.getModifiedItemAttr("hardeningBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/falloffbonuseffecthybrids.py b/eos/effects/falloffbonuseffecthybrids.py
new file mode 100755
index 000000000..52cb481e6
--- /dev/null
+++ b/eos/effects/falloffbonuseffecthybrids.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules named like: Hybrid Ambit Extension (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Hybrid Weapon",
+ "falloff", module.getModifiedItemAttr("falloffBonus"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/falloffbonuseffectlasers.py b/eos/effects/falloffbonuseffectlasers.py
new file mode 100755
index 000000000..e33d7a83c
--- /dev/null
+++ b/eos/effects/falloffbonuseffectlasers.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules named like: Energy Ambit Extension (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Weapon",
+ "falloff", module.getModifiedItemAttr("falloffBonus"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/falloffbonuseffectprojectiles.py b/eos/effects/falloffbonuseffectprojectiles.py
new file mode 100755
index 000000000..2eb9d6ed1
--- /dev/null
+++ b/eos/effects/falloffbonuseffectprojectiles.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules named like: Projectile Ambit Extension (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Projectile Weapon",
+ "falloff", module.getModifiedItemAttr("falloffBonus"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/federationsetbonus3.py b/eos/effects/federationsetbonus3.py
new file mode 100755
index 000000000..6241183b1
--- /dev/null
+++ b/eos/effects/federationsetbonus3.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Spur (6 of 12)
+type = "passive"
+runTime = "early"
+def handler(fit, implant, context):
+ fit.implants.filteredItemMultiply(lambda implant: "implantSetFederationNavy" in implant.itemModifiedAttributes and\
+ "scanMagnetometricStrengthPercent" in implant.itemModifiedAttributes,
+ "scanMagnetometricStrengthPercent", implant.getModifiedItemAttr("implantSetFederationNavy"))
\ No newline at end of file
diff --git a/eos/effects/federationsetlgbonus.py b/eos/effects/federationsetlgbonus.py
new file mode 100755
index 000000000..68be1e41c
--- /dev/null
+++ b/eos/effects/federationsetlgbonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Implants named like: Low grade Spur (6 of 6)
+type = "passive"
+runTime = "early"
+def handler(fit, item, context):
+ fit.implants.filteredItemMultiply(lambda implant: "scanMagnetometricStrengthModifier" in implant.itemModifiedAttributes,
+ "scanMagnetometricStrengthModifier", item.getModifiedItemAttr("implantSetLGFederationNavy"))
diff --git a/eos/effects/fightersdmgbonusskills.py b/eos/effects/fightersdmgbonusskills.py
new file mode 100755
index 000000000..9ffe1e221
--- /dev/null
+++ b/eos/effects/fightersdmgbonusskills.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Fighters
+type = "passive"
+def handler(fit, skill, context):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Fighters"),
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/flagshipmultirelayeffect.py b/eos/effects/flagshipmultirelayeffect.py
new file mode 100755
index 000000000..cfa832082
--- /dev/null
+++ b/eos/effects/flagshipmultirelayeffect.py
@@ -0,0 +1,10 @@
+# Used by:
+# Module: Command Processor I
+type = "passive"
+def handler(fit, module, context):
+ #Note: we increase maxGroupActive by two.
+ #If we only increased it by one, we'd get the number to stay equal
+ #As Comman Processors use one themselves too
+ fit.modules.filteredItemIncrease(lambda mod: mod.item.group.name == "Gang Coordinator" and \
+ "maxGroupActive" in mod.itemModifiedAttributes,
+ "maxGroupActive", 2)
\ No newline at end of file
diff --git a/eos/effects/freighteragilitybonusa1.py b/eos/effects/freighteragilitybonusa1.py
new file mode 100755
index 000000000..c30a913ee
--- /dev/null
+++ b/eos/effects/freighteragilitybonusa1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Ark
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Freighter").level
+ fit.ship.boostItemAttr("agility", ship.getModifiedItemAttr("freighterBonusA1") * level)
diff --git a/eos/effects/freighteragilitybonusc1.py b/eos/effects/freighteragilitybonusc1.py
new file mode 100755
index 000000000..71d11c65c
--- /dev/null
+++ b/eos/effects/freighteragilitybonusc1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Rhea
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Freighter").level
+ fit.ship.boostItemAttr("agility", ship.getModifiedItemAttr("freighterBonusC1") * level)
diff --git a/eos/effects/freighteragilitybonusg1.py b/eos/effects/freighteragilitybonusg1.py
new file mode 100755
index 000000000..a9659b6f9
--- /dev/null
+++ b/eos/effects/freighteragilitybonusg1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Anshar
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Freighter").level
+ fit.ship.boostItemAttr("agility", ship.getModifiedItemAttr("freighterBonusG1") * level)
diff --git a/eos/effects/freighteragilitybonusm1.py b/eos/effects/freighteragilitybonusm1.py
new file mode 100755
index 000000000..63820323b
--- /dev/null
+++ b/eos/effects/freighteragilitybonusm1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Nomad
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Freighter").level
+ fit.ship.boostItemAttr("agility", ship.getModifiedItemAttr("freighterBonusM1") * level)
diff --git a/eos/effects/freightercargobonusa2.py b/eos/effects/freightercargobonusa2.py
new file mode 100755
index 000000000..f661ea0f5
--- /dev/null
+++ b/eos/effects/freightercargobonusa2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Variations of ship: Providence (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Freighter").level
+ fit.ship.boostItemAttr("capacity", ship.getModifiedItemAttr("freighterBonusA2") * level)
diff --git a/eos/effects/freightercargobonusc2.py b/eos/effects/freightercargobonusc2.py
new file mode 100755
index 000000000..5dc82e2a2
--- /dev/null
+++ b/eos/effects/freightercargobonusc2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Variations of ship: Charon (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Freighter").level
+ fit.ship.boostItemAttr("capacity", ship.getModifiedItemAttr("freighterBonusC2") * level)
diff --git a/eos/effects/freightercargobonusg2.py b/eos/effects/freightercargobonusg2.py
new file mode 100755
index 000000000..d7d03f7fc
--- /dev/null
+++ b/eos/effects/freightercargobonusg2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Variations of ship: Obelisk (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Freighter").level
+ fit.ship.boostItemAttr("capacity", ship.getModifiedItemAttr("freighterBonusG2") * level)
diff --git a/eos/effects/freightercargobonusm2.py b/eos/effects/freightercargobonusm2.py
new file mode 100755
index 000000000..93c1af0ed
--- /dev/null
+++ b/eos/effects/freightercargobonusm2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Variations of ship: Fenrir (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Freighter").level
+ fit.ship.boostItemAttr("capacity", ship.getModifiedItemAttr("freighterBonusM2") * level)
diff --git a/eos/effects/freightermaxvelocitybonusa1.py b/eos/effects/freightermaxvelocitybonusa1.py
new file mode 100755
index 000000000..20e71ba18
--- /dev/null
+++ b/eos/effects/freightermaxvelocitybonusa1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Providence
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Freighter").level
+ fit.ship.boostItemAttr("maxVelocity", ship.getModifiedItemAttr("freighterBonusA1") * level)
diff --git a/eos/effects/freightermaxvelocitybonusc1.py b/eos/effects/freightermaxvelocitybonusc1.py
new file mode 100755
index 000000000..1fd3cdab3
--- /dev/null
+++ b/eos/effects/freightermaxvelocitybonusc1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Charon
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Freighter").level
+ fit.ship.boostItemAttr("maxVelocity", ship.getModifiedItemAttr("freighterBonusC1") * level)
diff --git a/eos/effects/freightermaxvelocitybonusg1.py b/eos/effects/freightermaxvelocitybonusg1.py
new file mode 100755
index 000000000..d48fda094
--- /dev/null
+++ b/eos/effects/freightermaxvelocitybonusg1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Obelisk
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Freighter").level
+ fit.ship.boostItemAttr("maxVelocity", ship.getModifiedItemAttr("freighterBonusG1") * level)
diff --git a/eos/effects/freightermaxvelocitybonusm1.py b/eos/effects/freightermaxvelocitybonusm1.py
new file mode 100755
index 000000000..7d75c915d
--- /dev/null
+++ b/eos/effects/freightermaxvelocitybonusm1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Fenrir
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Freighter").level
+ fit.ship.boostItemAttr("maxVelocity", ship.getModifiedItemAttr("freighterBonusM1") * level)
diff --git a/eos/effects/fuelconservationcapneedbonuspostpercentcapacitorneedlocationshipmodulesrequiringafterburner.py b/eos/effects/fuelconservationcapneedbonuspostpercentcapacitorneedlocationshipmodulesrequiringafterburner.py
new file mode 100755
index 000000000..28152de7a
--- /dev/null
+++ b/eos/effects/fuelconservationcapneedbonuspostpercentcapacitorneedlocationshipmodulesrequiringafterburner.py
@@ -0,0 +1,7 @@
+# Used by:
+# Skill: Afterburner
+# Skill: Fuel Conservation
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Afterburner"),
+ "capacitorNeed", skill.getModifiedItemAttr("capNeedBonus") * skill.level)
diff --git a/eos/effects/fueledarmorrepair.py b/eos/effects/fueledarmorrepair.py
new file mode 100755
index 000000000..a1ace6ec6
--- /dev/null
+++ b/eos/effects/fueledarmorrepair.py
@@ -0,0 +1,11 @@
+# Used by:
+# Modules from group: Fueled Armor Repairer (3 of 3)
+runTime = "late"
+type = "active"
+def handler(fit, module, context):
+ if module.charge and module.charge.name == "Nanite Repair Paste":
+ module.multiplyItemAttr("armorDamageAmount", 3)
+
+ amount = module.getModifiedItemAttr("armorDamageAmount")
+ speed = module.getModifiedItemAttr("duration") / 1000.0
+ fit.extraAttributes.increase("armorRepair", amount / speed)
diff --git a/eos/effects/fueledshieldboosting.py b/eos/effects/fueledshieldboosting.py
new file mode 100755
index 000000000..80d78ad53
--- /dev/null
+++ b/eos/effects/fueledshieldboosting.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules from group: Fueled Shield Booster (4 of 4)
+runTime = "late"
+type = "active"
+def handler(fit, module, context):
+ amount = module.getModifiedItemAttr("shieldBonus")
+ speed = module.getModifiedItemAttr("duration") / 1000.0
+ fit.extraAttributes.increase("shieldRepair", amount / speed)
diff --git a/eos/effects/gangabmwdfactorboost.py b/eos/effects/gangabmwdfactorboost.py
new file mode 100755
index 000000000..192309667
--- /dev/null
+++ b/eos/effects/gangabmwdfactorboost.py
@@ -0,0 +1,9 @@
+# Used by:
+# Variations of module: Skirmish Warfare Link - Rapid Deployment I (2 of 2)
+type = "gang", "active"
+gangBoost = "speedFactor"
+def handler(fit, module, context):
+ if "gang" not in context: return
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Propulsion Module",
+ "speedFactor", module.getModifiedItemAttr("commandBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/gangarmorhardening.py b/eos/effects/gangarmorhardening.py
new file mode 100755
index 000000000..86e2f4bbc
--- /dev/null
+++ b/eos/effects/gangarmorhardening.py
@@ -0,0 +1,10 @@
+# Used by:
+# Variations of module: Armored Warfare Link - Passive Defense I (2 of 2)
+type = "gang", "active"
+gangBoost = "armorResistance"
+def handler(fit, module, context):
+ if "gang" not in context: return
+ for damageType in ("Em", "Thermal", "Explosive", "Kinetic"):
+ fit.ship.boostItemAttr("armor%sDamageResonance" % damageType,
+ module.getModifiedItemAttr("commandBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/gangarmorrepaircapreducerselfandprojected.py b/eos/effects/gangarmorrepaircapreducerselfandprojected.py
new file mode 100755
index 000000000..5fa40b8e9
--- /dev/null
+++ b/eos/effects/gangarmorrepaircapreducerselfandprojected.py
@@ -0,0 +1,10 @@
+# Used by:
+# Variations of module: Armored Warfare Link - Damage Control I (2 of 2)
+type = "gang", "active"
+gangBoost = "armorRepairCapacitorNeed"
+def handler(fit, module, context):
+ if "gang" not in context: return
+ groups = ("Armor Repair Unit", "Armor Repair Projector")
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
+ "capacitorNeed", module.getModifiedItemAttr("commandBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/gangarmorrepairspeedamplifierselfandprojected.py b/eos/effects/gangarmorrepairspeedamplifierselfandprojected.py
new file mode 100755
index 000000000..61b1687c5
--- /dev/null
+++ b/eos/effects/gangarmorrepairspeedamplifierselfandprojected.py
@@ -0,0 +1,10 @@
+# Used by:
+# Variations of module: Armored Warfare Link - Rapid Repair I (2 of 2)
+type = "gang", "active"
+gangBoost = "armorRepairDuration"
+def handler(fit, module, context):
+ if "gang" not in context: return
+ groups = ("Armor Repair Unit", "Armor Repair Projector")
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
+ "duration", module.getModifiedItemAttr("commandBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/gangbonussignature.py b/eos/effects/gangbonussignature.py
new file mode 100755
index 000000000..cdd276424
--- /dev/null
+++ b/eos/effects/gangbonussignature.py
@@ -0,0 +1,8 @@
+# Used by:
+# Variations of module: Skirmish Warfare Link - Evasive Maneuvers I (2 of 2)
+type = "gang", "active"
+gangBoost = "signatureRadius"
+def handler(fit, module, context):
+ if "gang" not in context: return
+ fit.ship.boostItemAttr("signatureRadius", module.getModifiedItemAttr("commandBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/gangeccmfixed.py b/eos/effects/gangeccmfixed.py
new file mode 100755
index 000000000..c1d3fdf86
--- /dev/null
+++ b/eos/effects/gangeccmfixed.py
@@ -0,0 +1,10 @@
+# Used by:
+# Variations of module: Information Warfare Link - Sensor Integrity I (2 of 2)
+type = "gang", "active"
+gangBoost = "scanTypeStrength"
+def handler(fit, module, context):
+ if "gang" not in context: return
+ for scanType in ("Gravimetric", "Radar", "Ladar", "Magnetometric"):
+ fit.ship.boostItemAttr("scan%sStrength" % scanType,
+ module.getModifiedItemAttr("commandBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/ganggasharvesterandiceharvesterandmininglasercapneedbonus.py b/eos/effects/ganggasharvesterandiceharvesterandmininglasercapneedbonus.py
new file mode 100755
index 000000000..ba4128dc2
--- /dev/null
+++ b/eos/effects/ganggasharvesterandiceharvesterandmininglasercapneedbonus.py
@@ -0,0 +1,11 @@
+# Used by:
+# Variations of module: Mining Foreman Link - Harvester Capacitor Efficiency I (2 of 2)
+type = "gang", "active"
+gangBoost = "miningCapacitorNeed"
+def handler(fit, module, context):
+ if "gang" not in context: return
+ groups = ("Mining Laser", "Strip Miner", "Frequency Mining Laser",
+ "Ice Harvester", "Gas Cloud Harvester")
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
+ "capacitorNeed", module.getModifiedItemAttr("commandBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/ganggasharvesterandiceharvesterandmininglaserdurationbonus.py b/eos/effects/ganggasharvesterandiceharvesterandmininglaserdurationbonus.py
new file mode 100755
index 000000000..c1fffc80c
--- /dev/null
+++ b/eos/effects/ganggasharvesterandiceharvesterandmininglaserdurationbonus.py
@@ -0,0 +1,11 @@
+# Used by:
+# Variations of module: Mining Foreman Link - Laser Optimization I (2 of 2)
+type = "gang", "active"
+gangBoost = "miningDuration"
+def handler(fit, module, context):
+ if "gang" not in context: return
+ groups = ("Mining Laser", "Strip Miner", "Frequency Mining Laser",
+ "Ice Harvester", "Gas Cloud Harvester")
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
+ "duration", module.getModifiedItemAttr("commandBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/ganginformationwarfarerangebonuswithecmburst.py b/eos/effects/ganginformationwarfarerangebonuswithecmburst.py
new file mode 100755
index 000000000..5f3192c74
--- /dev/null
+++ b/eos/effects/ganginformationwarfarerangebonuswithecmburst.py
@@ -0,0 +1,10 @@
+# Used by:
+# Variations of module: Information Warfare Link - Recon Operation I (2 of 2)
+type = "gang", "active"
+gangBoost = "electronicMaxRange"
+def handler(fit, module, context):
+ if "gang" not in context: return
+ groups = ("Target Painter", "Tracking Disruptor", "Remote Sensor Damper", "ECM", "ECM Burst")
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
+ "maxRange", module.getModifiedItemAttr("commandBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/ganginformationwarfaresuperiority.py b/eos/effects/ganginformationwarfaresuperiority.py
new file mode 100755
index 000000000..cbf5b3b4a
--- /dev/null
+++ b/eos/effects/ganginformationwarfaresuperiority.py
@@ -0,0 +1,8 @@
+# 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"))
+ module.multiplyItemAttr("commandBonusRSD", module.getModifiedItemAttr("commandBonusHidden"))
+ module.multiplyItemAttr("commandBonusTP", module.getModifiedItemAttr("commandBonusHidden"))
diff --git a/eos/effects/gangmininglaserandiceharvesterandgascloudharvestermaxrangebonus.py b/eos/effects/gangmininglaserandiceharvesterandgascloudharvestermaxrangebonus.py
new file mode 100755
index 000000000..89a4ff27b
--- /dev/null
+++ b/eos/effects/gangmininglaserandiceharvesterandgascloudharvestermaxrangebonus.py
@@ -0,0 +1,11 @@
+# Used by:
+# Variations of module: Mining Foreman Link - Mining Laser Field Enhancement I (2 of 2)
+type = "gang", "active"
+gangBoost = "miningMaxRange"
+def handler(fit, module, context):
+ if "gang" not in context: return
+ groups = ("Mining Laser", "Strip Miner", "Frequency Mining Laser",
+ "Ice Harvester", "Gas Cloud Harvester")
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
+ "maxRange", module.getModifiedItemAttr("commandBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/gangpropulsionjammingboost.py b/eos/effects/gangpropulsionjammingboost.py
new file mode 100755
index 000000000..1a2451a64
--- /dev/null
+++ b/eos/effects/gangpropulsionjammingboost.py
@@ -0,0 +1,10 @@
+# Used by:
+# Variations of module: Skirmish Warfare Link - Interdiction Maneuvers I (2 of 2)
+type = "gang", "active"
+gangBoost = "interdictionMaxRange"
+def handler(fit, module, context):
+ if "gang" not in context: return
+ 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/gangshieldboosteandtransportercapacitorneed.py b/eos/effects/gangshieldboosteandtransportercapacitorneed.py
new file mode 100755
index 000000000..ad73218bc
--- /dev/null
+++ b/eos/effects/gangshieldboosteandtransportercapacitorneed.py
@@ -0,0 +1,9 @@
+# Used by:
+# Variations of module: Siege Warfare Link - Shield Efficiency I (2 of 2)
+type = "gang", "active"
+gangBoost = "shieldRepairCapacitorNeed"
+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"),
+ "capacitorNeed", module.getModifiedItemAttr("commandBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/gangshieldboosterandtransporterspeed.py b/eos/effects/gangshieldboosterandtransporterspeed.py
new file mode 100755
index 000000000..01fae5dba
--- /dev/null
+++ b/eos/effects/gangshieldboosterandtransporterspeed.py
@@ -0,0 +1,9 @@
+# Used by:
+# Variations of module: Siege Warfare Link - Active Shielding I (2 of 2)
+type = "gang", "active"
+gangBoost = "shieldRepairDuration"
+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"),
+ "duration", module.getModifiedItemAttr("commandBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/gangshieldhardening.py b/eos/effects/gangshieldhardening.py
new file mode 100755
index 000000000..3d7460d79
--- /dev/null
+++ b/eos/effects/gangshieldhardening.py
@@ -0,0 +1,10 @@
+# Used by:
+# Variations of module: Siege Warfare Link - Shield Harmonizing I (2 of 2)
+type = "gang", "active"
+gangBoost = "shieldResistance"
+def handler(fit, module, context):
+ if "gang" not in context: return
+ for damageType in ("Em", "Explosive", "Thermal", "Kinetic"):
+ fit.ship.boostItemAttr("shield%sDamageResonance" % damageType,
+ module.getModifiedItemAttr("commandBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/gascloudharvestingmaxgroupskilllevel.py b/eos/effects/gascloudharvestingmaxgroupskilllevel.py
new file mode 100755
index 000000000..f0dc61143
--- /dev/null
+++ b/eos/effects/gascloudharvestingmaxgroupskilllevel.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Gas Cloud Harvesting
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemIncrease(lambda mod: mod.item.group.name == "Gas Cloud Harvester",
+ "maxGroupActive", skill.level)
\ No newline at end of file
diff --git a/eos/effects/gasharvestermaxrangebonus.py b/eos/effects/gasharvestermaxrangebonus.py
new file mode 100755
index 000000000..439b141ac
--- /dev/null
+++ b/eos/effects/gasharvestermaxrangebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Low grade Harvest (5 of 6)
+type = "passive"
+def handler(fit, implant, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Gas Cloud Harvester",
+ "maxRange", implant.getModifiedItemAttr("maxRangeBonus"))
\ No newline at end of file
diff --git a/eos/effects/gasharvestingcycletimemodulesrequiringgascloudharvesting.py b/eos/effects/gasharvestingcycletimemodulesrequiringgascloudharvesting.py
new file mode 100755
index 000000000..1366c1aab
--- /dev/null
+++ b/eos/effects/gasharvestingcycletimemodulesrequiringgascloudharvesting.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Eifyr and Co. 'Alchemist' Gas Harvesting GH (3 of 3)
+type = "passive"
+def handler(fit, implant, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gas Cloud Harvesting"),
+ "duration", implant.getModifiedItemAttr("durationBonus"))
\ No newline at end of file
diff --git a/eos/effects/gchyieldmultiplypassive.py b/eos/effects/gchyieldmultiplypassive.py
new file mode 100755
index 000000000..d4d3d6082
--- /dev/null
+++ b/eos/effects/gchyieldmultiplypassive.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Venture
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill("Gas Cloud Harvesting"),
+ "miningAmount", module.getModifiedItemAttr("miningAmountMultiplier"))
\ No newline at end of file
diff --git a/eos/effects/gunneryfalloffbonusonline.py b/eos/effects/gunneryfalloffbonusonline.py
new file mode 100755
index 000000000..2cc6df86c
--- /dev/null
+++ b/eos/effects/gunneryfalloffbonusonline.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules from group: Tracking Enhancer (17 of 17)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
+ "falloff", module.getModifiedItemAttr("falloffBonus"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/gunnerymaxrangebonusonline.py b/eos/effects/gunnerymaxrangebonusonline.py
new file mode 100755
index 000000000..f34da0fe7
--- /dev/null
+++ b/eos/effects/gunnerymaxrangebonusonline.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules from group: Tracking Enhancer (17 of 17)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
+ "maxRange", module.getModifiedItemAttr("maxRangeBonus"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/gunnerymaxrangefallofftrackingspeedbonus.py b/eos/effects/gunnerymaxrangefallofftrackingspeedbonus.py
new file mode 100755
index 000000000..8a1914720
--- /dev/null
+++ b/eos/effects/gunnerymaxrangefallofftrackingspeedbonus.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules from group: Tracking Computer (14 of 14)
+type = "active"
+def handler(fit, module, context):
+ for attr in ("maxRange", "falloff", "trackingSpeed"):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
+ attr, module.getModifiedItemAttr("%sBonus" % attr),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/gunnerytrackingspeedbonusonline.py b/eos/effects/gunnerytrackingspeedbonusonline.py
new file mode 100755
index 000000000..6caf2d6da
--- /dev/null
+++ b/eos/effects/gunnerytrackingspeedbonusonline.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules from group: Tracking Enhancer (17 of 17)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
+ "trackingSpeed", module.getModifiedItemAttr("trackingSpeedBonus"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/gunneryturretspeebonuspostpercentspeedlocationshipmodulesrequiringgunnery.py b/eos/effects/gunneryturretspeebonuspostpercentspeedlocationshipmodulesrequiringgunnery.py
new file mode 100755
index 000000000..703599837
--- /dev/null
+++ b/eos/effects/gunneryturretspeebonuspostpercentspeedlocationshipmodulesrequiringgunnery.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implants named like: Inherent Implants 'Lancer' Gunnery RF (6 of 6)
+# Implant: Pashan's Turret Customization Mindlink
+# Skill: Gunnery
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
+ "speed", container.getModifiedItemAttr("turretSpeeBonus") * level)
diff --git a/eos/effects/hackingskillvirusbonus.py b/eos/effects/hackingskillvirusbonus.py
new file mode 100644
index 000000000..089a1365c
--- /dev/null
+++ b/eos/effects/hackingskillvirusbonus.py
@@ -0,0 +1,9 @@
+# Used by:
+# Modules named like: Memetic Algorithm Bank (8 of 8)
+# Implant: Poteque 'Prospector' Hacking HC-905
+# Skill: Hacking
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill("Hacking"),
+ "virusCoherence", container.getModifiedItemAttr("virusCoherenceBonus") * level)
diff --git a/eos/effects/hardpointmodifiereffect.py b/eos/effects/hardpointmodifiereffect.py
new file mode 100755
index 000000000..23f1822da
--- /dev/null
+++ b/eos/effects/hardpointmodifiereffect.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystems from group: Engineering Systems (16 of 16)
+# Subsystems from group: Offensive Systems (16 of 16)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.increaseItemAttr("turretSlotsLeft", module.getModifiedItemAttr("turretHardPointModifier"))
+ fit.ship.increaseItemAttr("launcherSlotsLeft", module.getModifiedItemAttr("launcherHardPointModifier"))
\ No newline at end of file
diff --git a/eos/effects/highspeedmanuveringcapacitorneedmultiplierpostpercentcapacitorneedlocationshipmodulesrequiringhighspeedmanuvering.py b/eos/effects/highspeedmanuveringcapacitorneedmultiplierpostpercentcapacitorneedlocationshipmodulesrequiringhighspeedmanuvering.py
new file mode 100755
index 000000000..e0abd7d54
--- /dev/null
+++ b/eos/effects/highspeedmanuveringcapacitorneedmultiplierpostpercentcapacitorneedlocationshipmodulesrequiringhighspeedmanuvering.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Eifyr and Co. 'Rogue' High Speed Maneuvering HS (6 of 6)
+# Skill: High Speed Maneuvering
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("High Speed Maneuvering"),
+ "capacitorNeed", container.getModifiedItemAttr("capacitorNeedMultiplier") * level)
diff --git a/eos/effects/hullupgradesarmorhpbonuspostpercenthplocationship.py b/eos/effects/hullupgradesarmorhpbonuspostpercenthplocationship.py
new file mode 100755
index 000000000..a8acdf1e1
--- /dev/null
+++ b/eos/effects/hullupgradesarmorhpbonuspostpercenthplocationship.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implants named like: Slave (10 of 12)
+# Modules named like: Trimark Armor Pump (8 of 8)
+# Implant: Low-grade Snake Epsilon
+# Skill: Hull Upgrades
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.ship.boostItemAttr("armorHP", (container.getModifiedItemAttr("armorHpBonus") or 0) * level)
diff --git a/eos/effects/hybridweapondamagemultiply.py b/eos/effects/hybridweapondamagemultiply.py
new file mode 100755
index 000000000..94c7c826d
--- /dev/null
+++ b/eos/effects/hybridweapondamagemultiply.py
@@ -0,0 +1,9 @@
+# Used by:
+# Modules from group: Magnetic Field Stabilizer (19 of 19)
+# Modules named like: QA Multiship Module Players (4 of 4)
+# Module: QA Damage Module
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Hybrid Weapon",
+ "damageMultiplier", module.getModifiedItemAttr("damageMultiplier"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/hybridweapondamagemultiplypassive.py b/eos/effects/hybridweapondamagemultiplypassive.py
new file mode 100755
index 000000000..24b985b85
--- /dev/null
+++ b/eos/effects/hybridweapondamagemultiplypassive.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules named like: Hybrid Collision Accelerator (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Hybrid Weapon",
+ "damageMultiplier", module.getModifiedItemAttr("damageMultiplier"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/hybridweaponspeedmultiply.py b/eos/effects/hybridweaponspeedmultiply.py
new file mode 100755
index 000000000..bafda0d01
--- /dev/null
+++ b/eos/effects/hybridweaponspeedmultiply.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules from group: Magnetic Field Stabilizer (19 of 19)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Hybrid Weapon",
+ "speed", module.getModifiedItemAttr("speedMultiplier"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/hybridweaponspeedmultiplypassive.py b/eos/effects/hybridweaponspeedmultiplypassive.py
new file mode 100755
index 000000000..db053f183
--- /dev/null
+++ b/eos/effects/hybridweaponspeedmultiplypassive.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules named like: Hybrid Burst Aerator (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Hybrid Weapon",
+ "speed", module.getModifiedItemAttr("speedMultiplier"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/iceharvestcycletimemodulesrequiringiceharvesting.py b/eos/effects/iceharvestcycletimemodulesrequiringiceharvesting.py
new file mode 100755
index 000000000..709b0c5a2
--- /dev/null
+++ b/eos/effects/iceharvestcycletimemodulesrequiringiceharvesting.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implants named like: Inherent Implants 'Yeti' Ice Harvesting IH (3 of 3)
+# Module: Medium Ice Harvester Accelerator I
+# Skill: Ice Harvesting
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Ice Harvesting"),
+ "duration", container.getModifiedItemAttr("iceHarvestCycleBonus") * level)
diff --git a/eos/effects/iceharvestcycletimemodulesrequiringiceharvestingonline.py b/eos/effects/iceharvestcycletimemodulesrequiringiceharvestingonline.py
new file mode 100755
index 000000000..d1f854348
--- /dev/null
+++ b/eos/effects/iceharvestcycletimemodulesrequiringiceharvestingonline.py
@@ -0,0 +1,6 @@
+# Used by:
+# Variations of module: Ice Harvester Upgrade I (6 of 6)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Ice Harvesting"),
+ "duration", module.getModifiedItemAttr("iceHarvestCycleBonus"))
\ No newline at end of file
diff --git a/eos/effects/iceharvestercapacitorneedmultiplier.py b/eos/effects/iceharvestercapacitorneedmultiplier.py
new file mode 100755
index 000000000..4c329e3c6
--- /dev/null
+++ b/eos/effects/iceharvestercapacitorneedmultiplier.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Procurer (2 of 2)
+# Variations of ship: Retriever (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill("Ice Harvesting"),
+ "capacitorNeed", ship.getModifiedItemAttr("iceHarvestCycleBonus"))
diff --git a/eos/effects/iceharvesterdurationmultiplier.py b/eos/effects/iceharvesterdurationmultiplier.py
new file mode 100755
index 000000000..f5b8d8bd7
--- /dev/null
+++ b/eos/effects/iceharvesterdurationmultiplier.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Procurer (2 of 2)
+# Variations of ship: Retriever (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill("Ice Harvesting"),
+ "duration", ship.getModifiedItemAttr("iceHarvestCycleBonus"))
diff --git a/eos/effects/iceminercpuusagepercent.py b/eos/effects/iceminercpuusagepercent.py
new file mode 100755
index 000000000..d14332269
--- /dev/null
+++ b/eos/effects/iceminercpuusagepercent.py
@@ -0,0 +1,6 @@
+# Used by:
+# Variations of module: Ice Harvester Upgrade I (6 of 6)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Ice Harvesting"),
+ "cpu", module.getModifiedItemAttr("cpuPenaltyPercent"))
\ No newline at end of file
diff --git a/eos/effects/imperialsetbonus3.py b/eos/effects/imperialsetbonus3.py
new file mode 100755
index 000000000..f27ffc9c3
--- /dev/null
+++ b/eos/effects/imperialsetbonus3.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Grail (6 of 12)
+type = "passive"
+runTime = "early"
+def handler(fit, implant, context):
+ fit.implants.filteredItemMultiply(lambda implant: "scanRadarStrengthPercent" in implant.itemModifiedAttributes and\
+ "implantSetImperialNavy" in implant.itemModifiedAttributes,
+ "scanRadarStrengthPercent", implant.getModifiedItemAttr("implantSetImperialNavy"))
diff --git a/eos/effects/imperialsetlgbonus.py b/eos/effects/imperialsetlgbonus.py
new file mode 100755
index 000000000..700be86b4
--- /dev/null
+++ b/eos/effects/imperialsetlgbonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Implants named like: Low grade Grail (6 of 6)
+type = "passive"
+runTime = "early"
+def handler(fit, item, context):
+ fit.implants.filteredItemMultiply(lambda implant: "scanRadarStrengthModifier" in implant.itemModifiedAttributes,
+ "scanRadarStrengthModifier", item.getModifiedItemAttr("implantSetLGImperialNavy"))
diff --git a/eos/effects/implantarmorhpbonus2.py b/eos/effects/implantarmorhpbonus2.py
new file mode 100755
index 000000000..860622208
--- /dev/null
+++ b/eos/effects/implantarmorhpbonus2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Implants named like: Inherent Implants 'Noble' Hull Upgrades HG (7 of 7)
+# Implant: Imperial Navy Modified 'Noble' Implant
+# Implant: Imperial Special Ops Field Enhancer - Standard
+type = "passive"
+def handler(fit, implant, context):
+ fit.ship.boostItemAttr("armorHP", implant.getModifiedItemAttr("armorHpBonus2"))
\ No newline at end of file
diff --git a/eos/effects/implanthardwiringabcapacitorneed.py b/eos/effects/implanthardwiringabcapacitorneed.py
new file mode 100755
index 000000000..40e2548d4
--- /dev/null
+++ b/eos/effects/implanthardwiringabcapacitorneed.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Eifyr and Co. 'Rogue' Fuel Conservation FC (6 of 6)
+type = "passive"
+def handler(fit, implant, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Afterburner"),
+ "capacitorNeed", implant.getModifiedItemAttr("capNeedBonus"))
diff --git a/eos/effects/implantvelocitybonus.py b/eos/effects/implantvelocitybonus.py
new file mode 100755
index 000000000..b5b8c0c95
--- /dev/null
+++ b/eos/effects/implantvelocitybonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Eifyr and Co. 'Rogue' Navigation NN (6 of 6)
+# Implant: Shaqil's Speed Enhancer
+type = "passive"
+def handler(fit, implant, context):
+ fit.ship.boostItemAttr("maxVelocity", implant.getModifiedItemAttr("implantBonusVelocity"))
\ No newline at end of file
diff --git a/eos/effects/implantvelocitybonus2.py b/eos/effects/implantvelocitybonus2.py
new file mode 100755
index 000000000..7bd37ecb7
--- /dev/null
+++ b/eos/effects/implantvelocitybonus2.py
@@ -0,0 +1,5 @@
+# Used by:
+# Implant: Republic Special Ops Field Enhancer - Gamma
+type = "passive"
+def handler(fit, implant, context):
+ fit.ship.boostItemAttr("maxVelocity", implant.getModifiedItemAttr("velocityBonus2"))
\ No newline at end of file
diff --git a/eos/effects/increasesignatureradiusonline.py b/eos/effects/increasesignatureradiusonline.py
new file mode 100755
index 000000000..fc57c023e
--- /dev/null
+++ b/eos/effects/increasesignatureradiusonline.py
@@ -0,0 +1,5 @@
+# Used by:
+# Modules from group: Inertia Stabilizer (12 of 12)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.boostItemAttr("signatureRadius", module.getModifiedItemAttr("signatureRadiusBonus"))
\ No newline at end of file
diff --git a/eos/effects/industrialcoreeffect2.py b/eos/effects/industrialcoreeffect2.py
new file mode 100755
index 000000000..dc0d26f27
--- /dev/null
+++ b/eos/effects/industrialcoreeffect2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Module: Industrial Core I
+type = "active"
+runTime = "early"
+def handler(fit, module, context):
+ fit.extraAttributes["siege"] = True
+ fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("speedFactor"))
+ fit.ship.multiplyItemAttr("mass", module.getModifiedItemAttr("massMultiplier"))
diff --git a/eos/effects/informationwarfaremindlinkhidden.py b/eos/effects/informationwarfaremindlinkhidden.py
new file mode 100755
index 000000000..e7d000886
--- /dev/null
+++ b/eos/effects/informationwarfaremindlinkhidden.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implant: Information Warfare Mindlink
+type = "passive"
+def handler(fit, implant, context):
+ fit.character.getSkill("Information Warfare").suppress()
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Warfare Specialist"),
+ "commandBonus", implant.getModifiedItemAttr("mindlinkBonus"))
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Warfare Specialist"),
+ "commandBonusHidden", implant.getModifiedItemAttr("mindlinkBonus"))
diff --git a/eos/effects/interceptor2hybridtracking.py b/eos/effects/interceptor2hybridtracking.py
new file mode 100755
index 000000000..015b4d1f5
--- /dev/null
+++ b/eos/effects/interceptor2hybridtracking.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Taranis
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Interceptors").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Hybrid Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("eliteBonusInterceptor2") * level)
\ No newline at end of file
diff --git a/eos/effects/interceptor2lasertracking.py b/eos/effects/interceptor2lasertracking.py
new file mode 100755
index 000000000..44a7ca392
--- /dev/null
+++ b/eos/effects/interceptor2lasertracking.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Crusader
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Interceptors").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("eliteBonusInterceptor2") * level)
\ No newline at end of file
diff --git a/eos/effects/interceptor2missilevelocity.py b/eos/effects/interceptor2missilevelocity.py
new file mode 100755
index 000000000..abede36d1
--- /dev/null
+++ b/eos/effects/interceptor2missilevelocity.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Crow
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Interceptors").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "maxVelocity", ship.getModifiedItemAttr("eliteBonusInterceptor2") * level)
diff --git a/eos/effects/interceptor2projectiletracking.py b/eos/effects/interceptor2projectiletracking.py
new file mode 100755
index 000000000..afa4cb7e7
--- /dev/null
+++ b/eos/effects/interceptor2projectiletracking.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Claw
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Interceptors").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Projectile Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("eliteBonusInterceptor2") * level)
\ No newline at end of file
diff --git a/eos/effects/interceptor2warpscramblerange.py b/eos/effects/interceptor2warpscramblerange.py
new file mode 100755
index 000000000..d4da3b926
--- /dev/null
+++ b/eos/effects/interceptor2warpscramblerange.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ships from group: Interceptor (4 of 8)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Interceptors").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Warp Scrambler",
+ "maxRange", ship.getModifiedItemAttr("eliteBonusInterceptor2") * level)
\ No newline at end of file
diff --git a/eos/effects/interceptormwdsignatureradiusbonus.py b/eos/effects/interceptormwdsignatureradiusbonus.py
new file mode 100755
index 000000000..a0d98074f
--- /dev/null
+++ b/eos/effects/interceptormwdsignatureradiusbonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ships from group: Interceptor (8 of 8)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Interceptors").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("High Speed Maneuvering"),
+ "signatureRadiusBonus", ship.getModifiedItemAttr("eliteBonusInterceptor") * level)
diff --git a/eos/effects/jumpdriveskillscapacitorneedbonus.py b/eos/effects/jumpdriveskillscapacitorneedbonus.py
new file mode 100755
index 000000000..117e3e9a2
--- /dev/null
+++ b/eos/effects/jumpdriveskillscapacitorneedbonus.py
@@ -0,0 +1,5 @@
+# Used by:
+# Skill: Jump Drive Operation
+type = "passive"
+def handler(fit, skill, context):
+ fit.ship.boostItemAttr("jumpDriveCapacitorNeed", skill.getModifiedItemAttr("jumpDriveCapacitorNeedBonus") * skill.level)
diff --git a/eos/effects/jumpdriveskillsrangebonus.py b/eos/effects/jumpdriveskillsrangebonus.py
new file mode 100755
index 000000000..ad2f510ac
--- /dev/null
+++ b/eos/effects/jumpdriveskillsrangebonus.py
@@ -0,0 +1,5 @@
+# Used by:
+# Skill: Jump Drive Calibration
+type = "passive"
+def handler(fit, skill, context):
+ fit.ship.boostItemAttr("jumpDriveRange", skill.getModifiedItemAttr("jumpDriveRangeBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/jumpportalconsumptionbonuspercentskill.py b/eos/effects/jumpportalconsumptionbonuspercentskill.py
new file mode 100755
index 000000000..272d0a25d
--- /dev/null
+++ b/eos/effects/jumpportalconsumptionbonuspercentskill.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Jump Portal Generation
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill(skill), "consumptionQuantity",
+ skill.getModifiedItemAttr("consumptionQuantityBonusPercent") * skill.level)
diff --git a/eos/effects/kineticarmorcompensationhardeningbonusgrouparmorcoating.py b/eos/effects/kineticarmorcompensationhardeningbonusgrouparmorcoating.py
new file mode 100755
index 000000000..8be496f43
--- /dev/null
+++ b/eos/effects/kineticarmorcompensationhardeningbonusgrouparmorcoating.py
@@ -0,0 +1,7 @@
+# Used by:
+# Skill: Kinetic Armor Compensation
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Coating",
+ "kineticDamageResistanceBonus",
+ skill.getModifiedItemAttr("hardeningBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/kineticarmorcompensationhardeningbonusgroupenergized.py b/eos/effects/kineticarmorcompensationhardeningbonusgroupenergized.py
new file mode 100755
index 000000000..356a9c831
--- /dev/null
+++ b/eos/effects/kineticarmorcompensationhardeningbonusgroupenergized.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Kinetic Armor Compensation
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Plating Energized",
+ "kineticDamageResistanceBonus", skill.getModifiedItemAttr("hardeningBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/kineticshieldcompensationhardeningbonusgroupshieldamp.py b/eos/effects/kineticshieldcompensationhardeningbonusgroupshieldamp.py
new file mode 100755
index 000000000..feea2bbff
--- /dev/null
+++ b/eos/effects/kineticshieldcompensationhardeningbonusgroupshieldamp.py
@@ -0,0 +1,7 @@
+# Used by:
+# Skill: Kinetic Shield Compensation
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Shield Amplifier",
+ "kineticDamageResistanceBonus",
+ skill.getModifiedItemAttr("hardeningBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/largeenergyturretdamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringlargeenergyturret.py b/eos/effects/largeenergyturretdamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringlargeenergyturret.py
new file mode 100755
index 000000000..ed35f830d
--- /dev/null
+++ b/eos/effects/largeenergyturretdamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringlargeenergyturret.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implants named like: Inherent Implants 'Lancer' Large Energy Turret LE (6 of 6)
+# Implant: Pashan's Turret Handling Mindlink
+# Skill: Large Energy Turret
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Energy Turret"),
+ "damageMultiplier", container.getModifiedItemAttr("damageMultiplierBonus") * level)
diff --git a/eos/effects/largehybridturretdamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringlargehybridturret.py b/eos/effects/largehybridturretdamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringlargehybridturret.py
new file mode 100755
index 000000000..91f1fff03
--- /dev/null
+++ b/eos/effects/largehybridturretdamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringlargehybridturret.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Zainou 'Deadeye' Large Hybrid Turret LH (6 of 6)
+# Skill: Large Hybrid Turret
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Hybrid Turret"),
+ "damageMultiplier", container.getModifiedItemAttr("damageMultiplierBonus") * level)
diff --git a/eos/effects/largeprojectileturretdamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringlargeprojectileturret.py b/eos/effects/largeprojectileturretdamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringlargeprojectileturret.py
new file mode 100755
index 000000000..5e9bad6d7
--- /dev/null
+++ b/eos/effects/largeprojectileturretdamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringlargeprojectileturret.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Eifyr and Co. 'Gunslinger' Large Projectile Turret LP (6 of 6)
+# Skill: Large Projectile Turret
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Projectile Turret"),
+ "damageMultiplier", container.getModifiedItemAttr("damageMultiplierBonus") * level)
diff --git a/eos/effects/leadershipeffect.py b/eos/effects/leadershipeffect.py
new file mode 100755
index 000000000..a089e76e0
--- /dev/null
+++ b/eos/effects/leadershipeffect.py
@@ -0,0 +1,7 @@
+# Used by:
+# Skill: Leadership
+type = "gang"
+gangBoost = "scanResolution"
+gangBonus = "scanResolutionBonus"
+def handler(fit, skill, context):
+ fit.ship.boostItemAttr(gangBoost, skill.getModifiedItemAttr(gangBonus) * skill.level)
diff --git a/eos/effects/leech.py b/eos/effects/leech.py
new file mode 100755
index 000000000..8b89938b4
--- /dev/null
+++ b/eos/effects/leech.py
@@ -0,0 +1,11 @@
+# Used by:
+# Modules from group: Energy Vampire (52 of 52)
+type = "active", "projected"
+runTime = "late"
+def handler(fit, module, context):
+ amount = module.getModifiedItemAttr("powerTransferAmount")
+ time = module.getModifiedItemAttr("duration")
+ if "projected" in context:
+ fit.addDrain(time, amount, 0)
+ elif "module" in context:
+ module.itemModifiedAttributes.force("capacitorNeed", -amount)
diff --git a/eos/effects/longrangetargetingmaxtargetrangebonuspostpercentmaxtargetrangelocationshipgroupelectronic.py b/eos/effects/longrangetargetingmaxtargetrangebonuspostpercentmaxtargetrangelocationshipgroupelectronic.py
new file mode 100755
index 000000000..fde20a4cf
--- /dev/null
+++ b/eos/effects/longrangetargetingmaxtargetrangebonuspostpercentmaxtargetrangelocationshipgroupelectronic.py
@@ -0,0 +1,7 @@
+# Used by:
+# Implants named like: Zainou 'Gypsy' Long Range Targeting LT (6 of 6)
+# Skill: Long Range Targeting
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.ship.boostItemAttr("maxTargetRange", container.getModifiedItemAttr("maxTargetRangeBonus") * level)
diff --git a/eos/effects/massaddpassive.py b/eos/effects/massaddpassive.py
new file mode 100755
index 000000000..a5bfa83c4
--- /dev/null
+++ b/eos/effects/massaddpassive.py
@@ -0,0 +1,5 @@
+# Used by:
+# Items from category: Subsystem (80 of 80)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.increaseItemAttr("mass", module.getModifiedItemAttr("mass") or 0)
diff --git a/eos/effects/maxrangebonuseffecthybrids.py b/eos/effects/maxrangebonuseffecthybrids.py
new file mode 100755
index 000000000..144b66e99
--- /dev/null
+++ b/eos/effects/maxrangebonuseffecthybrids.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules named like: Hybrid Locus Coordinator (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Hybrid Weapon",
+ "maxRange", module.getModifiedItemAttr("maxRangeBonus"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/maxrangebonuseffectlasers.py b/eos/effects/maxrangebonuseffectlasers.py
new file mode 100755
index 000000000..02e061b79
--- /dev/null
+++ b/eos/effects/maxrangebonuseffectlasers.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules named like: Energy Locus Coordinator (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Weapon",
+ "maxRange", module.getModifiedItemAttr("maxRangeBonus"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/maxrangebonuseffectprojectiles.py b/eos/effects/maxrangebonuseffectprojectiles.py
new file mode 100755
index 000000000..0e892c769
--- /dev/null
+++ b/eos/effects/maxrangebonuseffectprojectiles.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules named like: Projectile Locus Coordinator (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Projectile Weapon",
+ "maxRange", module.getModifiedItemAttr("maxRangeBonus"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/maxtargetingrangebonuspostpercentpassive.py b/eos/effects/maxtargetingrangebonuspostpercentpassive.py
new file mode 100755
index 000000000..25efcfe16
--- /dev/null
+++ b/eos/effects/maxtargetingrangebonuspostpercentpassive.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules named like: Ionic Field Projector (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.boostItemAttr("maxTargetRange", module.getModifiedItemAttr("maxTargetRangeBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/maxtargetrangeaddpassive.py b/eos/effects/maxtargetrangeaddpassive.py
new file mode 100755
index 000000000..171eb37b4
--- /dev/null
+++ b/eos/effects/maxtargetrangeaddpassive.py
@@ -0,0 +1,5 @@
+# Used by:
+# Subsystems from group: Electronic Systems (16 of 16)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.increaseItemAttr("maxTargetRange", module.getModifiedItemAttr("maxTargetRange"))
\ No newline at end of file
diff --git a/eos/effects/maxtargetrangebonus.py b/eos/effects/maxtargetrangebonus.py
new file mode 100755
index 000000000..63940753d
--- /dev/null
+++ b/eos/effects/maxtargetrangebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules from group: Warp Core Stabilizer (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.boostItemAttr("maxTargetRange", module.getModifiedItemAttr("maxTargetRangeBonus"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/maxvelocityaddpassive.py b/eos/effects/maxvelocityaddpassive.py
new file mode 100755
index 000000000..0ccb30965
--- /dev/null
+++ b/eos/effects/maxvelocityaddpassive.py
@@ -0,0 +1,5 @@
+# Used by:
+# Subsystems from group: Propulsion Systems (16 of 16)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.increaseItemAttr("maxVelocity", module.getModifiedItemAttr("maxVelocity"))
\ No newline at end of file
diff --git a/eos/effects/mechanichullhpbonuspostpercenthpship.py b/eos/effects/mechanichullhpbonuspostpercenthpship.py
new file mode 100755
index 000000000..3c5210609
--- /dev/null
+++ b/eos/effects/mechanichullhpbonuspostpercenthpship.py
@@ -0,0 +1,7 @@
+# Used by:
+# Implants named like: Inherent Implants 'Noble' Mechanic MC (6 of 6)
+# Skill: Mechanics
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.ship.boostItemAttr("hp", container.getModifiedItemAttr("hullHpBonus") * level)
diff --git a/eos/effects/mediumenergyturretdamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringmediumenergyturret.py b/eos/effects/mediumenergyturretdamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringmediumenergyturret.py
new file mode 100755
index 000000000..bdcf0a681
--- /dev/null
+++ b/eos/effects/mediumenergyturretdamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringmediumenergyturret.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Inherent Implants 'Lancer' Medium Energy Turret ME (6 of 6)
+# Skill: Medium Energy Turret
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Energy Turret"),
+ "damageMultiplier", container.getModifiedItemAttr("damageMultiplierBonus") * level)
diff --git a/eos/effects/mediumhybridturretdamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringmediumhybridturret.py b/eos/effects/mediumhybridturretdamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringmediumhybridturret.py
new file mode 100755
index 000000000..50e502488
--- /dev/null
+++ b/eos/effects/mediumhybridturretdamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringmediumhybridturret.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Zainou 'Deadeye' Medium Hybrid Turret MH (6 of 6)
+# Skill: Medium Hybrid Turret
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
+ "damageMultiplier", container.getModifiedItemAttr("damageMultiplierBonus") * level)
diff --git a/eos/effects/mediumprojectileturretdamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringmediumprojectileturret.py b/eos/effects/mediumprojectileturretdamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringmediumprojectileturret.py
new file mode 100755
index 000000000..2547de21a
--- /dev/null
+++ b/eos/effects/mediumprojectileturretdamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringmediumprojectileturret.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Eifyr and Co. 'Gunslinger' Medium Projectile Turret MP (6 of 6)
+# Skill: Medium Projectile Turret
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
+ "damageMultiplier", container.getModifiedItemAttr("damageMultiplierBonus") * level)
diff --git a/eos/effects/mercoxitcrystalbonus.py b/eos/effects/mercoxitcrystalbonus.py
new file mode 100755
index 000000000..f9f74190b
--- /dev/null
+++ b/eos/effects/mercoxitcrystalbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Module: Medium Mercoxit Mining Crystal Optimization I
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Mercoxit Processing"),
+ "specialisationAsteroidYieldMultiplier", module.getModifiedItemAttr("miningAmountBonus"))
diff --git a/eos/effects/microjumpdrive.py b/eos/effects/microjumpdrive.py
new file mode 100755
index 000000000..643ddcd42
--- /dev/null
+++ b/eos/effects/microjumpdrive.py
@@ -0,0 +1,5 @@
+# Used by:
+# Module: Large Micro Jump Drive
+type = "active"
+def handler(fit, module, context):
+ fit.ship.boostItemAttr("signatureRadius", module.getModifiedItemAttr("signatureRadiusBonusPercent"))
\ No newline at end of file
diff --git a/eos/effects/minercpuusagemultiplypercent2.py b/eos/effects/minercpuusagemultiplypercent2.py
new file mode 100755
index 000000000..c307e920c
--- /dev/null
+++ b/eos/effects/minercpuusagemultiplypercent2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Variations of module: Mining Laser Upgrade I (6 of 6)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining"),
+ "cpu", module.getModifiedItemAttr("cpuPenaltyPercent"))
\ No newline at end of file
diff --git a/eos/effects/minigamevirusstrengthbonus.py b/eos/effects/minigamevirusstrengthbonus.py
new file mode 100644
index 000000000..2a3cd9557
--- /dev/null
+++ b/eos/effects/minigamevirusstrengthbonus.py
@@ -0,0 +1,14 @@
+# Used by:
+# Ships from group: Covert Ops (4 of 4)
+# Subsystems named like: Electronics Emergent Locus Analyzer (4 of 4)
+# Variations of ship: Heron (3 of 3)
+# Variations of ship: Imicus (3 of 3)
+# Variations of ship: Magnate (4 of 6)
+# Variations of ship: Probe (3 of 3)
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill("Hacking"),
+ "virusStrength", container.getModifiedItemAttr("virusStrengthBonus") * level)
+ fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill("Archaeology"),
+ "virusStrength", container.getModifiedItemAttr("virusStrengthBonus") * level)
diff --git a/eos/effects/miningclouds.py b/eos/effects/miningclouds.py
new file mode 100755
index 000000000..8bf7b726c
--- /dev/null
+++ b/eos/effects/miningclouds.py
@@ -0,0 +1,5 @@
+# Used by:
+# Modules from group: Gas Cloud Harvester (5 of 5)
+type = "active"
+def handler(fit, module, context):
+ pass
diff --git a/eos/effects/miningdirectorbonuscommandbonuseffective.py b/eos/effects/miningdirectorbonuscommandbonuseffective.py
new file mode 100755
index 000000000..0c1b8062d
--- /dev/null
+++ b/eos/effects/miningdirectorbonuscommandbonuseffective.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Rorqual
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Director"),
+ "commandBonus", ship.getModifiedItemAttr("commandBonusEffective"))
diff --git a/eos/effects/miningdroneoperationminingamountbonuspostpercentminingdroneamountpercentchar.py b/eos/effects/miningdroneoperationminingamountbonuspostpercentminingdroneamountpercentchar.py
new file mode 100755
index 000000000..43b38e4b5
--- /dev/null
+++ b/eos/effects/miningdroneoperationminingamountbonuspostpercentminingdroneamountpercentchar.py
@@ -0,0 +1,10 @@
+# Used by:
+# Modules named like: Drone Mining Augmentor (8 of 8)
+# Skill: Drone Interfacing
+# Skill: Mining Drone Operation
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.drones.filteredItemBoost(lambda drone: drone.item.group.name == "Mining Drone",
+ "miningAmount", container.getModifiedItemAttr("miningAmountBonus") * level,
+ stackingPenalties = "skill" not in context)
diff --git a/eos/effects/miningforemanmindlink.py b/eos/effects/miningforemanmindlink.py
new file mode 100755
index 000000000..c017dfaff
--- /dev/null
+++ b/eos/effects/miningforemanmindlink.py
@@ -0,0 +1,7 @@
+# Used by:
+# Implant: Mining Foreman Mindlink
+type = "passive"
+def handler(fit, implant, context):
+ fit.character.getSkill("Mining Foreman").suppress()
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Director"),
+ "commandBonus", implant.getModifiedItemAttr("mindlinkBonus"))
\ No newline at end of file
diff --git a/eos/effects/mininginfomultiplier.py b/eos/effects/mininginfomultiplier.py
new file mode 100755
index 000000000..db55f82a9
--- /dev/null
+++ b/eos/effects/mininginfomultiplier.py
@@ -0,0 +1,6 @@
+# Used by:
+# Charges from group: Mining Crystal (30 of 30)
+# Charges named like: Mining Crystal (32 of 32)
+type = "passive"
+def handler(fit, module, context):
+ module.multiplyItemAttr("miningAmount", module.getModifiedChargeAttr("specialisationAsteroidYieldMultiplier"))
\ No newline at end of file
diff --git a/eos/effects/mininglaser.py b/eos/effects/mininglaser.py
new file mode 100755
index 000000000..11d9188eb
--- /dev/null
+++ b/eos/effects/mininglaser.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules from group: Frequency Mining Laser (3 of 3)
+# Modules from group: Mining Laser (17 of 17)
+# Modules from group: Strip Miner (5 of 5)
+type = 'active'
+def handler(fit, module, context):
+ # Set reload time to 1 second
+ module.reloadTime = 1000
diff --git a/eos/effects/mininglaserrangebonus.py b/eos/effects/mininglaserrangebonus.py
new file mode 100755
index 000000000..fe57c1e87
--- /dev/null
+++ b/eos/effects/mininglaserrangebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Low grade Harvest (5 of 6)
+type = "passive"
+def handler(fit, implant, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Mining Laser",
+ "maxRange", implant.getModifiedItemAttr("maxRangeBonus"))
\ No newline at end of file
diff --git a/eos/effects/miningupgradecpupenaltyreductionmodulesrequiringminingupgradepercent.py b/eos/effects/miningupgradecpupenaltyreductionmodulesrequiringminingupgradepercent.py
new file mode 100755
index 000000000..4b3516c53
--- /dev/null
+++ b/eos/effects/miningupgradecpupenaltyreductionmodulesrequiringminingupgradepercent.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Inherent Implants 'Highwall' Mining Upgrades MU (3 of 3)
+# Skill: Mining Upgrades
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Upgrades"),
+ "cpuPenaltyPercent", container.getModifiedItemAttr("miningUpgradeCPUReductionBonus") * level)
diff --git a/eos/effects/miningyieldgangbonusfixed.py b/eos/effects/miningyieldgangbonusfixed.py
new file mode 100755
index 000000000..6b0d0e753
--- /dev/null
+++ b/eos/effects/miningyieldgangbonusfixed.py
@@ -0,0 +1,10 @@
+# Used by:
+# Implant: Mining Foreman Mindlink
+# Skill: Mining Foreman
+type = "gang"
+gangBoost = "miningAmount"
+gangBonus = "miningAmountBonus"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining"),
+ gangBoost, container.getModifiedItemAttr(gangBonus) * level)
diff --git a/eos/effects/miningyieldmultiplypassive.py b/eos/effects/miningyieldmultiplypassive.py
new file mode 100755
index 000000000..8860c3f4a
--- /dev/null
+++ b/eos/effects/miningyieldmultiplypassive.py
@@ -0,0 +1,8 @@
+# Used by:
+# Variations of ship: Procurer (2 of 2)
+# Variations of ship: Retriever (2 of 2)
+# Ship: Venture
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill("Mining"),
+ "miningAmount", module.getModifiedItemAttr("miningAmountMultiplier"))
\ No newline at end of file
diff --git a/eos/effects/miningyieldmultiplypercent.py b/eos/effects/miningyieldmultiplypercent.py
new file mode 100755
index 000000000..95c60b03f
--- /dev/null
+++ b/eos/effects/miningyieldmultiplypercent.py
@@ -0,0 +1,6 @@
+# Used by:
+# Variations of module: Mining Laser Upgrade I (6 of 6)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining"),
+ "miningAmount", module.getModifiedItemAttr("miningAmountBonus"))
\ No newline at end of file
diff --git a/eos/effects/minmatarshipewtargetpaintermc1.py b/eos/effects/minmatarshipewtargetpaintermc1.py
new file mode 100755
index 000000000..9a47cadd5
--- /dev/null
+++ b/eos/effects/minmatarshipewtargetpaintermc1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Bellicose
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Target Painter",
+ "signatureRadiusBonus", ship.getModifiedItemAttr("shipBonusMC") * level)
diff --git a/eos/effects/minmatarshipewtargetpaintermc2.py b/eos/effects/minmatarshipewtargetpaintermc2.py
new file mode 100755
index 000000000..f4e9e8dc5
--- /dev/null
+++ b/eos/effects/minmatarshipewtargetpaintermc2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Huginn
+# Ship: Rapier
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Target Painter",
+ "signatureRadiusBonus", ship.getModifiedItemAttr("shipBonusMC2") * level)
diff --git a/eos/effects/minmatarshipewtargetpaintermf2.py b/eos/effects/minmatarshipewtargetpaintermf2.py
new file mode 100755
index 000000000..b0ad04a32
--- /dev/null
+++ b/eos/effects/minmatarshipewtargetpaintermf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Vigil (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Target Painter",
+ "signatureRadiusBonus", ship.getModifiedItemAttr("shipBonusMF2") * level)
diff --git a/eos/effects/minmatarshipewtargetpainterrookie.py b/eos/effects/minmatarshipewtargetpainterrookie.py
new file mode 100755
index 000000000..b004b9647
--- /dev/null
+++ b/eos/effects/minmatarshipewtargetpainterrookie.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Reaper
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Target Painter",
+ "signatureRadiusBonus", ship.getModifiedItemAttr("rookieTargetPainterStrengthBonus"))
diff --git a/eos/effects/missilebombardmentmaxflighttimebonuspostpercentexplosiondelayownercharmodulesrequiringmissilelauncheroperation.py b/eos/effects/missilebombardmentmaxflighttimebonuspostpercentexplosiondelayownercharmodulesrequiringmissilelauncheroperation.py
new file mode 100755
index 000000000..985c3713b
--- /dev/null
+++ b/eos/effects/missilebombardmentmaxflighttimebonuspostpercentexplosiondelayownercharmodulesrequiringmissilelauncheroperation.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implants named like: Zainou 'Deadeye' Missile Bombardment MB (6 of 6)
+# Modules named like: Rocket Fuel Cache Partition (8 of 8)
+# Skill: Missile Bombardment
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "explosionDelay", container.getModifiedItemAttr("maxFlightTimeBonus") * level)
diff --git a/eos/effects/missiledmgbonus.py b/eos/effects/missiledmgbonus.py
new file mode 100755
index 000000000..2db4bed0f
--- /dev/null
+++ b/eos/effects/missiledmgbonus.py
@@ -0,0 +1,9 @@
+# Used by:
+# Modules from group: Ballistic Control system (21 of 21)
+# Modules named like: QA Multiship Module Players (4 of 4)
+type = "passive"
+def handler(fit, container, context):
+ for dmgType in ("em", "kinetic", "explosive", "thermal"):
+ fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "%sDamage" % dmgType, container.getModifiedItemAttr("missileDamageMultiplierBonus"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/missiledmgbonuspassive.py b/eos/effects/missiledmgbonuspassive.py
new file mode 100755
index 000000000..59bbf10c4
--- /dev/null
+++ b/eos/effects/missiledmgbonuspassive.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules named like: Warhead Calefaction Catalyst (8 of 8)
+type = "passive"
+def handler(fit, container, context):
+ for dmgType in ("em", "kinetic", "explosive", "thermal"):
+ fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "%sDamage" % dmgType, container.getModifiedItemAttr("missileDamageMultiplierBonus"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/missileemdmgbonus.py b/eos/effects/missileemdmgbonus.py
new file mode 100755
index 000000000..e9aacaa08
--- /dev/null
+++ b/eos/effects/missileemdmgbonus.py
@@ -0,0 +1,8 @@
+# Used by:
+# Skills named like: Missiles (5 of 7)
+# Skill: Rockets
+# Skill: Torpedoes
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill(skill),
+ "emDamage", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
diff --git a/eos/effects/missileemdmgbonuscruise3.py b/eos/effects/missileemdmgbonuscruise3.py
new file mode 100755
index 000000000..9ed540764
--- /dev/null
+++ b/eos/effects/missileemdmgbonuscruise3.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Zainou 'Snapshot' Cruise Missiles CM (6 of 6)
+type = "passive"
+def handler(fit, implant, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Cruise Missiles"),
+ "emDamage", implant.getModifiedItemAttr("damageMultiplierBonus"))
diff --git a/eos/effects/missileemdmgbonusham.py b/eos/effects/missileemdmgbonusham.py
new file mode 100755
index 000000000..c67b108aa
--- /dev/null
+++ b/eos/effects/missileemdmgbonusham.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Zainou 'Snapshot' Heavy Assault Missiles AM (6 of 6)
+type = "passive"
+def handler(fit, implant, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
+ "emDamage", implant.getModifiedItemAttr("damageMultiplierBonus"))
diff --git a/eos/effects/missileemdmgbonusheavy.py b/eos/effects/missileemdmgbonusheavy.py
new file mode 100755
index 000000000..408bfe595
--- /dev/null
+++ b/eos/effects/missileemdmgbonusheavy.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Zainou 'Snapshot' Heavy Missiles HM (6 of 6)
+type = "passive"
+def handler(fit, implant, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Missiles"),
+ "emDamage", implant.getModifiedItemAttr("damageMultiplierBonus"))
diff --git a/eos/effects/missileemdmgbonusrocket.py b/eos/effects/missileemdmgbonusrocket.py
new file mode 100755
index 000000000..5dadf0f18
--- /dev/null
+++ b/eos/effects/missileemdmgbonusrocket.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Zainou 'Snapshot' Rockets RD (6 of 6)
+type = "passive"
+def handler(fit, implant, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"),
+ "emDamage", implant.getModifiedItemAttr("damageMultiplierBonus"))
diff --git a/eos/effects/missileemdmgbonusstandard.py b/eos/effects/missileemdmgbonusstandard.py
new file mode 100755
index 000000000..428ef04da
--- /dev/null
+++ b/eos/effects/missileemdmgbonusstandard.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Zainou 'Snapshot' Light Missiles LM (6 of 6)
+type = "passive"
+def handler(fit, implant, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Light Missiles"),
+ "emDamage", implant.getModifiedItemAttr("damageMultiplierBonus"))
diff --git a/eos/effects/missileemdmgbonustorpedo.py b/eos/effects/missileemdmgbonustorpedo.py
new file mode 100755
index 000000000..f4aa779d8
--- /dev/null
+++ b/eos/effects/missileemdmgbonustorpedo.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Zainou 'Snapshot' Torpedoes TD (6 of 6)
+type = "passive"
+def handler(fit, implant, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Torpedoes"),
+ "emDamage", implant.getModifiedItemAttr("damageMultiplierBonus"))
diff --git a/eos/effects/missileexplosivedmgbonus.py b/eos/effects/missileexplosivedmgbonus.py
new file mode 100755
index 000000000..1c421fda7
--- /dev/null
+++ b/eos/effects/missileexplosivedmgbonus.py
@@ -0,0 +1,8 @@
+# Used by:
+# Skills named like: Missiles (5 of 7)
+# Skill: Rockets
+# Skill: Torpedoes
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill(skill),
+ "explosiveDamage", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
diff --git a/eos/effects/missileexplosivedmgbonuscruise3.py b/eos/effects/missileexplosivedmgbonuscruise3.py
new file mode 100755
index 000000000..852e865e2
--- /dev/null
+++ b/eos/effects/missileexplosivedmgbonuscruise3.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Zainou 'Snapshot' Cruise Missiles CM (6 of 6)
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Cruise Missiles"),
+ "explosiveDamage",container.getModifiedItemAttr("damageMultiplierBonus"))
diff --git a/eos/effects/missileexplosivedmgbonusham.py b/eos/effects/missileexplosivedmgbonusham.py
new file mode 100755
index 000000000..2f5aa2b72
--- /dev/null
+++ b/eos/effects/missileexplosivedmgbonusham.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Zainou 'Snapshot' Heavy Assault Missiles AM (6 of 6)
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
+ "explosiveDamage", container.getModifiedItemAttr("damageMultiplierBonus"))
diff --git a/eos/effects/missileexplosivedmgbonusheavy.py b/eos/effects/missileexplosivedmgbonusheavy.py
new file mode 100755
index 000000000..44da3a6b1
--- /dev/null
+++ b/eos/effects/missileexplosivedmgbonusheavy.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Zainou 'Snapshot' Heavy Missiles HM (6 of 6)
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Missiles"),
+ "explosiveDamage", container.getModifiedItemAttr("damageMultiplierBonus"))
diff --git a/eos/effects/missileexplosivedmgbonusrocket.py b/eos/effects/missileexplosivedmgbonusrocket.py
new file mode 100755
index 000000000..dc31dbda2
--- /dev/null
+++ b/eos/effects/missileexplosivedmgbonusrocket.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Zainou 'Snapshot' Rockets RD (6 of 6)
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"),
+ "explosiveDamage", container.getModifiedItemAttr("damageMultiplierBonus"))
diff --git a/eos/effects/missileexplosivedmgbonusstandard.py b/eos/effects/missileexplosivedmgbonusstandard.py
new file mode 100755
index 000000000..68e5b41be
--- /dev/null
+++ b/eos/effects/missileexplosivedmgbonusstandard.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Zainou 'Snapshot' Light Missiles LM (6 of 6)
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Light Missiles"),
+ "explosiveDamage", container.getModifiedItemAttr("damageMultiplierBonus"))
diff --git a/eos/effects/missileexplosivedmgbonustorpedo.py b/eos/effects/missileexplosivedmgbonustorpedo.py
new file mode 100755
index 000000000..2a6a68c5d
--- /dev/null
+++ b/eos/effects/missileexplosivedmgbonustorpedo.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Zainou 'Snapshot' Torpedoes TD (6 of 6)
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Torpedoes"),
+ "explosiveDamage", container.getModifiedItemAttr("damageMultiplierBonus"))
diff --git a/eos/effects/missilekineticdmgbonus2.py b/eos/effects/missilekineticdmgbonus2.py
new file mode 100755
index 000000000..b669a1c56
--- /dev/null
+++ b/eos/effects/missilekineticdmgbonus2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Skills named like: Missiles (5 of 7)
+# Skill: Rockets
+# Skill: Torpedoes
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill(skill),
+ "kineticDamage", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
diff --git a/eos/effects/missilekineticdmgbonuscruise3.py b/eos/effects/missilekineticdmgbonuscruise3.py
new file mode 100755
index 000000000..0c6585e12
--- /dev/null
+++ b/eos/effects/missilekineticdmgbonuscruise3.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Zainou 'Snapshot' Cruise Missiles CM (6 of 6)
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Cruise Missiles"),
+ "kineticDamage", container.getModifiedItemAttr("damageMultiplierBonus"))
diff --git a/eos/effects/missilekineticdmgbonusham.py b/eos/effects/missilekineticdmgbonusham.py
new file mode 100755
index 000000000..815173698
--- /dev/null
+++ b/eos/effects/missilekineticdmgbonusham.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Zainou 'Snapshot' Heavy Assault Missiles AM (6 of 6)
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
+ "kineticDamage", container.getModifiedItemAttr("damageMultiplierBonus"))
diff --git a/eos/effects/missilekineticdmgbonusheavy.py b/eos/effects/missilekineticdmgbonusheavy.py
new file mode 100755
index 000000000..27a7475d8
--- /dev/null
+++ b/eos/effects/missilekineticdmgbonusheavy.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Zainou 'Snapshot' Heavy Missiles HM (6 of 6)
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Missiles"),
+ "kineticDamage", container.getModifiedItemAttr("damageMultiplierBonus"))
diff --git a/eos/effects/missilekineticdmgbonusrocket.py b/eos/effects/missilekineticdmgbonusrocket.py
new file mode 100755
index 000000000..33053245a
--- /dev/null
+++ b/eos/effects/missilekineticdmgbonusrocket.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Zainou 'Snapshot' Rockets RD (6 of 6)
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"),
+ "kineticDamage", container.getModifiedItemAttr("damageMultiplierBonus"))
diff --git a/eos/effects/missilekineticdmgbonusstandard.py b/eos/effects/missilekineticdmgbonusstandard.py
new file mode 100755
index 000000000..168bf67f5
--- /dev/null
+++ b/eos/effects/missilekineticdmgbonusstandard.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Zainou 'Snapshot' Light Missiles LM (6 of 6)
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Light Missiles"),
+ "kineticDamage", container.getModifiedItemAttr("damageMultiplierBonus"))
diff --git a/eos/effects/missilekineticdmgbonustorpedo.py b/eos/effects/missilekineticdmgbonustorpedo.py
new file mode 100755
index 000000000..5301a2db6
--- /dev/null
+++ b/eos/effects/missilekineticdmgbonustorpedo.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Zainou 'Snapshot' Torpedoes TD (6 of 6)
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Torpedoes"),
+ "kineticDamage", container.getModifiedItemAttr("damageMultiplierBonus"))
diff --git a/eos/effects/missilelauncherspeedmultiplier.py b/eos/effects/missilelauncherspeedmultiplier.py
new file mode 100755
index 000000000..8aaaa72a0
--- /dev/null
+++ b/eos/effects/missilelauncherspeedmultiplier.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules from group: Ballistic Control system (21 of 21)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill("Missile Launcher Operation"),
+ "speed", module.getModifiedItemAttr("speedMultiplier"),
+ stackingPenalties = True)
diff --git a/eos/effects/missilelauncherspeedmultiplierpassive.py b/eos/effects/missilelauncherspeedmultiplierpassive.py
new file mode 100755
index 000000000..ec79a28d9
--- /dev/null
+++ b/eos/effects/missilelauncherspeedmultiplierpassive.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules named like: Bay Loading Accelerator (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill("Missile Launcher Operation"),
+ "speed", module.getModifiedItemAttr("speedMultiplier"),
+ stackingPenalties = True)
diff --git a/eos/effects/missileskillaoecloudsizebonus.py b/eos/effects/missileskillaoecloudsizebonus.py
new file mode 100755
index 000000000..2d96d0e60
--- /dev/null
+++ b/eos/effects/missileskillaoecloudsizebonus.py
@@ -0,0 +1,15 @@
+# Used by:
+# Implants named like: Zainou 'Deadeye' Guided Missile Precision GP (6 of 6)
+# Modules named like: Warhead Rigor Catalyst (8 of 8)
+# Skill: Guided Missile Precision
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Light Missiles") or \
+ mod.charge.requiresSkill("Rockets") or \
+ mod.charge.requiresSkill("Heavy Missiles") or \
+ mod.charge.requiresSkill("Heavy Assault Missiles") or \
+ mod.charge.requiresSkill("Cruise Missiles") or \
+ mod.charge.requiresSkill("Torpedoes"),
+ "aoeCloudSize", container.getModifiedItemAttr("aoeCloudSizeBonus") * level,
+ stackingPenalties = False)
diff --git a/eos/effects/missileskillaoecloudsizebonusallincludingcapitals.py b/eos/effects/missileskillaoecloudsizebonusallincludingcapitals.py
new file mode 100755
index 000000000..48e585b05
--- /dev/null
+++ b/eos/effects/missileskillaoecloudsizebonusallincludingcapitals.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Crash Booster (4 of 4)
+type = "passive"
+def handler(fit, implant, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Cruise Missiles") or mod.charge.requiresSkill("Citadel Torpedoes"),
+ "aoeCloudSize", implant.getModifiedItemAttr("aoeCloudSizeBonus"))
\ No newline at end of file
diff --git a/eos/effects/missileskillaoevelocitybonus.py b/eos/effects/missileskillaoevelocitybonus.py
new file mode 100755
index 000000000..2d2c598a5
--- /dev/null
+++ b/eos/effects/missileskillaoevelocitybonus.py
@@ -0,0 +1,10 @@
+# Used by:
+# Implants named like: Zainou 'Deadeye' Target Navigation Prediction TN (6 of 6)
+# Modules named like: Warhead Flare Catalyst (8 of 8)
+# Skill: Target Navigation Prediction
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "aoeVelocity", container.getModifiedItemAttr("aoeVelocityBonus") * level,
+ stackingPenalties = "skill" not in context and "implant" not in context)
diff --git a/eos/effects/missileskillfofaoecloudsizebonus.py b/eos/effects/missileskillfofaoecloudsizebonus.py
new file mode 100755
index 000000000..f0d1151d4
--- /dev/null
+++ b/eos/effects/missileskillfofaoecloudsizebonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Implants named like: Zainou 'Snapshot' FOF Explosion Radius FR (6 of 6)
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("FoF Missiles"),
+ "aoeCloudSize", container.getModifiedItemAttr("aoeCloudSizeBonus") * level)
diff --git a/eos/effects/missileskillmissileprojectilevelocitybonus.py b/eos/effects/missileskillmissileprojectilevelocitybonus.py
new file mode 100755
index 000000000..90bfef25d
--- /dev/null
+++ b/eos/effects/missileskillmissileprojectilevelocitybonus.py
@@ -0,0 +1,10 @@
+# Used by:
+# Implants named like: Zainou 'Deadeye' Missile Projection MP (6 of 6)
+# Modules named like: Hydraulic Bay Thrusters (8 of 8)
+# Skill: Missile Projection
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "maxVelocity", container.getModifiedItemAttr("speedFactor") * level,
+ stackingPenalties = "skill" not in context and "implant" not in context)
diff --git a/eos/effects/missileskillrapidlauncherrof.py b/eos/effects/missileskillrapidlauncherrof.py
new file mode 100755
index 000000000..d6d2111ce
--- /dev/null
+++ b/eos/effects/missileskillrapidlauncherrof.py
@@ -0,0 +1,11 @@
+# Used by:
+# Implants named like: Cerebral Accelerator (3 of 3)
+# Implants named like: Zainou 'Deadeye' Rapid Launch RL (6 of 6)
+# Implant: Whelan Machorin's Ballistic Smartlink
+# Skill: Missile Launcher Operation
+# Skill: Rapid Launch
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Missile Launcher Operation"),
+ "speed", container.getModifiedItemAttr("rofBonus") * level)
diff --git a/eos/effects/missileskillwarheadupgradesemdamagebonus.py b/eos/effects/missileskillwarheadupgradesemdamagebonus.py
new file mode 100755
index 000000000..a80d7da09
--- /dev/null
+++ b/eos/effects/missileskillwarheadupgradesemdamagebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Warhead Upgrades
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "emDamage", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/missileskillwarheadupgradesexplosivedamagebonus.py b/eos/effects/missileskillwarheadupgradesexplosivedamagebonus.py
new file mode 100755
index 000000000..3cba51172
--- /dev/null
+++ b/eos/effects/missileskillwarheadupgradesexplosivedamagebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Warhead Upgrades
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "explosiveDamage", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/missileskillwarheadupgradeskineticdamagebonus.py b/eos/effects/missileskillwarheadupgradeskineticdamagebonus.py
new file mode 100755
index 000000000..f3fafa2fd
--- /dev/null
+++ b/eos/effects/missileskillwarheadupgradeskineticdamagebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Warhead Upgrades
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "kineticDamage", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/missileskillwarheadupgradesthermaldamagebonus.py b/eos/effects/missileskillwarheadupgradesthermaldamagebonus.py
new file mode 100755
index 000000000..7d645da54
--- /dev/null
+++ b/eos/effects/missileskillwarheadupgradesthermaldamagebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Warhead Upgrades
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "thermalDamage", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/missilethermaldmgbonus.py b/eos/effects/missilethermaldmgbonus.py
new file mode 100755
index 000000000..dde01e669
--- /dev/null
+++ b/eos/effects/missilethermaldmgbonus.py
@@ -0,0 +1,8 @@
+# Used by:
+# Skills named like: Missiles (5 of 7)
+# Skill: Rockets
+# Skill: Torpedoes
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill(skill),
+ "thermalDamage", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
diff --git a/eos/effects/missilethermaldmgbonuscruise3.py b/eos/effects/missilethermaldmgbonuscruise3.py
new file mode 100755
index 000000000..d66ec5ecd
--- /dev/null
+++ b/eos/effects/missilethermaldmgbonuscruise3.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Zainou 'Snapshot' Cruise Missiles CM (6 of 6)
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Cruise Missiles"),
+ "thermalDamage", container.getModifiedItemAttr("damageMultiplierBonus"))
diff --git a/eos/effects/missilethermaldmgbonusham.py b/eos/effects/missilethermaldmgbonusham.py
new file mode 100755
index 000000000..d4edee79e
--- /dev/null
+++ b/eos/effects/missilethermaldmgbonusham.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Zainou 'Snapshot' Heavy Assault Missiles AM (6 of 6)
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
+ "thermalDamage", container.getModifiedItemAttr("damageMultiplierBonus"))
diff --git a/eos/effects/missilethermaldmgbonusheavy.py b/eos/effects/missilethermaldmgbonusheavy.py
new file mode 100755
index 000000000..11f74bee5
--- /dev/null
+++ b/eos/effects/missilethermaldmgbonusheavy.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Zainou 'Snapshot' Heavy Missiles HM (6 of 6)
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Missiles"),
+ "thermalDamage", container.getModifiedItemAttr("damageMultiplierBonus"))
diff --git a/eos/effects/missilethermaldmgbonusrocket.py b/eos/effects/missilethermaldmgbonusrocket.py
new file mode 100755
index 000000000..3abe8fe14
--- /dev/null
+++ b/eos/effects/missilethermaldmgbonusrocket.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Zainou 'Snapshot' Rockets RD (6 of 6)
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"),
+ "thermalDamage", container.getModifiedItemAttr("damageMultiplierBonus"))
diff --git a/eos/effects/missilethermaldmgbonusstandard.py b/eos/effects/missilethermaldmgbonusstandard.py
new file mode 100755
index 000000000..18ba9620d
--- /dev/null
+++ b/eos/effects/missilethermaldmgbonusstandard.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Zainou 'Snapshot' Light Missiles LM (6 of 6)
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Light Missiles"),
+ "thermalDamage", container.getModifiedItemAttr("damageMultiplierBonus"))
diff --git a/eos/effects/missilethermaldmgbonustorpedo.py b/eos/effects/missilethermaldmgbonustorpedo.py
new file mode 100755
index 000000000..ecb4c1ad8
--- /dev/null
+++ b/eos/effects/missilethermaldmgbonustorpedo.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Zainou 'Snapshot' Torpedoes TD (6 of 6)
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Torpedoes"),
+ "thermalDamage", container.getModifiedItemAttr("damageMultiplierBonus"))
diff --git a/eos/effects/missilevelocitybonusdefender.py b/eos/effects/missilevelocitybonusdefender.py
new file mode 100755
index 000000000..270e20566
--- /dev/null
+++ b/eos/effects/missilevelocitybonusdefender.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Zainou 'Snapshot' Defender Missiles DM (6 of 6)
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill("Defender Missiles"),
+ "maxVelocity", container.getModifiedItemAttr("missileVelocityBonus"))
\ No newline at end of file
diff --git a/eos/effects/modifyactivearmorresonancepostpercent.py b/eos/effects/modifyactivearmorresonancepostpercent.py
new file mode 100755
index 000000000..b18c9cec4
--- /dev/null
+++ b/eos/effects/modifyactivearmorresonancepostpercent.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules from group: Armor Hardener (156 of 156)
+type = "active"
+def handler(fit, module, context):
+ for damageType in ("kinetic", "thermal", "explosive", "em"):
+ fit.ship.boostItemAttr("armor%sDamageResonance" % damageType.capitalize(),
+ module.getModifiedItemAttr("%sDamageResistanceBonus" % damageType),
+ stackingPenalties = True)
diff --git a/eos/effects/modifyactiveshieldresonancepostpercent.py b/eos/effects/modifyactiveshieldresonancepostpercent.py
new file mode 100755
index 000000000..554acfb64
--- /dev/null
+++ b/eos/effects/modifyactiveshieldresonancepostpercent.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules from group: Shield Hardener (97 of 97)
+type = "active"
+def handler(fit, module, context):
+ for damageType in ("kinetic", "thermal", "explosive", "em"):
+ fit.ship.boostItemAttr("shield" + damageType.capitalize() + "DamageResonance",
+ module.getModifiedItemAttr(damageType + "DamageResistanceBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/modifyarmorresonancepassivepreassignment.py b/eos/effects/modifyarmorresonancepassivepreassignment.py
new file mode 100755
index 000000000..c24cfafb4
--- /dev/null
+++ b/eos/effects/modifyarmorresonancepassivepreassignment.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystems from group: Defensive Systems (16 of 16)
+type = "passive"
+def handler(fit, module, context):
+ for type in ("Em", "Explosive", "Kinetic", "Thermal"):
+ fit.ship.preAssignItemAttr("armor{0}DamageResonance".format(type), module.getModifiedItemAttr("passiveArmor{0}DamageResonance".format(type)))
diff --git a/eos/effects/modifyarmorresonancepostpercent.py b/eos/effects/modifyarmorresonancepostpercent.py
new file mode 100755
index 000000000..84eec2d78
--- /dev/null
+++ b/eos/effects/modifyarmorresonancepostpercent.py
@@ -0,0 +1,9 @@
+# Used by:
+# Modules from group: Armor Coating (202 of 202)
+# Modules from group: Armor Plating Energized (187 of 187)
+type = "passive"
+def handler(fit, module, context):
+ for type in ("kinetic", "thermal", "explosive", "em"):
+ fit.ship.boostItemAttr("armor%sDamageResonance" % type.capitalize(),
+ module.getModifiedItemAttr("%sDamageResistanceBonus" % type),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/modifyarmorresonancepostpercentpassive.py b/eos/effects/modifyarmorresonancepostpercentpassive.py
new file mode 100755
index 000000000..e3028ac6b
--- /dev/null
+++ b/eos/effects/modifyarmorresonancepostpercentpassive.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules named like: Anti Pump (32 of 32)
+type = "passive"
+def handler(fit, module, context):
+ for type in ("kinetic", "thermal", "explosive", "em"):
+ fit.ship.boostItemAttr("armor" + type.capitalize() + "DamageResonance",
+ module.getModifiedItemAttr(type + "DamageResistanceBonus") or 0,
+ stackingPenalties = True)
diff --git a/eos/effects/modifyboostereffectchancewithboosterchancebonuspostpercent.py b/eos/effects/modifyboostereffectchancewithboosterchancebonuspostpercent.py
new file mode 100755
index 000000000..aa604edc2
--- /dev/null
+++ b/eos/effects/modifyboostereffectchancewithboosterchancebonuspostpercent.py
@@ -0,0 +1,10 @@
+# Used by:
+# Implants named like: Eifyr and Co. 'Alchemist' Neurotoxin Recovery NR (2 of 2)
+# Skill: Neurotoxin Recovery
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ for i in xrange(5):
+ attr = "boosterEffectChance{0}".format(i+1)
+ fit.boosters.filteredItemBoost(lambda booster: attr in booster.itemModifiedAttributes,
+ attr, container.getModifiedItemAttr("boosterChanceBonus") * level)
diff --git a/eos/effects/modifymaxvelocityofshiponline.py b/eos/effects/modifymaxvelocityofshiponline.py
new file mode 100755
index 000000000..fe37798bd
--- /dev/null
+++ b/eos/effects/modifymaxvelocityofshiponline.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules from group: Reinforced Bulkhead (12 of 12)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.multiplyItemAttr("maxVelocity", module.getModifiedItemAttr("maxVelocityBonus"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/modifymaxvelocityofshippassive.py b/eos/effects/modifymaxvelocityofshippassive.py
new file mode 100755
index 000000000..22efc4088
--- /dev/null
+++ b/eos/effects/modifymaxvelocityofshippassive.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules from group: Expanded Cargohold (13 of 13)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.multiplyItemAttr("maxVelocity", module.getModifiedItemAttr("maxVelocityBonus"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/modifypowerrechargerate.py b/eos/effects/modifypowerrechargerate.py
new file mode 100755
index 000000000..6bd9f116e
--- /dev/null
+++ b/eos/effects/modifypowerrechargerate.py
@@ -0,0 +1,11 @@
+# Used by:
+# Modules from group: Capacitor Flux Coil (12 of 12)
+# Modules from group: Capacitor Power Relay (25 of 25)
+# Modules from group: Capacitor Recharger (25 of 25)
+# Modules from group: Power Diagnostic System (31 of 31)
+# Modules from group: Reactor Control Unit (28 of 28)
+# 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("rechargeRate", module.getModifiedItemAttr("capacitorRechargeRateMultiplier"))
\ No newline at end of file
diff --git a/eos/effects/modifyshieldrechargerate.py b/eos/effects/modifyshieldrechargerate.py
new file mode 100755
index 000000000..179149d35
--- /dev/null
+++ b/eos/effects/modifyshieldrechargerate.py
@@ -0,0 +1,12 @@
+# Used by:
+# Modules from group: Capacitor Flux Coil (12 of 12)
+# Modules from group: Capacitor Power Relay (25 of 25)
+# Modules from group: Power Diagnostic System (31 of 31)
+# Modules from group: Reactor Control Unit (28 of 28)
+# Modules from group: Shield Flux Coil (11 of 11)
+# Modules from group: Shield Power Relay (11 of 11)
+# Modules from group: Shield Recharger (6 of 6)
+# Modules named like: QA Multiship Module Players (4 of 4)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.multiplyItemAttr("shieldRechargeRate", module.getModifiedItemAttr("shieldRechargeRateMultiplier") or 1)
diff --git a/eos/effects/modifyshieldrechargeratepassive.py b/eos/effects/modifyshieldrechargeratepassive.py
new file mode 100644
index 000000000..61d95ae33
--- /dev/null
+++ b/eos/effects/modifyshieldrechargeratepassive.py
@@ -0,0 +1,5 @@
+# Used by:
+# Modules named like: Processor Overclocking Unit II (4 of 4)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.multiplyItemAttr("shieldRechargeRate", module.getModifiedItemAttr("shieldRechargeRateMultiplier"))
diff --git a/eos/effects/modifyshieldresonancepassivepreassignment.py b/eos/effects/modifyshieldresonancepassivepreassignment.py
new file mode 100755
index 000000000..b389a6a68
--- /dev/null
+++ b/eos/effects/modifyshieldresonancepassivepreassignment.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystems from group: Defensive Systems (16 of 16)
+type = "passive"
+def handler(fit, module, context):
+ for type in ("Em", "Explosive", "Kinetic", "Thermal"):
+ fit.ship.preAssignItemAttr("shield{0}DamageResonance".format(type), module.getModifiedItemAttr("passiveShield{0}DamageResonance".format(type)))
diff --git a/eos/effects/modifyshieldresonancepostpercent.py b/eos/effects/modifyshieldresonancepostpercent.py
new file mode 100755
index 000000000..fe536c8ff
--- /dev/null
+++ b/eos/effects/modifyshieldresonancepostpercent.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules from group: Shield Amplifier (88 of 88)
+type = "passive"
+def handler(fit, module, context):
+ for type in ("kinetic", "thermal", "explosive", "em"):
+ fit.ship.boostItemAttr("shield%sDamageResonance" % type.capitalize(),
+ module.getModifiedItemAttr("%sDamageResistanceBonus" % type),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/modifyshieldresonancepostpercentpassive.py b/eos/effects/modifyshieldresonancepostpercentpassive.py
new file mode 100755
index 000000000..1f9e53288
--- /dev/null
+++ b/eos/effects/modifyshieldresonancepostpercentpassive.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules named like: Anti Screen Reinforcer (32 of 32)
+type = "passive"
+def handler(fit, module, context):
+ for type in ("kinetic", "thermal", "explosive", "em"):
+ fit.ship.boostItemAttr("shield" + type.capitalize() + "DamageResonance",
+ module.getModifiedItemAttr(type + "DamageResistanceBonus") or 0,
+ stackingPenalties = True)
diff --git a/eos/effects/modifyshipagilitypassivepreassignment.py b/eos/effects/modifyshipagilitypassivepreassignment.py
new file mode 100755
index 000000000..7e58dbafe
--- /dev/null
+++ b/eos/effects/modifyshipagilitypassivepreassignment.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystems from group: Propulsion Systems (16 of 16)
+runTime = "early"
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.preAssignItemAttr("agility", module.getModifiedItemAttr("agility"))
diff --git a/eos/effects/mwdsignatureradiusrolebonus.py b/eos/effects/mwdsignatureradiusrolebonus.py
new file mode 100755
index 000000000..be5fffe44
--- /dev/null
+++ b/eos/effects/mwdsignatureradiusrolebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ships from group: Assault Frigate (8 of 12)
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("High Speed Maneuvering"),
+ "signatureRadiusBonus", ship.getModifiedItemAttr("MWDSignatureRadiusBonus"))
diff --git a/eos/effects/navigationvelocitybonuspostpercentmaxvelocitylocationship.py b/eos/effects/navigationvelocitybonuspostpercentmaxvelocitylocationship.py
new file mode 100755
index 000000000..0ce7e2d1f
--- /dev/null
+++ b/eos/effects/navigationvelocitybonuspostpercentmaxvelocitylocationship.py
@@ -0,0 +1,5 @@
+# Used by:
+# Implant: Low-grade Snake Alpha
+type = "passive"
+def handler(fit, implant, context):
+ fit.ship.boostItemAttr("maxVelocity", implant.getModifiedItemAttr("velocityBonus"))
\ No newline at end of file
diff --git a/eos/effects/navigationvelocitybonuspostpercentmaxvelocityship.py b/eos/effects/navigationvelocitybonuspostpercentmaxvelocityship.py
new file mode 100755
index 000000000..97ad7d562
--- /dev/null
+++ b/eos/effects/navigationvelocitybonuspostpercentmaxvelocityship.py
@@ -0,0 +1,11 @@
+# Used by:
+# Implants named like: Snake (11 of 12)
+# Modules named like: Auxiliary Thrusters (8 of 8)
+# Implant: Quafe Zero
+# Skill: Navigation
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ amount = container.getModifiedItemAttr("velocityBonus") or 0
+ fit.ship.boostItemAttr("maxVelocity", amount * level,
+ stackingPenalties = "skill" not in context and "implant" not in context and "booster" not in context)
diff --git a/eos/effects/neutattackreflect.py b/eos/effects/neutattackreflect.py
new file mode 100755
index 000000000..230e5353a
--- /dev/null
+++ b/eos/effects/neutattackreflect.py
@@ -0,0 +1,6 @@
+# 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
new file mode 100755
index 000000000..983aa5a81
--- /dev/null
+++ b/eos/effects/neutreflectamount.py
@@ -0,0 +1,5 @@
+# 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
new file mode 100755
index 000000000..d0d0bd4fa
--- /dev/null
+++ b/eos/effects/nosattackreflect.py
@@ -0,0 +1,6 @@
+# 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
new file mode 100755
index 000000000..3a7c12af0
--- /dev/null
+++ b/eos/effects/nosreflectamount.py
@@ -0,0 +1,5 @@
+# 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/offensivedefensivereduction.py b/eos/effects/offensivedefensivereduction.py
new file mode 100755
index 000000000..e4edf3a32
--- /dev/null
+++ b/eos/effects/offensivedefensivereduction.py
@@ -0,0 +1,25 @@
+# Used by:
+# Celestials named like: Incursion ship attributes effects (3 of 3)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ damages = ("em", "thermal", "kinetic", "explosive")
+ for damage in damages:
+ # Nerf missile damage
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "{0}Damage".format(damage), beacon.getModifiedItemAttr("systemEffectDamageReduction"))
+ # Nerf smartbomb damage
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Smart Bomb",
+ "{0}Damage".format(damage), beacon.getModifiedItemAttr("systemEffectDamageReduction"))
+ # Nerf armor resistances
+ fit.ship.boostItemAttr("armor{0}DamageResonance".format(damage.capitalize()),
+ beacon.getModifiedItemAttr("armor{0}DamageResistanceBonus".format(damage.capitalize())))
+ # Nerf shield resistances
+ fit.ship.boostItemAttr("shield{0}DamageResonance".format(damage.capitalize()),
+ beacon.getModifiedItemAttr("shield{0}DamageResistanceBonus".format(damage.capitalize())))
+ # Nerf drone damage output
+ fit.drones.filteredItemBoost(lambda drone: True,
+ "damageMultiplier", beacon.getModifiedItemAttr("systemEffectDamageReduction"))
+ # Nerf turret damage output
+ fit.modules.filteredItemBoost(lambda module: module.item.requiresSkill("Gunnery"),
+ "damageMultiplier", beacon.getModifiedItemAttr("systemEffectDamageReduction"))
diff --git a/eos/effects/openspawncontainer.py b/eos/effects/openspawncontainer.py
new file mode 100755
index 000000000..dc92eb636
--- /dev/null
+++ b/eos/effects/openspawncontainer.py
@@ -0,0 +1,5 @@
+# Used by:
+# Modules from group: Data Miners (13 of 14)
+type = "active"
+def handler(fit, module, context):
+ pass
\ No newline at end of file
diff --git a/eos/effects/orecapitalshipshieldtransferrange.py b/eos/effects/orecapitalshipshieldtransferrange.py
new file mode 100755
index 000000000..6b404b28e
--- /dev/null
+++ b/eos/effects/orecapitalshipshieldtransferrange.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Rorqual
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Capital Industrial Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"),
+ "shieldTransferRange", ship.getModifiedItemAttr("shipBonusORECapital3") * level)
diff --git a/eos/effects/overloadrofbonus.py b/eos/effects/overloadrofbonus.py
new file mode 100755
index 000000000..9aafdcb04
--- /dev/null
+++ b/eos/effects/overloadrofbonus.py
@@ -0,0 +1,11 @@
+# Used by:
+# Modules from group: Energy Weapon (100 of 183)
+# Modules from group: Hybrid Weapon (110 of 199)
+# Modules from group: Missile Launcher Citadel (4 of 4)
+# Modules from group: Missile Launcher Heavy (12 of 12)
+# Modules from group: Missile Launcher Rocket (14 of 14)
+# Modules from group: Projectile Weapon (60 of 143)
+# Modules named like: Launcher (103 of 117)
+type = "overheat"
+def handler(fit, module, context):
+ module.boostItemAttr("speed", module.getModifiedItemAttr("overloadRofBonus"))
diff --git a/eos/effects/overloadselfarmordamageamountdurationbonus.py b/eos/effects/overloadselfarmordamageamountdurationbonus.py
new file mode 100755
index 000000000..4e682d428
--- /dev/null
+++ b/eos/effects/overloadselfarmordamageamountdurationbonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules from group: Armor Repair Unit (100 of 100)
+# Modules from group: Fueled Armor Repairer (3 of 3)
+type = "overheat"
+def handler(fit, module, context):
+ module.boostItemAttr("duration", module.getModifiedItemAttr("overloadSelfDurationBonus"))
+ module.boostItemAttr("armorDamageAmount", module.getModifiedItemAttr("overloadArmorDamageAmount"))
\ No newline at end of file
diff --git a/eos/effects/overloadselfdamagebonus.py b/eos/effects/overloadselfdamagebonus.py
new file mode 100755
index 000000000..bf1ffc82a
--- /dev/null
+++ b/eos/effects/overloadselfdamagebonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules from group: Energy Weapon (83 of 183)
+# Modules from group: Hybrid Weapon (89 of 199)
+# Modules from group: Projectile Weapon (83 of 143)
+type = "overheat"
+def handler(fit, module, context):
+ module.boostItemAttr("damageMultiplier", module.getModifiedItemAttr("overloadDamageModifier"))
\ No newline at end of file
diff --git a/eos/effects/overloadselfdurationbonus.py b/eos/effects/overloadselfdurationbonus.py
new file mode 100755
index 000000000..b8a4b498f
--- /dev/null
+++ b/eos/effects/overloadselfdurationbonus.py
@@ -0,0 +1,14 @@
+# Used by:
+# Modules from group: Armor Repair Projector (38 of 38)
+# Modules from group: Capacitor Booster (54 of 54)
+# Modules from group: Energy Destabilizer (41 of 41)
+# Modules from group: Energy Transfer Array (38 of 38)
+# Modules from group: Energy Vampire (52 of 52)
+# Modules from group: Hull Repair Unit (21 of 21)
+# Modules from group: Shield Transporter (39 of 39)
+# Module: QA Remote Armor Repair System - 5 Players
+# Module: QA Shield Transporter - 5 Players
+# Module: Reactive Armor Hardener
+type = "overheat"
+def handler(fit, module, context):
+ module.boostItemAttr("duration", module.getModifiedItemAttr("overloadSelfDurationBonus"))
\ No newline at end of file
diff --git a/eos/effects/overloadselfeccmstrenghtbonus.py b/eos/effects/overloadselfeccmstrenghtbonus.py
new file mode 100755
index 000000000..e4066f71f
--- /dev/null
+++ b/eos/effects/overloadselfeccmstrenghtbonus.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules from group: ECCM (44 of 44)
+type = "overheat"
+def handler(fit, module, context):
+ for scanType in ("Gravimetric", "Magnetometric", "Radar", "Ladar"):
+ module.boostItemAttr("scan%sStrengthPercent" % scanType,
+ module.getModifiedItemAttr("overloadECCMStrenghtBonus"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/overloadselfecmstrenghtbonus.py b/eos/effects/overloadselfecmstrenghtbonus.py
new file mode 100755
index 000000000..6e5be97e2
--- /dev/null
+++ b/eos/effects/overloadselfecmstrenghtbonus.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules from group: ECM (44 of 44)
+type = "overheat"
+def handler(fit, module, context):
+ for scanType in ("Gravimetric", "Magnetometric", "Radar", "Ladar"):
+ module.boostItemAttr("scan{0}StrengthBonus".format(scanType),
+ module.getModifiedItemAttr("overloadECMStrengthBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/overloadselfemhardeningbonus.py b/eos/effects/overloadselfemhardeningbonus.py
new file mode 100755
index 000000000..b36617763
--- /dev/null
+++ b/eos/effects/overloadselfemhardeningbonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of module: Armor EM Hardener I (39 of 39)
+# Variations of module: EM Ward Field I (19 of 19)
+# Module: Civilian EM Ward Field
+type = "overheat"
+def handler(fit, module, context):
+ module.boostItemAttr("emDamageResistanceBonus", module.getModifiedItemAttr("overloadHardeningBonus"))
\ No newline at end of file
diff --git a/eos/effects/overloadselfexplosivehardeningbonus.py b/eos/effects/overloadselfexplosivehardeningbonus.py
new file mode 100755
index 000000000..62ad34507
--- /dev/null
+++ b/eos/effects/overloadselfexplosivehardeningbonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of module: Armor Explosive Hardener I (39 of 39)
+# Variations of module: Explosive Deflection Field I (19 of 19)
+# Module: Civilian Explosive Deflection Field
+type = "overheat"
+def handler(fit, module, context):
+ module.boostItemAttr("explosiveDamageResistanceBonus", module.getModifiedItemAttr("overloadHardeningBonus"))
\ No newline at end of file
diff --git a/eos/effects/overloadselfhardeninginvulnerabilitybonus.py b/eos/effects/overloadselfhardeninginvulnerabilitybonus.py
new file mode 100755
index 000000000..58b5ae43f
--- /dev/null
+++ b/eos/effects/overloadselfhardeninginvulnerabilitybonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of module: Adaptive Invulnerability Field I (17 of 17)
+type = "overheat"
+def handler(fit, module, context):
+ for type in ("kinetic", "thermal", "explosive", "em"):
+ module.boostItemAttr("%sDamageResistanceBonus" % type,
+ module.getModifiedItemAttr("overloadHardeningBonus"))
diff --git a/eos/effects/overloadselfkinetichardeningbonus.py b/eos/effects/overloadselfkinetichardeningbonus.py
new file mode 100755
index 000000000..5a5fd50aa
--- /dev/null
+++ b/eos/effects/overloadselfkinetichardeningbonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of module: Armor Kinetic Hardener I (39 of 39)
+# Variations of module: Kinetic Deflection Field I (19 of 19)
+# Module: Civilian Kinetic Deflection Field
+type = "overheat"
+def handler(fit, module, context):
+ module.boostItemAttr("kineticDamageResistanceBonus", module.getModifiedItemAttr("overloadHardeningBonus"))
\ No newline at end of file
diff --git a/eos/effects/overloadselfrangebonus.py b/eos/effects/overloadselfrangebonus.py
new file mode 100755
index 000000000..359693da5
--- /dev/null
+++ b/eos/effects/overloadselfrangebonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules from group: Stasis Web (19 of 19)
+# Modules from group: Warp Scrambler (38 of 39)
+type = "overheat"
+def handler(fit, module, context):
+ module.boostItemAttr("maxRange", module.getModifiedItemAttr("overloadRangeBonus"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/overloadselfshieldbonusdurationbonus.py b/eos/effects/overloadselfshieldbonusdurationbonus.py
new file mode 100755
index 000000000..09ea50c71
--- /dev/null
+++ b/eos/effects/overloadselfshieldbonusdurationbonus.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules from group: Fueled Shield Booster (4 of 4)
+# Modules from group: Shield Booster (87 of 87)
+type = "overheat"
+def handler(fit, module, context):
+ module.boostItemAttr("duration", module.getModifiedItemAttr("overloadSelfDurationBonus"))
+ module.boostItemAttr("shieldBonus", module.getModifiedItemAttr("overloadShieldBonus"))
+
\ No newline at end of file
diff --git a/eos/effects/overloadselfspeedbonus.py b/eos/effects/overloadselfspeedbonus.py
new file mode 100755
index 000000000..485eb1aed
--- /dev/null
+++ b/eos/effects/overloadselfspeedbonus.py
@@ -0,0 +1,5 @@
+# Used by:
+# Modules from group: Propulsion Module (107 of 107)
+type = "overheat"
+def handler(fit, module, context):
+ module.boostItemAttr("speedFactor", module.getModifiedItemAttr("overloadSpeedFactorBonus"))
\ No newline at end of file
diff --git a/eos/effects/overloadselfthermalhardeningbonus.py b/eos/effects/overloadselfthermalhardeningbonus.py
new file mode 100755
index 000000000..57c8ffa23
--- /dev/null
+++ b/eos/effects/overloadselfthermalhardeningbonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of module: Armor Thermic Hardener I (39 of 39)
+# Variations of module: Thermic Dissipation Field I (19 of 19)
+# Module: Civilian Thermic Dissipation Field
+type = "overheat"
+def handler(fit, module, context):
+ module.boostItemAttr("thermalDamageResistanceBonus", module.getModifiedItemAttr("overloadHardeningBonus"))
\ No newline at end of file
diff --git a/eos/effects/powerbooster.py b/eos/effects/powerbooster.py
new file mode 100755
index 000000000..21204c883
--- /dev/null
+++ b/eos/effects/powerbooster.py
@@ -0,0 +1,12 @@
+# Used by:
+# Modules from group: Capacitor Booster (54 of 54)
+type = "active"
+def handler(fit, module, context):
+ # Set reload time to 10 seconds
+ module.reloadTime = 10000
+ # Make so that reloads are always taken into account during clculations
+ module.forceReload = True
+
+ if module.charge is None: return
+ capAmount = module.getModifiedChargeAttr("capacitorBonus") or 0
+ module.itemModifiedAttributes["capacitorNeed"] = -capAmount
diff --git a/eos/effects/powerincrease.py b/eos/effects/powerincrease.py
new file mode 100755
index 000000000..4f12e7a61
--- /dev/null
+++ b/eos/effects/powerincrease.py
@@ -0,0 +1,5 @@
+# Used by:
+# Modules from group: Auxiliary Power Core (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.increaseItemAttr("powerOutput", module.getModifiedItemAttr("powerIncrease"))
\ No newline at end of file
diff --git a/eos/effects/poweroutputaddpassive.py b/eos/effects/poweroutputaddpassive.py
new file mode 100755
index 000000000..8a51057a2
--- /dev/null
+++ b/eos/effects/poweroutputaddpassive.py
@@ -0,0 +1,5 @@
+# Used by:
+# Items from category: Subsystem (40 of 80)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.increaseItemAttr("powerOutput", module.getModifiedItemAttr("powerOutput"))
diff --git a/eos/effects/poweroutputmultiply.py b/eos/effects/poweroutputmultiply.py
new file mode 100755
index 000000000..5491ae68a
--- /dev/null
+++ b/eos/effects/poweroutputmultiply.py
@@ -0,0 +1,10 @@
+# Used by:
+# Modules from group: Capacitor Flux Coil (12 of 12)
+# Modules from group: Capacitor Power Relay (25 of 25)
+# Modules from group: Power Diagnostic System (31 of 31)
+# Modules from group: Reactor Control Unit (28 of 28)
+# 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/projectilefired.py b/eos/effects/projectilefired.py
new file mode 100755
index 000000000..65d5f43ef
--- /dev/null
+++ b/eos/effects/projectilefired.py
@@ -0,0 +1,11 @@
+# Used by:
+# Modules from group: Hybrid Weapon (199 of 199)
+# Modules from group: Projectile Weapon (143 of 143)
+type = 'active'
+def handler(fit, module, context):
+ rt = module.getModifiedItemAttr("reloadTime")
+ if not rt:
+ # Set reload time to 10 seconds
+ module.reloadTime = 10000
+ else:
+ module.reloadTime = rt
diff --git a/eos/effects/projectileweapondamagemultiply.py b/eos/effects/projectileweapondamagemultiply.py
new file mode 100755
index 000000000..bc5a28ebf
--- /dev/null
+++ b/eos/effects/projectileweapondamagemultiply.py
@@ -0,0 +1,9 @@
+# Used by:
+# Modules from group: Gyrostabilizer (20 of 20)
+# Modules named like: QA Multiship Module Players (4 of 4)
+# Module: QA Damage Module
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Projectile Weapon",
+ "damageMultiplier", module.getModifiedItemAttr("damageMultiplier"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/projectileweapondamagemultiplypassive.py b/eos/effects/projectileweapondamagemultiplypassive.py
new file mode 100755
index 000000000..384da68ba
--- /dev/null
+++ b/eos/effects/projectileweapondamagemultiplypassive.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules named like: Projectile Collision Accelerator (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Projectile Weapon",
+ "damageMultiplier", module.getModifiedItemAttr("damageMultiplier"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/projectileweaponspeedmultiply.py b/eos/effects/projectileweaponspeedmultiply.py
new file mode 100755
index 000000000..240e08d3d
--- /dev/null
+++ b/eos/effects/projectileweaponspeedmultiply.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules from group: Gyrostabilizer (20 of 20)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Projectile Weapon",
+ "speed", module.getModifiedItemAttr("speedMultiplier"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/projectileweaponspeedmultiplypassive.py b/eos/effects/projectileweaponspeedmultiplypassive.py
new file mode 100755
index 000000000..9df646e4d
--- /dev/null
+++ b/eos/effects/projectileweaponspeedmultiplypassive.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules named like: Projectile Burst Aerator (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Projectile Weapon",
+ "speed", module.getModifiedItemAttr("speedMultiplier"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/propulsionskillcapneedbonusskilllevel.py b/eos/effects/propulsionskillcapneedbonusskilllevel.py
new file mode 100755
index 000000000..f71c33b54
--- /dev/null
+++ b/eos/effects/propulsionskillcapneedbonusskilllevel.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implants named like: Zainou 'Gypsy' Propulsion Jamming PJ (6 of 6)
+# Skill: Propulsion Jamming
+type = "passive"
+def handler(fit, container, context):
+ groups = ("Stasis Web", "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/rapidfiringrofbonuspostpercentspeedlocationshipmodulesrequiringgunnery.py b/eos/effects/rapidfiringrofbonuspostpercentspeedlocationshipmodulesrequiringgunnery.py
new file mode 100755
index 000000000..06d44f78f
--- /dev/null
+++ b/eos/effects/rapidfiringrofbonuspostpercentspeedlocationshipmodulesrequiringgunnery.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Rapid Firing
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
+ "speed", skill.getModifiedItemAttr("rofBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/rechargerateaddpassive.py b/eos/effects/rechargerateaddpassive.py
new file mode 100755
index 000000000..7d6357b10
--- /dev/null
+++ b/eos/effects/rechargerateaddpassive.py
@@ -0,0 +1,5 @@
+# Used by:
+# Subsystems from group: Engineering Systems (16 of 16)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.increaseItemAttr("rechargeRate", module.getModifiedItemAttr("rechargeRate"))
\ No newline at end of file
diff --git a/eos/effects/reconoperationsmaxtargetrangebonuspostpercentmaxtargetrangegangships.py b/eos/effects/reconoperationsmaxtargetrangebonuspostpercentmaxtargetrangegangships.py
new file mode 100755
index 000000000..13a938391
--- /dev/null
+++ b/eos/effects/reconoperationsmaxtargetrangebonuspostpercentmaxtargetrangegangships.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implant: Information Warfare Mindlink
+# Skill: Information Warfare
+type = "gang"
+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)
diff --git a/eos/effects/reconshipcloakcpubonus1.py b/eos/effects/reconshipcloakcpubonus1.py
new file mode 100755
index 000000000..59e11506d
--- /dev/null
+++ b/eos/effects/reconshipcloakcpubonus1.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ships from group: Force Recon Ship (4 of 4)
+type = "passive"
+runTime = "early"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Recon Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Cloaking Device",
+ "cpu", ship.getModifiedItemAttr("eliteBonusReconShip1") * level)
diff --git a/eos/effects/remotearmorpowerneedbonuseffect.py b/eos/effects/remotearmorpowerneedbonuseffect.py
new file mode 100755
index 000000000..901209a52
--- /dev/null
+++ b/eos/effects/remotearmorpowerneedbonuseffect.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Guardian
+# Ship: Oneiros
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Projector",
+ "power", ship.getModifiedItemAttr("remoteArmorPowerNeedBonus"))
diff --git a/eos/effects/remotearmorsystemscapneedbonuspostpercentcapacitorneedlocationshipmodulesrequiringremotearmorsystems.py b/eos/effects/remotearmorsystemscapneedbonuspostpercentcapacitorneedlocationshipmodulesrequiringremotearmorsystems.py
new file mode 100755
index 000000000..4e1acf6cc
--- /dev/null
+++ b/eos/effects/remotearmorsystemscapneedbonuspostpercentcapacitorneedlocationshipmodulesrequiringremotearmorsystems.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implants named like: Inherent Implants 'Noble' Remote Armor Repair Systems RA (6 of 6)
+# Modules named like: Remote Repair Augmentor (6 of 8)
+# Skill: Remote Armor Repair Systems
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"),
+ "capacitorNeed", container.getModifiedItemAttr("capNeedBonus") * level)
diff --git a/eos/effects/remoteecmburst.py b/eos/effects/remoteecmburst.py
new file mode 100755
index 000000000..d56e4124e
--- /dev/null
+++ b/eos/effects/remoteecmburst.py
@@ -0,0 +1,5 @@
+# Used by:
+# Module: Remote ECM Burst I
+type = 'active'
+def handler(fit, module, context):
+ pass
diff --git a/eos/effects/remotehullrepair.py b/eos/effects/remotehullrepair.py
new file mode 100755
index 000000000..807c2527f
--- /dev/null
+++ b/eos/effects/remotehullrepair.py
@@ -0,0 +1,9 @@
+# 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/repairdronearmordamageamountbonus.py b/eos/effects/repairdronearmordamageamountbonus.py
new file mode 100755
index 000000000..4a20e0dcb
--- /dev/null
+++ b/eos/effects/repairdronearmordamageamountbonus.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules named like: Drone Repair Augmentor (8 of 8)
+# Skill: Repair Drone Operation
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.drones.filteredItemBoost(lambda drone: drone.item.group.name == "Logistic Drone",
+ "armorDamageAmount", container.getModifiedItemAttr("damageHP") * level)
diff --git a/eos/effects/repairdroneshieldbonusbonus.py b/eos/effects/repairdroneshieldbonusbonus.py
new file mode 100755
index 000000000..3bff7d660
--- /dev/null
+++ b/eos/effects/repairdroneshieldbonusbonus.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules named like: Drone Repair Augmentor (8 of 8)
+# Skill: Repair Drone Operation
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.drones.filteredItemBoost(lambda drone: drone.item.group.name == "Logistic Drone",
+ "shieldBonus", container.getModifiedItemAttr("damageHP") * level)
diff --git a/eos/effects/repairsystemsdurationbonuspostpercentdurationlocationshipmodulesrequiringrepairsystems.py b/eos/effects/repairsystemsdurationbonuspostpercentdurationlocationshipmodulesrequiringrepairsystems.py
new file mode 100755
index 000000000..d22064a48
--- /dev/null
+++ b/eos/effects/repairsystemsdurationbonuspostpercentdurationlocationshipmodulesrequiringrepairsystems.py
@@ -0,0 +1,11 @@
+# Used by:
+# Implants named like: Inherent Implants 'Noble' Repair Systems RS (6 of 6)
+# Modules named like: Nanobot Accelerator (8 of 8)
+# Implant: Numon Family Heirloom
+# Skill: Repair Systems
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Repair Systems"),
+ "duration", container.getModifiedItemAttr("durationSkillBonus") * level,
+ stackingPenalties = "skill" not in context and "implant" not in context)
diff --git a/eos/effects/republicsetbonus3.py b/eos/effects/republicsetbonus3.py
new file mode 100755
index 000000000..c12f810e6
--- /dev/null
+++ b/eos/effects/republicsetbonus3.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Jackal (6 of 12)
+runTime = "early"
+type = "passive"
+def handler(fit, implant, context):
+ fit.implants.filteredItemMultiply(lambda implant: "implantSetRepublicFleet" in implant.itemModifiedAttributes and\
+ "scanLadarStrengthPercent" in implant.itemModifiedAttributes,
+ "scanLadarStrengthPercent", implant.getModifiedItemAttr("implantSetRepublicFleet"))
\ No newline at end of file
diff --git a/eos/effects/republicsetlgbonus.py b/eos/effects/republicsetlgbonus.py
new file mode 100755
index 000000000..444594203
--- /dev/null
+++ b/eos/effects/republicsetlgbonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Implants named like: Low grade Jackal (6 of 6)
+runTime = "early"
+type = "passive"
+def handler(fit, item, context):
+ fit.implants.filteredItemMultiply(lambda implant: "scanLadarStrengthModifier" in implant.itemModifiedAttributes,
+ "scanLadarStrengthModifier", item.getModifiedItemAttr("implantSetLGRepublicFleet"))
diff --git a/eos/effects/rigdrawbackbonuseffect.py b/eos/effects/rigdrawbackbonuseffect.py
new file mode 100755
index 000000000..3762dd7bf
--- /dev/null
+++ b/eos/effects/rigdrawbackbonuseffect.py
@@ -0,0 +1,7 @@
+# Used by:
+# Skills named like: Rigging (9 of 10)
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill(skill),
+ "drawback", skill.getModifiedItemAttr("rigDrawbackBonus") * skill.level)
+
\ No newline at end of file
diff --git a/eos/effects/rorqualcargoscanrangebonus.py b/eos/effects/rorqualcargoscanrangebonus.py
new file mode 100755
index 000000000..d252b248c
--- /dev/null
+++ b/eos/effects/rorqualcargoscanrangebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Rorqual
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Cargo Scanner",
+ "cargoScanRange", ship.getModifiedItemAttr("cargoScannerRangeBonus"))
diff --git a/eos/effects/rorqualsurveyscannerrangebonus.py b/eos/effects/rorqualsurveyscannerrangebonus.py
new file mode 100755
index 000000000..316bfd087
--- /dev/null
+++ b/eos/effects/rorqualsurveyscannerrangebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Rorqual
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Survey Scanner",
+ "surveyScanRange", ship.getModifiedItemAttr("surveyScannerRangeBonus"))
diff --git a/eos/effects/salvagermoduledurationreduction.py b/eos/effects/salvagermoduledurationreduction.py
new file mode 100755
index 000000000..d3ab60d74
--- /dev/null
+++ b/eos/effects/salvagermoduledurationreduction.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implant: Poteque 'Prospector' Environmental Analysis EY-1005
+type = "passive"
+def handler(fit, implant, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Salvager",
+ "duration", implant.getModifiedItemAttr("durationBonus"))
diff --git a/eos/effects/salvaging.py b/eos/effects/salvaging.py
new file mode 100755
index 000000000..8860888cd
--- /dev/null
+++ b/eos/effects/salvaging.py
@@ -0,0 +1,5 @@
+# Used by:
+# Modules from group: Salvager (2 of 2)
+type = "active"
+def handler(fit, module, context):
+ pass
\ No newline at end of file
diff --git a/eos/effects/salvagingaccessdifficultybonuseffectpassive.py b/eos/effects/salvagingaccessdifficultybonuseffectpassive.py
new file mode 100755
index 000000000..0d125a6e6
--- /dev/null
+++ b/eos/effects/salvagingaccessdifficultybonuseffectpassive.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules named like: Salvage Tackle (8 of 8)
+# Implant: Poteque 'Prospector' Salvaging SV-905
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill("Salvaging"),
+ "accessDifficultyBonus", container.getModifiedItemAttr("accessDifficultyBonus"), position="post")
diff --git a/eos/effects/scangravimetricstrengthmodifiereffect.py b/eos/effects/scangravimetricstrengthmodifiereffect.py
new file mode 100755
index 000000000..d9c5ad58c
--- /dev/null
+++ b/eos/effects/scangravimetricstrengthmodifiereffect.py
@@ -0,0 +1,5 @@
+# Used by:
+# Implants named like: Low grade Talon (5 of 6)
+type = "passive"
+def handler(fit, implant, context):
+ fit.ship.increaseItemAttr("scanGravimetricStrength", implant.getModifiedItemAttr("scanGravimetricStrengthModifier"))
\ No newline at end of file
diff --git a/eos/effects/scanladarstrengthmodifiereffect.py b/eos/effects/scanladarstrengthmodifiereffect.py
new file mode 100755
index 000000000..269e9d4c2
--- /dev/null
+++ b/eos/effects/scanladarstrengthmodifiereffect.py
@@ -0,0 +1,5 @@
+# Used by:
+# Implants named like: Low grade Jackal (5 of 6)
+type = "passive"
+def handler(fit, implant, context):
+ fit.ship.increaseItemAttr("scanLadarStrength", implant.getModifiedItemAttr("scanLadarStrengthModifier"))
\ No newline at end of file
diff --git a/eos/effects/scanmagnetometricstrengthmodifiereffect.py b/eos/effects/scanmagnetometricstrengthmodifiereffect.py
new file mode 100755
index 000000000..6e5abe632
--- /dev/null
+++ b/eos/effects/scanmagnetometricstrengthmodifiereffect.py
@@ -0,0 +1,5 @@
+# Used by:
+# Implants named like: Low grade Spur (5 of 6)
+type = "passive"
+def handler(fit, implant, context):
+ fit.ship.increaseItemAttr("scanMagnetometricStrength", implant.getModifiedItemAttr("scanMagnetometricStrengthModifier"))
\ No newline at end of file
diff --git a/eos/effects/scanradarstrengthmodifiereffect.py b/eos/effects/scanradarstrengthmodifiereffect.py
new file mode 100755
index 000000000..c3b6474f6
--- /dev/null
+++ b/eos/effects/scanradarstrengthmodifiereffect.py
@@ -0,0 +1,5 @@
+# Used by:
+# Implants named like: Low grade Grail (5 of 6)
+type = "passive"
+def handler(fit, implant, context):
+ fit.ship.increaseItemAttr("scanRadarStrength", implant.getModifiedItemAttr("scanRadarStrengthModifier"))
\ No newline at end of file
diff --git a/eos/effects/scanresolutionaddpassive.py b/eos/effects/scanresolutionaddpassive.py
new file mode 100755
index 000000000..361e64a83
--- /dev/null
+++ b/eos/effects/scanresolutionaddpassive.py
@@ -0,0 +1,5 @@
+# Used by:
+# Subsystems from group: Electronic Systems (16 of 16)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.increaseItemAttr("scanResolution", module.getModifiedItemAttr("scanResolution"))
diff --git a/eos/effects/scanresolutionmultiplieronline.py b/eos/effects/scanresolutionmultiplieronline.py
new file mode 100755
index 000000000..705731b5e
--- /dev/null
+++ b/eos/effects/scanresolutionmultiplieronline.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules from group: Warp Core Stabilizer (8 of 8)
+# Module: Target Spectrum Breaker
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.multiplyItemAttr("scanResolution", module.getModifiedItemAttr("scanResolutionMultiplier"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/scanstrengthaddpassive.py b/eos/effects/scanstrengthaddpassive.py
new file mode 100755
index 000000000..f6f03063f
--- /dev/null
+++ b/eos/effects/scanstrengthaddpassive.py
@@ -0,0 +1,8 @@
+# Used by:
+# Subsystems from group: Electronic Systems (16 of 16)
+type = "passive"
+def handler(fit, module, context):
+ sensorTypes = ("Gravimetric", "Ladar", "Magnetometric", "Radar")
+ for sensorType in sensorTypes:
+ sensAttr = "scan{0}Strength".format(sensorType)
+ fit.ship.increaseItemAttr(sensAttr, module.getModifiedItemAttr(sensAttr))
diff --git a/eos/effects/scanstrengthbonuspercentactivate.py b/eos/effects/scanstrengthbonuspercentactivate.py
new file mode 100755
index 000000000..bd0d6ca36
--- /dev/null
+++ b/eos/effects/scanstrengthbonuspercentactivate.py
@@ -0,0 +1,9 @@
+# Used by:
+# Modules from group: ECCM (44 of 44)
+# Module: QA ECCM
+type = "active"
+def handler(fit, module, context):
+ for type in ("Gravimetric", "Magnetometric", "Radar", "Ladar"):
+ fit.ship.boostItemAttr("scan%sStrength" % type,
+ module.getModifiedItemAttr("scan%sStrengthPercent" % type),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/scanstrengthbonuspercentonline.py b/eos/effects/scanstrengthbonuspercentonline.py
new file mode 100755
index 000000000..b3fd1a00a
--- /dev/null
+++ b/eos/effects/scanstrengthbonuspercentonline.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules from group: Sensor Backup Array (72 of 72)
+type = "passive"
+def handler(fit, module, context):
+ for type in ("Gravimetric", "Magnetometric", "Radar", "Ladar"):
+ fit.ship.boostItemAttr("scan%sStrength" % type,
+ module.getModifiedItemAttr("scan%sStrengthPercent" % type),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/scanstrengthbonuspercentpassive.py b/eos/effects/scanstrengthbonuspercentpassive.py
new file mode 100755
index 000000000..ad1803f38
--- /dev/null
+++ b/eos/effects/scanstrengthbonuspercentpassive.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implants from group: Cyberimplant (20 of 141)
+type = "passive"
+def handler(fit, implant, context):
+ for type in ("Gravimetric", "Magnetometric", "Radar", "Ladar"):
+ sensorType = "scan{0}Strength".format(type)
+ sensorBoost = "scan{0}StrengthPercent".format(type)
+ if sensorBoost in implant.item.attributes:
+ fit.ship.boostItemAttr(sensorType, implant.getModifiedItemAttr(sensorBoost))
diff --git a/eos/effects/scanstrengthtargetpercentbonus.py b/eos/effects/scanstrengthtargetpercentbonus.py
new file mode 100755
index 000000000..b72e72c07
--- /dev/null
+++ b/eos/effects/scanstrengthtargetpercentbonus.py
@@ -0,0 +1,9 @@
+# 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/scoutdroneoperationdronerangebonusmodadddronecontroldistancechar.py b/eos/effects/scoutdroneoperationdronerangebonusmodadddronecontroldistancechar.py
new file mode 100755
index 000000000..378abf61a
--- /dev/null
+++ b/eos/effects/scoutdroneoperationdronerangebonusmodadddronecontroldistancechar.py
@@ -0,0 +1,9 @@
+# Used by:
+# Modules named like: Drone Control Range Augmentor (8 of 8)
+# Skill: Electronic Warfare Drone Interfacing
+# Skill: Scout Drone Operation
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ amount = container.getModifiedItemAttr("droneRangeBonus") * level
+ fit.extraAttributes.increase("droneControlRange", amount)
diff --git a/eos/effects/scriptdurationbonus.py b/eos/effects/scriptdurationbonus.py
new file mode 100755
index 000000000..39e1bca1e
--- /dev/null
+++ b/eos/effects/scriptdurationbonus.py
@@ -0,0 +1,5 @@
+# Used by:
+# Charge: Focused Warp Disruption Script
+type = "passive"
+def handler(fit, module, context):
+ module.boostItemAttr("duration", module.getModifiedChargeAttr("durationBonus"))
diff --git a/eos/effects/scriptmassbonuspercentagebonus.py b/eos/effects/scriptmassbonuspercentagebonus.py
new file mode 100755
index 000000000..58f4d8146
--- /dev/null
+++ b/eos/effects/scriptmassbonuspercentagebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Charge: Focused Warp Disruption Script
+type = "passive"
+runTime = "early"
+def handler(fit, module, context):
+ module.boostItemAttr("massBonusPercentage", module.getModifiedChargeAttr("massBonusPercentageBonus"))
diff --git a/eos/effects/scriptsensorboostermaxtargetrangebonusbonus.py b/eos/effects/scriptsensorboostermaxtargetrangebonusbonus.py
new file mode 100755
index 000000000..37c25854f
--- /dev/null
+++ b/eos/effects/scriptsensorboostermaxtargetrangebonusbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Charges from group: Sensor Booster Script (2 of 2)
+# Charges from group: Sensor Dampener Script (2 of 2)
+type = "passive"
+def handler(fit, module, context):
+ module.boostItemAttr("maxTargetRangeBonus", module.getModifiedChargeAttr("maxTargetRangeBonusBonus"))
\ No newline at end of file
diff --git a/eos/effects/scriptsensorboosterscanresolutionbonusbonus.py b/eos/effects/scriptsensorboosterscanresolutionbonusbonus.py
new file mode 100755
index 000000000..41299dbc6
--- /dev/null
+++ b/eos/effects/scriptsensorboosterscanresolutionbonusbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Charges from group: Sensor Booster Script (2 of 2)
+# Charges from group: Sensor Dampener Script (2 of 2)
+type = "passive"
+def handler(fit, module, context):
+ module.boostItemAttr("scanResolutionBonus", module.getModifiedChargeAttr("scanResolutionBonusBonus"))
\ No newline at end of file
diff --git a/eos/effects/scriptsignatureradiusbonusbonus.py b/eos/effects/scriptsignatureradiusbonusbonus.py
new file mode 100755
index 000000000..a961407a2
--- /dev/null
+++ b/eos/effects/scriptsignatureradiusbonusbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Charge: Focused Warp Disruption Script
+type = "passive"
+runTime = "early"
+def handler(fit, module, context):
+ module.boostItemAttr("signatureRadiusBonus", module.getModifiedChargeAttr("signatureRadiusBonusBonus"))
diff --git a/eos/effects/scriptspeedboostfactorbonusbonus.py b/eos/effects/scriptspeedboostfactorbonusbonus.py
new file mode 100755
index 000000000..978c25784
--- /dev/null
+++ b/eos/effects/scriptspeedboostfactorbonusbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Charge: Focused Warp Disruption Script
+type = "passive"
+runTime = "early"
+def handler(fit, module, context):
+ module.boostItemAttr("speedBoostFactorBonus", module.getModifiedChargeAttr("speedBoostFactorBonusBonus"))
diff --git a/eos/effects/scriptspeedfactorbonusbonus.py b/eos/effects/scriptspeedfactorbonusbonus.py
new file mode 100755
index 000000000..c0b6ed0fa
--- /dev/null
+++ b/eos/effects/scriptspeedfactorbonusbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Charge: Focused Warp Disruption Script
+type = "passive"
+runTime = "early"
+def handler(fit, module, context):
+ module.boostItemAttr("speedFactorBonus", module.getModifiedChargeAttr("speedFactorBonusBonus"))
diff --git a/eos/effects/scripttrackingcomputermaxrangebonusbonus.py b/eos/effects/scripttrackingcomputermaxrangebonusbonus.py
new file mode 100755
index 000000000..e2a49b59d
--- /dev/null
+++ b/eos/effects/scripttrackingcomputermaxrangebonusbonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Charges from group: Tracking Disruption Script (2 of 2)
+# Charges from group: Tracking Script (2 of 2)
+type = "passive"
+def handler(fit, module, context):
+ module.boostItemAttr("maxRangeBonus", module.getModifiedChargeAttr("maxRangeBonusBonus"))
+ module.boostItemAttr("falloffBonus", module.getModifiedChargeAttr("falloffBonusBonus"))
diff --git a/eos/effects/scripttrackingcomputertrackingspeedbonusbonus.py b/eos/effects/scripttrackingcomputertrackingspeedbonusbonus.py
new file mode 100755
index 000000000..31b14cff4
--- /dev/null
+++ b/eos/effects/scripttrackingcomputertrackingspeedbonusbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Charges from group: Tracking Disruption Script (2 of 2)
+# Charges from group: Tracking Script (2 of 2)
+type = "passive"
+def handler(fit, module, context):
+ module.boostItemAttr("trackingSpeedBonus", module.getModifiedChargeAttr("trackingSpeedBonusBonus"))
diff --git a/eos/effects/scriptwarpdisruptionfieldgeneratorsetdisallowinempirespace.py b/eos/effects/scriptwarpdisruptionfieldgeneratorsetdisallowinempirespace.py
new file mode 100755
index 000000000..96ae3a359
--- /dev/null
+++ b/eos/effects/scriptwarpdisruptionfieldgeneratorsetdisallowinempirespace.py
@@ -0,0 +1,5 @@
+# Used by:
+# Charge: Focused Warp Disruption Script
+type = "passive"
+def handler(fit, module, context):
+ module.forceItemAttr("disallowInEmpireSpace", module.getModifiedChargeAttr("disallowInEmpireSpace"))
diff --git a/eos/effects/scriptwarpscramblerangebonus.py b/eos/effects/scriptwarpscramblerangebonus.py
new file mode 100755
index 000000000..88151d6c0
--- /dev/null
+++ b/eos/effects/scriptwarpscramblerangebonus.py
@@ -0,0 +1,5 @@
+# Used by:
+# Charge: Focused Warp Disruption Script
+type = "passive"
+def handler(fit, module, context):
+ module.boostItemAttr("warpScrambleRange", module.getModifiedChargeAttr("warpScrambleRangeBonus"))
diff --git a/eos/effects/selfrof.py b/eos/effects/selfrof.py
new file mode 100755
index 000000000..cbd493be0
--- /dev/null
+++ b/eos/effects/selfrof.py
@@ -0,0 +1,8 @@
+# Used by:
+# Skills named like: Missile Specialization (4 of 4)
+# Skill: Rocket Specialization
+# Skill: Torpedo Specialization
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill(skill),
+ "speed", skill.getModifiedItemAttr("rofBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/selft2largehybridblasterdamagebonus.py b/eos/effects/selft2largehybridblasterdamagebonus.py
new file mode 100755
index 000000000..80783a3b0
--- /dev/null
+++ b/eos/effects/selft2largehybridblasterdamagebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Large Blaster Specialization
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Blaster Specialization"),
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/selft2largehybridraildamagebonus.py b/eos/effects/selft2largehybridraildamagebonus.py
new file mode 100755
index 000000000..33ab6e5b9
--- /dev/null
+++ b/eos/effects/selft2largehybridraildamagebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Large Railgun Specialization
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Railgun Specialization"),
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/selft2largelaserbeamdamagebonus.py b/eos/effects/selft2largelaserbeamdamagebonus.py
new file mode 100755
index 000000000..109c65197
--- /dev/null
+++ b/eos/effects/selft2largelaserbeamdamagebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Large Beam Laser Specialization
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Beam Laser Specialization"),
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/selft2largelaserpulsedamagebonus.py b/eos/effects/selft2largelaserpulsedamagebonus.py
new file mode 100755
index 000000000..9223a027a
--- /dev/null
+++ b/eos/effects/selft2largelaserpulsedamagebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Large Pulse Laser Specialization
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Pulse Laser Specialization"),
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/selft2largeprojectileacdamagebonus.py b/eos/effects/selft2largeprojectileacdamagebonus.py
new file mode 100755
index 000000000..9c8b247bb
--- /dev/null
+++ b/eos/effects/selft2largeprojectileacdamagebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Large Autocannon Specialization
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Autocannon Specialization"),
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/selft2largeprojectileartydamagebonus.py b/eos/effects/selft2largeprojectileartydamagebonus.py
new file mode 100755
index 000000000..fc7f7a3e9
--- /dev/null
+++ b/eos/effects/selft2largeprojectileartydamagebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Large Artillery Specialization
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Artillery Specialization"),
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/selft2mediumhybridblasterdamagebonus.py b/eos/effects/selft2mediumhybridblasterdamagebonus.py
new file mode 100755
index 000000000..2211d7dae
--- /dev/null
+++ b/eos/effects/selft2mediumhybridblasterdamagebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Medium Blaster Specialization
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Blaster Specialization"),
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/selft2mediumhybridraildamagebonus.py b/eos/effects/selft2mediumhybridraildamagebonus.py
new file mode 100755
index 000000000..1b3cde558
--- /dev/null
+++ b/eos/effects/selft2mediumhybridraildamagebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Medium Railgun Specialization
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Railgun Specialization"),
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/selft2mediumlaserbeamdamagebonus.py b/eos/effects/selft2mediumlaserbeamdamagebonus.py
new file mode 100755
index 000000000..f8b94677c
--- /dev/null
+++ b/eos/effects/selft2mediumlaserbeamdamagebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Medium Beam Laser Specialization
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Beam Laser Specialization"),
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/selft2mediumlaserpulsedamagebonus.py b/eos/effects/selft2mediumlaserpulsedamagebonus.py
new file mode 100755
index 000000000..a84b0897a
--- /dev/null
+++ b/eos/effects/selft2mediumlaserpulsedamagebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Medium Pulse Laser Specialization
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Pulse Laser Specialization"),
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/selft2mediumprojectileacdamagebonus.py b/eos/effects/selft2mediumprojectileacdamagebonus.py
new file mode 100755
index 000000000..2d1e6f052
--- /dev/null
+++ b/eos/effects/selft2mediumprojectileacdamagebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Medium Autocannon Specialization
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Autocannon Specialization"),
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/selft2mediumprojectileartydamagebonus.py b/eos/effects/selft2mediumprojectileartydamagebonus.py
new file mode 100755
index 000000000..e8bec1102
--- /dev/null
+++ b/eos/effects/selft2mediumprojectileartydamagebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Medium Artillery Specialization
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Artillery Specialization"),
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/selft2smallhybridblasterdamagebonus.py b/eos/effects/selft2smallhybridblasterdamagebonus.py
new file mode 100755
index 000000000..d41e16c8e
--- /dev/null
+++ b/eos/effects/selft2smallhybridblasterdamagebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Small Blaster Specialization
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Blaster Specialization"),
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/selft2smallhybridraildamagebonus.py b/eos/effects/selft2smallhybridraildamagebonus.py
new file mode 100755
index 000000000..ddea6d658
--- /dev/null
+++ b/eos/effects/selft2smallhybridraildamagebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Small Railgun Specialization
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Railgun Specialization"),
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/selft2smalllaserbeamdamagebonus.py b/eos/effects/selft2smalllaserbeamdamagebonus.py
new file mode 100755
index 000000000..3ceae191d
--- /dev/null
+++ b/eos/effects/selft2smalllaserbeamdamagebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Small Beam Laser Specialization
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Beam Laser Specialization"),
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/selft2smalllaserpulsedamagebonus.py b/eos/effects/selft2smalllaserpulsedamagebonus.py
new file mode 100755
index 000000000..0412354f0
--- /dev/null
+++ b/eos/effects/selft2smalllaserpulsedamagebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Small Pulse Laser Specialization
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Pulse Laser Specialization"),
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/selft2smallprojectileacdamagebonus.py b/eos/effects/selft2smallprojectileacdamagebonus.py
new file mode 100755
index 000000000..59ec2f52f
--- /dev/null
+++ b/eos/effects/selft2smallprojectileacdamagebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Small Autocannon Specialization
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Autocannon Specialization"),
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/selft2smallprojectileartydamagebonus.py b/eos/effects/selft2smallprojectileartydamagebonus.py
new file mode 100755
index 000000000..15b896186
--- /dev/null
+++ b/eos/effects/selft2smallprojectileartydamagebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Small Artillery Specialization
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Artillery Specialization"),
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/sensorboosteractivepercentage.py b/eos/effects/sensorboosteractivepercentage.py
new file mode 100755
index 000000000..19bf464e9
--- /dev/null
+++ b/eos/effects/sensorboosteractivepercentage.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules from group: Sensor Booster (12 of 12)
+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)
diff --git a/eos/effects/sensorcompensationsensorstrengthbonusgravimetric.py b/eos/effects/sensorcompensationsensorstrengthbonusgravimetric.py
new file mode 100755
index 000000000..f1e987cc0
--- /dev/null
+++ b/eos/effects/sensorcompensationsensorstrengthbonusgravimetric.py
@@ -0,0 +1,5 @@
+# Used by:
+# Skill: Gravimetric Sensor Compensation
+type = "passive"
+def handler(fit, container, context):
+ fit.ship.boostItemAttr("scanGravimetricStrength", container.getModifiedItemAttr("sensorStrengthBonus") * container.level)
diff --git a/eos/effects/sensorcompensationsensorstrengthbonusladar.py b/eos/effects/sensorcompensationsensorstrengthbonusladar.py
new file mode 100755
index 000000000..9979657d3
--- /dev/null
+++ b/eos/effects/sensorcompensationsensorstrengthbonusladar.py
@@ -0,0 +1,5 @@
+# Used by:
+# Skill: Ladar Sensor Compensation
+type = "passive"
+def handler(fit, container, context):
+ fit.ship.boostItemAttr("scanLadarStrength", container.getModifiedItemAttr("sensorStrengthBonus") * container.level)
diff --git a/eos/effects/sensorcompensationsensorstrengthbonusmagnetometric.py b/eos/effects/sensorcompensationsensorstrengthbonusmagnetometric.py
new file mode 100755
index 000000000..84b25458f
--- /dev/null
+++ b/eos/effects/sensorcompensationsensorstrengthbonusmagnetometric.py
@@ -0,0 +1,5 @@
+# Used by:
+# Skill: Magnetometric Sensor Compensation
+type = "passive"
+def handler(fit, container, context):
+ fit.ship.boostItemAttr("scanMagnetometricStrength", container.getModifiedItemAttr("sensorStrengthBonus") * container.level)
diff --git a/eos/effects/sensorcompensationsensorstrengthbonusradar.py b/eos/effects/sensorcompensationsensorstrengthbonusradar.py
new file mode 100755
index 000000000..91c2c3eba
--- /dev/null
+++ b/eos/effects/sensorcompensationsensorstrengthbonusradar.py
@@ -0,0 +1,5 @@
+# Used by:
+# Skill: Radar Sensor Compensation
+type = "passive"
+def handler(fit, container, context):
+ fit.ship.boostItemAttr("scanRadarStrength", container.getModifiedItemAttr("sensorStrengthBonus") * container.level)
diff --git a/eos/effects/sensorupgradescpuneedbonuspostpercentcpulocationshipmodulesrequiringsensorupgrades.py b/eos/effects/sensorupgradescpuneedbonuspostpercentcpulocationshipmodulesrequiringsensorupgrades.py
new file mode 100755
index 000000000..a434917fc
--- /dev/null
+++ b/eos/effects/sensorupgradescpuneedbonuspostpercentcpulocationshipmodulesrequiringsensorupgrades.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implants named like: Zainou 'Gypsy' Electronics Upgrades EU (6 of 6)
+# Modules named like: Liquid Cooled Electronics (8 of 8)
+# Skill: Electronics Upgrades
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Electronics Upgrades"),
+ "cpu", container.getModifiedItemAttr("cpuNeedBonus") * level)
diff --git a/eos/effects/sentrydronedamagebonus.py b/eos/effects/sentrydronedamagebonus.py
new file mode 100755
index 000000000..577e94a5c
--- /dev/null
+++ b/eos/effects/sentrydronedamagebonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules named like: Sentry Damage Augmentor (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Sentry Drone Interfacing"),
+ "damageMultiplier", module.getModifiedItemAttr("damageMultiplierBonus"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/setbonusbloodraider.py b/eos/effects/setbonusbloodraider.py
new file mode 100755
index 000000000..c76f17af5
--- /dev/null
+++ b/eos/effects/setbonusbloodraider.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Talisman (12 of 12)
+runTime = "early"
+type = "passive"
+def handler(fit, implant, context):
+ fit.implants.filteredItemMultiply(lambda implant: "durationBonus" in implant.itemModifiedAttributes and \
+ "implantSetBloodraider" in implant.itemModifiedAttributes,
+ "durationBonus", implant.getModifiedItemAttr("implantSetBloodraider"))
diff --git a/eos/effects/setbonusbloodraidernosferatu.py b/eos/effects/setbonusbloodraidernosferatu.py
new file mode 100755
index 000000000..b542671be
--- /dev/null
+++ b/eos/effects/setbonusbloodraidernosferatu.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Talisman (10 of 12)
+type = "passive"
+def handler(fit, implant, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Energy Emission Systems"),
+ "duration", implant.getModifiedItemAttr("durationBonus"))
\ No newline at end of file
diff --git a/eos/effects/setbonuschristmascapacitorcapacity.py b/eos/effects/setbonuschristmascapacitorcapacity.py
new file mode 100755
index 000000000..d7401da74
--- /dev/null
+++ b/eos/effects/setbonuschristmascapacitorcapacity.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Genolution Core Augmentation CA (2 of 2)
+runTime = "early"
+type = "passive"
+def handler(fit, implant, context):
+ fit.implants.filteredItemMultiply(lambda implant: "capacitorCapacityBonus" in implant.itemModifiedAttributes and \
+ "implantSetChristmas" in implant.itemModifiedAttributes,
+ "capacitorCapacityBonus", implant.getModifiedItemAttr("implantSetChristmas"))
diff --git a/eos/effects/setbonuschristmascapacitorrecharge2.py b/eos/effects/setbonuschristmascapacitorrecharge2.py
new file mode 100755
index 000000000..0d031bf78
--- /dev/null
+++ b/eos/effects/setbonuschristmascapacitorrecharge2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Genolution Core Augmentation CA (2 of 2)
+runTime = "early"
+type = "passive"
+def handler(fit, implant, context):
+ fit.implants.filteredItemMultiply(lambda implant: "capRechargeBonus" in implant.itemModifiedAttributes and \
+ "implantSetChristmas" in implant.itemModifiedAttributes,
+ "capRechargeBonus", implant.getModifiedItemAttr("implantSetChristmas"))
diff --git a/eos/effects/setbonuschristmascpuoutput.py b/eos/effects/setbonuschristmascpuoutput.py
new file mode 100755
index 000000000..169c5abc0
--- /dev/null
+++ b/eos/effects/setbonuschristmascpuoutput.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Genolution Core Augmentation CA (2 of 2)
+runTime = "early"
+type = "passive"
+def handler(fit, implant, context):
+ fit.implants.filteredItemMultiply(lambda implant: "cpuOutputBonus2" in implant.itemModifiedAttributes and \
+ "implantSetChristmas" in implant.itemModifiedAttributes,
+ "cpuOutputBonus2", implant.getModifiedItemAttr("implantSetChristmas"))
diff --git a/eos/effects/setbonuschristmaspowergrid.py b/eos/effects/setbonuschristmaspowergrid.py
new file mode 100755
index 000000000..615191253
--- /dev/null
+++ b/eos/effects/setbonuschristmaspowergrid.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Genolution Core Augmentation CA (2 of 2)
+runTime = "early"
+type = "passive"
+def handler(fit, implant, context):
+ fit.implants.filteredItemMultiply(lambda implant: "powerEngineeringOutputBonus" in implant.itemModifiedAttributes and \
+ "implantSetChristmas" in implant.itemModifiedAttributes,
+ "powerEngineeringOutputBonus", implant.getModifiedItemAttr("implantSetChristmas"))
diff --git a/eos/effects/setbonusguristas.py b/eos/effects/setbonusguristas.py
new file mode 100755
index 000000000..8a925b260
--- /dev/null
+++ b/eos/effects/setbonusguristas.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Crystal (12 of 12)
+runTime = "early"
+type = "passive"
+def handler(fit, implant, context):
+ fit.implants.filteredItemMultiply(lambda implant: "shieldBoostMultiplier" in implant.itemModifiedAttributes and \
+ "implantSetGuristas" in implant.itemModifiedAttributes,
+ "shieldBoostMultiplier", implant.getModifiedItemAttr("implantSetGuristas"))
\ No newline at end of file
diff --git a/eos/effects/setbonusmordus.py b/eos/effects/setbonusmordus.py
new file mode 100755
index 000000000..2aff5f791
--- /dev/null
+++ b/eos/effects/setbonusmordus.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Low grade Centurion (6 of 6)
+runTime = "early"
+type = "passive"
+def handler(fit, implant, context):
+ fit.implants.filteredItemMultiply(lambda implant: "rangeSkillBonus" in implant.itemModifiedAttributes and \
+ "implantSetMordus" in implant.itemModifiedAttributes,
+ "rangeSkillBonus", implant.getModifiedItemAttr("implantSetMordus"))
\ No newline at end of file
diff --git a/eos/effects/setbonusore.py b/eos/effects/setbonusore.py
new file mode 100755
index 000000000..00e388a94
--- /dev/null
+++ b/eos/effects/setbonusore.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Low grade Harvest (6 of 6)
+runTime = "early"
+type = "passive"
+def handler(fit, implant, context):
+ fit.implants.filteredItemMultiply(lambda implant: "maxRangeBonus" in implant.itemModifiedAttributes and \
+ "implantSetORE" in implant.itemModifiedAttributes,
+ "maxRangeBonus", implant.getModifiedItemAttr("implantSetORE"))
\ No newline at end of file
diff --git a/eos/effects/setbonussansha.py b/eos/effects/setbonussansha.py
new file mode 100755
index 000000000..aad7f3d2a
--- /dev/null
+++ b/eos/effects/setbonussansha.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implants named like: Slave (12 of 12)
+# Implant: Halo Omega
+runTime = "early"
+type = "passive"
+def handler(fit, implant, context):
+ fit.implants.filteredItemMultiply(lambda implant: "armorHpBonus" in implant.itemModifiedAttributes and \
+ "implantSetSansha" in implant.itemModifiedAttributes,
+ "armorHpBonus", implant.getModifiedItemAttr("implantSetSansha"))
\ No newline at end of file
diff --git a/eos/effects/setbonusserpentis.py b/eos/effects/setbonusserpentis.py
new file mode 100755
index 000000000..cc8a739f5
--- /dev/null
+++ b/eos/effects/setbonusserpentis.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Snake (12 of 12)
+runTime = "early"
+type = "passive"
+def handler(fit, implant, context):
+ fit.implants.filteredItemMultiply(lambda implant: "velocityBonus" in implant.itemModifiedAttributes and \
+ "implantSetSerpentis" in implant.itemModifiedAttributes,
+ "velocityBonus", implant.getModifiedItemAttr("implantSetSerpentis"))
\ No newline at end of file
diff --git a/eos/effects/setbonussisters.py b/eos/effects/setbonussisters.py
new file mode 100755
index 000000000..58de085d0
--- /dev/null
+++ b/eos/effects/setbonussisters.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Low grade Virtue (6 of 6)
+runTime = "early"
+type = "passive"
+def handler(fit, implant, context):
+ fit.implants.filteredItemMultiply(lambda implant: "scanStrengthBonus" in implant.itemModifiedAttributes and \
+ "implantSetSisters" in implant.itemModifiedAttributes,
+ "scanStrengthBonus", implant.getModifiedItemAttr("implantSetSisters"))
\ No newline at end of file
diff --git a/eos/effects/setbonussyndicate.py b/eos/effects/setbonussyndicate.py
new file mode 100755
index 000000000..504388956
--- /dev/null
+++ b/eos/effects/setbonussyndicate.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Low grade Edge (6 of 6)
+runTime = "early"
+type = "passive"
+def handler(fit, implant, context):
+ fit.implants.filteredItemMultiply(lambda implant: "boosterAttributeModifier" in implant.itemModifiedAttributes and \
+ "implantSetSyndicate" in implant.itemModifiedAttributes,
+ "boosterAttributeModifier", implant.getModifiedItemAttr("implantSetSyndicate"))
\ No newline at end of file
diff --git a/eos/effects/setbonusthukker.py b/eos/effects/setbonusthukker.py
new file mode 100755
index 000000000..a2a0e0504
--- /dev/null
+++ b/eos/effects/setbonusthukker.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Low grade Nomad (6 of 6)
+runTime = "early"
+type = "passive"
+def handler(fit, implant, context):
+ fit.implants.filteredItemMultiply(lambda implant: "agilityBonus" in implant.itemModifiedAttributes and \
+ "implantSetThukker" in implant.itemModifiedAttributes,
+ "agilityBonus", implant.getModifiedItemAttr("implantSetThukker"))
\ No newline at end of file
diff --git a/eos/effects/sharpshooterrangeskillbonuspostpercentmaxrangelocationshipmodulesrequiringgunnery.py b/eos/effects/sharpshooterrangeskillbonuspostpercentmaxrangelocationshipmodulesrequiringgunnery.py
new file mode 100755
index 000000000..275e3cdaf
--- /dev/null
+++ b/eos/effects/sharpshooterrangeskillbonuspostpercentmaxrangelocationshipmodulesrequiringgunnery.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implants named like: Frentix Booster (4 of 4)
+# Implants named like: Zainou 'Deadeye' Sharpshooter ST (6 of 6)
+# Skill: Sharpshooter
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
+ "maxRange", container.getModifiedItemAttr("rangeSkillBonus") * level)
diff --git a/eos/effects/shieldboostamplifier.py b/eos/effects/shieldboostamplifier.py
new file mode 100755
index 000000000..250a15d92
--- /dev/null
+++ b/eos/effects/shieldboostamplifier.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules from group: Capacitor Power Relay (25 of 25)
+# Modules from group: Shield Boost Amplifier (25 of 25)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Operation") or mod.item.requiresSkill("Capital Shield Operation"),
+ "shieldBonus", module.getModifiedItemAttr("shieldBoostMultiplier"),
+ stackingPenalties = True)
diff --git a/eos/effects/shieldboostamplifierpassive.py b/eos/effects/shieldboostamplifierpassive.py
new file mode 100755
index 000000000..ed0c65fb2
--- /dev/null
+++ b/eos/effects/shieldboostamplifierpassive.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Crystal (10 of 12)
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Operation"),
+ "shieldBonus", container.getModifiedItemAttr("shieldBoostMultiplier"))
diff --git a/eos/effects/shieldboostamplifierpassivebooster.py b/eos/effects/shieldboostamplifierpassivebooster.py
new file mode 100755
index 000000000..dbfd33587
--- /dev/null
+++ b/eos/effects/shieldboostamplifierpassivebooster.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Blue Pill Booster (5 of 5)
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Operation"),
+ "shieldBonus", container.getModifiedItemAttr("shieldBoostMultiplier"))
diff --git a/eos/effects/shieldboosterdurationbonusshieldskills.py b/eos/effects/shieldboosterdurationbonusshieldskills.py
new file mode 100755
index 000000000..b8dd94017
--- /dev/null
+++ b/eos/effects/shieldboosterdurationbonusshieldskills.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules named like: Core Defense Operational Solidifier (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Operation"),
+ "duration", module.getModifiedItemAttr("durationSkillBonus"))
\ No newline at end of file
diff --git a/eos/effects/shieldboosting.py b/eos/effects/shieldboosting.py
new file mode 100755
index 000000000..22e126400
--- /dev/null
+++ b/eos/effects/shieldboosting.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules from group: Shield Booster (87 of 87)
+runTime = "late"
+type = "active"
+def handler(fit, module, context):
+ amount = module.getModifiedItemAttr("shieldBonus")
+ speed = module.getModifiedItemAttr("duration") / 1000.0
+ fit.extraAttributes.increase("shieldRepair", amount / speed)
\ No newline at end of file
diff --git a/eos/effects/shieldcapacityaddpassive.py b/eos/effects/shieldcapacityaddpassive.py
new file mode 100755
index 000000000..2e762f499
--- /dev/null
+++ b/eos/effects/shieldcapacityaddpassive.py
@@ -0,0 +1,5 @@
+# Used by:
+# Subsystems from group: Defensive Systems (16 of 16)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.increaseItemAttr("shieldCapacity", module.getModifiedItemAttr("shieldCapacity"))
diff --git a/eos/effects/shieldcapacitybonusonline.py b/eos/effects/shieldcapacitybonusonline.py
new file mode 100755
index 000000000..e25bf5e5e
--- /dev/null
+++ b/eos/effects/shieldcapacitybonusonline.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules from group: Shield Amplifier (88 of 88)
+# Modules from group: Shield Extender (37 of 37)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.increaseItemAttr("shieldCapacity", module.getModifiedItemAttr("capacityBonus"))
\ No newline at end of file
diff --git a/eos/effects/shieldcapacitymultiply.py b/eos/effects/shieldcapacitymultiply.py
new file mode 100755
index 000000000..9822c0ceb
--- /dev/null
+++ b/eos/effects/shieldcapacitymultiply.py
@@ -0,0 +1,10 @@
+# Used by:
+# Modules from group: Capacitor Flux Coil (12 of 12)
+# Modules from group: Capacitor Power Relay (25 of 25)
+# Modules from group: Power Diagnostic System (31 of 31)
+# Modules from group: Reactor Control Unit (28 of 28)
+# 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("shieldCapacity", module.getModifiedItemAttr("shieldCapacityMultiplier"))
\ No newline at end of file
diff --git a/eos/effects/shielddefensiveoperationsshieldcapacitybonuspostpercentshieldcapacitygangships.py b/eos/effects/shielddefensiveoperationsshieldcapacitybonuspostpercentshieldcapacitygangships.py
new file mode 100755
index 000000000..645fc1d6a
--- /dev/null
+++ b/eos/effects/shielddefensiveoperationsshieldcapacitybonuspostpercentshieldcapacitygangships.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implant: Siege Warfare Mindlink
+# Skill: Siege Warfare
+type = "gang"
+gangBoost = "shieldCapacity"
+gangBonus = "shieldCapacityBonus"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.ship.boostItemAttr(gangBoost, container.getModifiedItemAttr(gangBonus) * level)
diff --git a/eos/effects/shieldemmisionsystemscapneedbonuspostpercentcapacitorneedlocationshipmodulesrequiringshieldemmisionsystems.py b/eos/effects/shieldemmisionsystemscapneedbonuspostpercentcapacitorneedlocationshipmodulesrequiringshieldemmisionsystems.py
new file mode 100755
index 000000000..0b76d35a4
--- /dev/null
+++ b/eos/effects/shieldemmisionsystemscapneedbonuspostpercentcapacitorneedlocationshipmodulesrequiringshieldemmisionsystems.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Zainou 'Gnome' Shield Emission Systems SE (6 of 6)
+# Skill: Shield Emission Systems
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"),
+ "capacitorNeed", container.getModifiedItemAttr("capNeedBonus") * level)
diff --git a/eos/effects/shieldmanagementshieldcapacitybonuspostpercentcapacitylocationshipgroupshield.py b/eos/effects/shieldmanagementshieldcapacitybonuspostpercentcapacitylocationshipgroupshield.py
new file mode 100755
index 000000000..e963f437a
--- /dev/null
+++ b/eos/effects/shieldmanagementshieldcapacitybonuspostpercentcapacitylocationshipgroupshield.py
@@ -0,0 +1,10 @@
+# Used by:
+# Implants named like: Zainou 'Gnome' Shield Management SM (6 of 6)
+# Modules named like: Core Defense Field Extender (8 of 8)
+# Modules named like: QA Multiship Module Players (4 of 4)
+# Implant: Sansha Modified 'Gnome' Implant
+# Skill: Shield Management
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.ship.boostItemAttr("shieldCapacity", container.getModifiedItemAttr("shieldCapacityBonus") * level)
diff --git a/eos/effects/shieldoperationrechargeratebonuspostpercentrechargeratelocationshipgroupshield.py b/eos/effects/shieldoperationrechargeratebonuspostpercentrechargeratelocationshipgroupshield.py
new file mode 100755
index 000000000..61813a757
--- /dev/null
+++ b/eos/effects/shieldoperationrechargeratebonuspostpercentrechargeratelocationshipgroupshield.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implants named like: Zainou 'Gnome' Shield Operation SP (6 of 6)
+# Modules named like: Core Defense Field Purger (8 of 8)
+# Implant: Sansha Modified 'Gnome' Implant
+# Skill: Shield Operation
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.ship.boostItemAttr("shieldRechargeRate", container.getModifiedItemAttr("rechargeratebonus") * level)
diff --git a/eos/effects/shieldoperationskillboostcapacitorneedbonus.py b/eos/effects/shieldoperationskillboostcapacitorneedbonus.py
new file mode 100755
index 000000000..9140e2749
--- /dev/null
+++ b/eos/effects/shieldoperationskillboostcapacitorneedbonus.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules named like: Core Defense Capacitor Safeguard (8 of 8)
+# Skill: Shield Compensation
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Operation"),
+ "capacitorNeed", container.getModifiedItemAttr("shieldBoostCapacitorBonus") * level)
diff --git a/eos/effects/shieldrechargerateaddpassive.py b/eos/effects/shieldrechargerateaddpassive.py
new file mode 100755
index 000000000..0c78f5a93
--- /dev/null
+++ b/eos/effects/shieldrechargerateaddpassive.py
@@ -0,0 +1,5 @@
+# Used by:
+# Subsystems from group: Defensive Systems (16 of 16)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.increaseItemAttr("shieldRechargeRate", module.getModifiedItemAttr("shieldRechargeRate") or 0)
diff --git a/eos/effects/shieldtransfer.py b/eos/effects/shieldtransfer.py
new file mode 100755
index 000000000..176e50e7f
--- /dev/null
+++ b/eos/effects/shieldtransfer.py
@@ -0,0 +1,10 @@
+# Used by:
+# Modules from group: Shield Transporter (39 of 39)
+# Drones named like: Shield Maintenance Bot (6 of 6)
+# Module: QA Shield Transporter - 5 Players
+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/shieldtransportcpuneedbonuseffect.py b/eos/effects/shieldtransportcpuneedbonuseffect.py
new file mode 100755
index 000000000..6c0529471
--- /dev/null
+++ b/eos/effects/shieldtransportcpuneedbonuseffect.py
@@ -0,0 +1,6 @@
+# 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 == "Shield Transporter",
+ "cpu", ship.getModifiedItemAttr("shieldTransportCpuNeedBonus"))
diff --git a/eos/effects/shieldtransportermaxrangebonus.py b/eos/effects/shieldtransportermaxrangebonus.py
new file mode 100755
index 000000000..d7abd5088
--- /dev/null
+++ b/eos/effects/shieldtransportermaxrangebonus.py
@@ -0,0 +1,9 @@
+# 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 == "Shield Transporter",
+ "shieldTransferRange", ship.getModifiedItemAttr("maxRangeBonus"))
diff --git a/eos/effects/shieldupgradespowerneedbonuspostpercentpowerlocationshipmodulesrequiringshieldupgrades.py b/eos/effects/shieldupgradespowerneedbonuspostpercentpowerlocationshipmodulesrequiringshieldupgrades.py
new file mode 100755
index 000000000..3691f4ced
--- /dev/null
+++ b/eos/effects/shieldupgradespowerneedbonuspostpercentpowerlocationshipmodulesrequiringshieldupgrades.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implants named like: Zainou 'Gnome' Shield Upgrades SU (6 of 6)
+# Modules named like: Core Defense Charge Economizer (8 of 8)
+# Skill: Shield Upgrades
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Upgrades"),
+ "power", container.getModifiedItemAttr("powerNeedBonus") * level)
diff --git a/eos/effects/shipadvancedspaceshipcommandagilitybonus.py b/eos/effects/shipadvancedspaceshipcommandagilitybonus.py
new file mode 100755
index 000000000..edcd05dfd
--- /dev/null
+++ b/eos/effects/shipadvancedspaceshipcommandagilitybonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Items from market group: Ships > Capital Ships (26 of 27)
+type = "passive"
+def handler(fit, ship, context):
+ skill = fit.character.getSkill("Advanced Spaceship Command")
+ fit.ship.boostItemAttr("agility", skill.getModifiedItemAttr("agilityBonus") * skill.level)
diff --git a/eos/effects/shiparmoremandexpandkinandthmresistanceac2.py b/eos/effects/shiparmoremandexpandkinandthmresistanceac2.py
new file mode 100755
index 000000000..a486f5b26
--- /dev/null
+++ b/eos/effects/shiparmoremandexpandkinandthmresistanceac2.py
@@ -0,0 +1,9 @@
+# Used by:
+# Ship: Sacrilege
+# Ship: Vangel
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Cruiser").level
+ damageTypes = ("Em", "Explosive", "Kinetic", "Thermal")
+ for damageType in damageTypes:
+ fit.ship.boostItemAttr("armor{0}DamageResonance".format(damageType), ship.getModifiedItemAttr("shipBonusAC2") * level)
diff --git a/eos/effects/shiparmoremresistance1abc1.py b/eos/effects/shiparmoremresistance1abc1.py
new file mode 100755
index 000000000..bee9b3b48
--- /dev/null
+++ b/eos/effects/shiparmoremresistance1abc1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Variations of ship: Prophecy (3 of 3)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battlecruiser").level
+ fit.ship.boostItemAttr("armorEmDamageResonance", ship.getModifiedItemAttr("shipBonusABC1") * level)
diff --git a/eos/effects/shiparmoremresistanceac2.py b/eos/effects/shiparmoremresistanceac2.py
new file mode 100755
index 000000000..48650f984
--- /dev/null
+++ b/eos/effects/shiparmoremresistanceac2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Devoter
+# Ship: Maller
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Cruiser").level
+ fit.ship.boostItemAttr("armorEmDamageResonance", ship.getModifiedItemAttr("shipBonusAC2") * level)
diff --git a/eos/effects/shiparmoremresistanceaf1.py b/eos/effects/shiparmoremresistanceaf1.py
new file mode 100755
index 000000000..e84e98ef9
--- /dev/null
+++ b/eos/effects/shiparmoremresistanceaf1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Malice
+# Ship: Punisher
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.ship.boostItemAttr("armorEmDamageResonance", ship.getModifiedItemAttr("shipBonusAF") * level)
diff --git a/eos/effects/shiparmoremresistancegc2.py b/eos/effects/shiparmoremresistancegc2.py
new file mode 100755
index 000000000..df5ebc87e
--- /dev/null
+++ b/eos/effects/shiparmoremresistancegc2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Phobos
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Cruiser").level
+ fit.ship.boostItemAttr("armorEmDamageResonance", ship.getModifiedItemAttr("shipBonusGC2") * level)
diff --git a/eos/effects/shiparmoremresistancemc2.py b/eos/effects/shiparmoremresistancemc2.py
new file mode 100755
index 000000000..b2224c75b
--- /dev/null
+++ b/eos/effects/shiparmoremresistancemc2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Mimir
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Cruiser").level
+ fit.ship.boostItemAttr("armorEmDamageResonance", ship.getModifiedItemAttr("shipBonusMC2") * level)
diff --git a/eos/effects/shiparmoremresistancerookie.py b/eos/effects/shiparmoremresistancerookie.py
new file mode 100755
index 000000000..de990be04
--- /dev/null
+++ b/eos/effects/shiparmoremresistancerookie.py
@@ -0,0 +1,5 @@
+# Used by:
+# Ship: Impairor
+type = "passive"
+def handler(fit, ship, context):
+ fit.ship.boostItemAttr("armorEmDamageResonance", ship.getModifiedItemAttr("rookieArmorResistanceBonus"))
diff --git a/eos/effects/shiparmorexplosiveresistance1abc1.py b/eos/effects/shiparmorexplosiveresistance1abc1.py
new file mode 100755
index 000000000..b81ccd01d
--- /dev/null
+++ b/eos/effects/shiparmorexplosiveresistance1abc1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Variations of ship: Prophecy (3 of 3)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battlecruiser").level
+ fit.ship.boostItemAttr("armorExplosiveDamageResonance", ship.getModifiedItemAttr("shipBonusABC1") * level)
diff --git a/eos/effects/shiparmorexplosiveresistanceac2.py b/eos/effects/shiparmorexplosiveresistanceac2.py
new file mode 100755
index 000000000..740486cb0
--- /dev/null
+++ b/eos/effects/shiparmorexplosiveresistanceac2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Devoter
+# Ship: Maller
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Cruiser").level
+ fit.ship.boostItemAttr("armorExplosiveDamageResonance", ship.getModifiedItemAttr("shipBonusAC2") * level)
diff --git a/eos/effects/shiparmorexplosiveresistancegc2.py b/eos/effects/shiparmorexplosiveresistancegc2.py
new file mode 100755
index 000000000..49e184b7d
--- /dev/null
+++ b/eos/effects/shiparmorexplosiveresistancegc2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Phobos
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Cruiser").level
+ fit.ship.boostItemAttr("armorExplosiveDamageResonance", ship.getModifiedItemAttr("shipBonusGC2") * level)
diff --git a/eos/effects/shiparmorexplosiveresistancemc2.py b/eos/effects/shiparmorexplosiveresistancemc2.py
new file mode 100755
index 000000000..d89fc0bac
--- /dev/null
+++ b/eos/effects/shiparmorexplosiveresistancemc2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Mimir
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Cruiser").level
+ fit.ship.boostItemAttr("armorExplosiveDamageResonance", ship.getModifiedItemAttr("shipBonusMC2") * level)
diff --git a/eos/effects/shiparmorexresistanceaf1.py b/eos/effects/shiparmorexresistanceaf1.py
new file mode 100755
index 000000000..8580c185b
--- /dev/null
+++ b/eos/effects/shiparmorexresistanceaf1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Malice
+# Ship: Punisher
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.ship.boostItemAttr("armorExplosiveDamageResonance", ship.getModifiedItemAttr("shipBonusAF") * level)
diff --git a/eos/effects/shiparmorexresistancerookie.py b/eos/effects/shiparmorexresistancerookie.py
new file mode 100755
index 000000000..6c6db533c
--- /dev/null
+++ b/eos/effects/shiparmorexresistancerookie.py
@@ -0,0 +1,5 @@
+# Used by:
+# Ship: Impairor
+type = "passive"
+def handler(fit, ship, context):
+ fit.ship.boostItemAttr("armorExplosiveDamageResonance", ship.getModifiedItemAttr("rookieArmorResistanceBonus"))
diff --git a/eos/effects/shiparmorhpac2.py b/eos/effects/shiparmorhpac2.py
new file mode 100755
index 000000000..693848512
--- /dev/null
+++ b/eos/effects/shiparmorhpac2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Augoror Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Cruiser").level
+ fit.ship.boostItemAttr("armorHP", ship.getModifiedItemAttr("shipBonusAC2") * level)
diff --git a/eos/effects/shiparmorkineticresistance1abc1.py b/eos/effects/shiparmorkineticresistance1abc1.py
new file mode 100755
index 000000000..7ca53c617
--- /dev/null
+++ b/eos/effects/shiparmorkineticresistance1abc1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Variations of ship: Prophecy (3 of 3)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battlecruiser").level
+ fit.ship.boostItemAttr("armorKineticDamageResonance", ship.getModifiedItemAttr("shipBonusABC1") * level)
diff --git a/eos/effects/shiparmorkineticresistanceac2.py b/eos/effects/shiparmorkineticresistanceac2.py
new file mode 100755
index 000000000..f103ceca9
--- /dev/null
+++ b/eos/effects/shiparmorkineticresistanceac2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Devoter
+# Ship: Maller
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Cruiser").level
+ fit.ship.boostItemAttr("armorKineticDamageResonance", ship.getModifiedItemAttr("shipBonusAC2") * level)
diff --git a/eos/effects/shiparmorkineticresistancegc2.py b/eos/effects/shiparmorkineticresistancegc2.py
new file mode 100755
index 000000000..811221c61
--- /dev/null
+++ b/eos/effects/shiparmorkineticresistancegc2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Phobos
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Cruiser").level
+ fit.ship.boostItemAttr("armorKineticDamageResonance", ship.getModifiedItemAttr("shipBonusGC2") * level)
diff --git a/eos/effects/shiparmorkineticresistancemc2.py b/eos/effects/shiparmorkineticresistancemc2.py
new file mode 100755
index 000000000..576ab9738
--- /dev/null
+++ b/eos/effects/shiparmorkineticresistancemc2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Mimir
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Cruiser").level
+ fit.ship.boostItemAttr("armorKineticDamageResonance", ship.getModifiedItemAttr("shipBonusMC2") * level)
diff --git a/eos/effects/shiparmorknresistanceaf1.py b/eos/effects/shiparmorknresistanceaf1.py
new file mode 100755
index 000000000..754ae637d
--- /dev/null
+++ b/eos/effects/shiparmorknresistanceaf1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Malice
+# Ship: Punisher
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.ship.boostItemAttr("armorKineticDamageResonance", ship.getModifiedItemAttr("shipBonusAF") * level)
diff --git a/eos/effects/shiparmorknresistancerookie.py b/eos/effects/shiparmorknresistancerookie.py
new file mode 100755
index 000000000..876606e5e
--- /dev/null
+++ b/eos/effects/shiparmorknresistancerookie.py
@@ -0,0 +1,5 @@
+# Used by:
+# Ship: Impairor
+type = "passive"
+def handler(fit, ship, context):
+ fit.ship.boostItemAttr("armorKineticDamageResonance", ship.getModifiedItemAttr("rookieArmorResistanceBonus"))
diff --git a/eos/effects/shiparmorrepairing1gbc2.py b/eos/effects/shiparmorrepairing1gbc2.py
new file mode 100755
index 000000000..cc9fba5f4
--- /dev/null
+++ b/eos/effects/shiparmorrepairing1gbc2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Variations of ship: Brutix (3 of 4)
+# Ship: Myrmidon
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Battlecruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Unit",
+ "armorDamageAmount", ship.getModifiedItemAttr("shipBonusGBC2") * level)
diff --git a/eos/effects/shiparmorrepairinggf2.py b/eos/effects/shiparmorrepairinggf2.py
new file mode 100755
index 000000000..fdaca5537
--- /dev/null
+++ b/eos/effects/shiparmorrepairinggf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Incursus
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Repair Systems"),
+ "armorDamageAmount", ship.getModifiedItemAttr("shipBonusGF2") * level)
diff --git a/eos/effects/shiparmorrepairingrookie.py b/eos/effects/shiparmorrepairingrookie.py
new file mode 100755
index 000000000..6bdb59c18
--- /dev/null
+++ b/eos/effects/shiparmorrepairingrookie.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Velator
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Repair Systems"),
+ "armorDamageAmount", ship.getModifiedItemAttr("rookieArmorRepBonus"))
diff --git a/eos/effects/shiparmorthermalresistanceac2.py b/eos/effects/shiparmorthermalresistanceac2.py
new file mode 100755
index 000000000..33aeea5f4
--- /dev/null
+++ b/eos/effects/shiparmorthermalresistanceac2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Devoter
+# Ship: Maller
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Cruiser").level
+ fit.ship.boostItemAttr("armorThermalDamageResonance", ship.getModifiedItemAttr("shipBonusAC2") * level)
diff --git a/eos/effects/shiparmorthermalresistancegc2.py b/eos/effects/shiparmorthermalresistancegc2.py
new file mode 100755
index 000000000..d0a984017
--- /dev/null
+++ b/eos/effects/shiparmorthermalresistancegc2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Phobos
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Cruiser").level
+ fit.ship.boostItemAttr("armorThermalDamageResonance", ship.getModifiedItemAttr("shipBonusGC2") * level)
diff --git a/eos/effects/shiparmorthermalresistancemc2.py b/eos/effects/shiparmorthermalresistancemc2.py
new file mode 100755
index 000000000..fb7e1397b
--- /dev/null
+++ b/eos/effects/shiparmorthermalresistancemc2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Mimir
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Cruiser").level
+ fit.ship.boostItemAttr("armorThermalDamageResonance", ship.getModifiedItemAttr("shipBonusMC2") * level)
diff --git a/eos/effects/shiparmorthermresistance1abc1.py b/eos/effects/shiparmorthermresistance1abc1.py
new file mode 100755
index 000000000..5df026937
--- /dev/null
+++ b/eos/effects/shiparmorthermresistance1abc1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Variations of ship: Prophecy (3 of 3)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battlecruiser").level
+ fit.ship.boostItemAttr("armorThermalDamageResonance", ship.getModifiedItemAttr("shipBonusABC1") * level)
diff --git a/eos/effects/shiparmorthresistanceaf1.py b/eos/effects/shiparmorthresistanceaf1.py
new file mode 100755
index 000000000..578b95906
--- /dev/null
+++ b/eos/effects/shiparmorthresistanceaf1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Malice
+# Ship: Punisher
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.ship.boostItemAttr("armorThermalDamageResonance", ship.getModifiedItemAttr("shipBonusAF") * level)
diff --git a/eos/effects/shiparmorthresistancerookie.py b/eos/effects/shiparmorthresistancerookie.py
new file mode 100755
index 000000000..e56f209f9
--- /dev/null
+++ b/eos/effects/shiparmorthresistancerookie.py
@@ -0,0 +1,5 @@
+# Used by:
+# Ship: Impairor
+type = "passive"
+def handler(fit, ship, context):
+ fit.ship.boostItemAttr("armorThermalDamageResonance", ship.getModifiedItemAttr("rookieArmorResistanceBonus"))
diff --git a/eos/effects/shipbonusaf1torpedoexplosionvelocity.py b/eos/effects/shipbonusaf1torpedoexplosionvelocity.py
new file mode 100755
index 000000000..5b1e599c7
--- /dev/null
+++ b/eos/effects/shipbonusaf1torpedoexplosionvelocity.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Purifier
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Torpedoes"),
+ "aoeVelocity", ship.getModifiedItemAttr("shipBonusAF") * level)
diff --git a/eos/effects/shipbonusaf1torpedoflighttime.py b/eos/effects/shipbonusaf1torpedoflighttime.py
new file mode 100755
index 000000000..99fcbed4d
--- /dev/null
+++ b/eos/effects/shipbonusaf1torpedoflighttime.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Purifier
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Torpedoes"),
+ "explosionDelay", ship.getModifiedItemAttr("shipBonusAF") * level)
diff --git a/eos/effects/shipbonusafterburnercapneedatf.py b/eos/effects/shipbonusafterburnercapneedatf.py
new file mode 100755
index 000000000..36c6a2367
--- /dev/null
+++ b/eos/effects/shipbonusafterburnercapneedatf.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Freki
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Propulsion Module",
+ "capacitorNeed", ship.getModifiedItemAttr("shipBonusATF1"))
diff --git a/eos/effects/shipbonusaoevelocitycruiseandtorpedocb2.py b/eos/effects/shipbonusaoevelocitycruiseandtorpedocb2.py
new file mode 100755
index 000000000..0f49a9304
--- /dev/null
+++ b/eos/effects/shipbonusaoevelocitycruiseandtorpedocb2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Golem
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battleship").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Cruise Missiles") or mod.charge.requiresSkill("Torpedoes"),
+ "aoeVelocity", ship.getModifiedItemAttr("shipBonus2CB") * level)
diff --git a/eos/effects/shipbonusaoevelocitycruisemissilesmb2.py b/eos/effects/shipbonusaoevelocitycruisemissilesmb2.py
new file mode 100644
index 000000000..21d6670f3
--- /dev/null
+++ b/eos/effects/shipbonusaoevelocitycruisemissilesmb2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Typhoon
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Battleship").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Cruise Missiles"),
+ "aoeVelocity", ship.getModifiedItemAttr("shipBonusMB2") * level)
diff --git a/eos/effects/shipbonusaoevelocityrocketscd2.py b/eos/effects/shipbonusaoevelocityrocketscd2.py
new file mode 100755
index 000000000..48bfa5d30
--- /dev/null
+++ b/eos/effects/shipbonusaoevelocityrocketscd2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Corax
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Destroyer").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"),
+ "aoeVelocity", ship.getModifiedItemAttr("shipBonusCD2") * level)
diff --git a/eos/effects/shipbonusaoevelocitystandardmissilescd2.py b/eos/effects/shipbonusaoevelocitystandardmissilescd2.py
new file mode 100755
index 000000000..c8a7d4530
--- /dev/null
+++ b/eos/effects/shipbonusaoevelocitystandardmissilescd2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Corax
+# Ship: Flycatcher
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Destroyer").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Light Missiles"),
+ "aoeVelocity", ship.getModifiedItemAttr("shipBonusCD2") * level)
diff --git a/eos/effects/shipbonusarmoremandexpandkinandthermresistance2af.py b/eos/effects/shipbonusarmoremandexpandkinandthermresistance2af.py
new file mode 100755
index 000000000..19b1445a6
--- /dev/null
+++ b/eos/effects/shipbonusarmoremandexpandkinandthermresistance2af.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Malediction
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ damageTypes = ("Em", "Explosive", "Kinetic", "Thermal")
+ for damageType in damageTypes:
+ fit.ship.boostItemAttr("armor{0}DamageResonance".format(damageType), ship.getModifiedItemAttr("shipBonus2AF") * level)
diff --git a/eos/effects/shipbonusarmorresistab.py b/eos/effects/shipbonusarmorresistab.py
new file mode 100755
index 000000000..92dc53fa1
--- /dev/null
+++ b/eos/effects/shipbonusarmorresistab.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Abaddon
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battleship").level
+ for type in ("Em", "Explosive", "Kinetic", "Thermal"):
+ fit.ship.boostItemAttr("armor{0}DamageResonance".format(type), ship.getModifiedItemAttr("shipBonusAB") * level)
diff --git a/eos/effects/shipbonuscapcapab.py b/eos/effects/shipbonuscapcapab.py
new file mode 100755
index 000000000..e00d59471
--- /dev/null
+++ b/eos/effects/shipbonuscapcapab.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Apocalypse Imperial Issue
+# Ship: Paladin
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battleship").level
+ fit.ship.boostItemAttr("capacitorCapacity", ship.getModifiedItemAttr("shipBonusAB2") * level)
diff --git a/eos/effects/shipbonuscargo2gi.py b/eos/effects/shipbonuscargo2gi.py
new file mode 100755
index 000000000..b51f9b77a
--- /dev/null
+++ b/eos/effects/shipbonuscargo2gi.py
@@ -0,0 +1,14 @@
+# Used by:
+# Ships named like: Iteron Mark (7 of 7)
+# Variations of ship: Iteron (2 of 2)
+# Ship: Occator
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Industrial").level
+ # TODO: investigate if we can live without such ifs or hardcoding
+ # Viator doesn't have GI bonus
+ if "shipBonusGI" in fit.ship.item.attributes:
+ bonusAttr = "shipBonusGI"
+ else:
+ bonusAttr = "shipBonusGI2"
+ fit.ship.boostItemAttr("capacity", ship.getModifiedItemAttr(bonusAttr) * level)
diff --git a/eos/effects/shipbonuscargoci.py b/eos/effects/shipbonuscargoci.py
new file mode 100755
index 000000000..90038a824
--- /dev/null
+++ b/eos/effects/shipbonuscargoci.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Badger (2 of 2)
+# Variations of ship: Badger Mark II (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Industrial").level
+ fit.ship.boostItemAttr("capacity", ship.getModifiedItemAttr("shipBonusCI") * level)
diff --git a/eos/effects/shipbonuscargomi.py b/eos/effects/shipbonuscargomi.py
new file mode 100755
index 000000000..85c0b7620
--- /dev/null
+++ b/eos/effects/shipbonuscargomi.py
@@ -0,0 +1,8 @@
+# Used by:
+# Variations of ship: Mammoth (2 of 2)
+# Variations of ship: Wreathe (2 of 2)
+# Ship: Hoarder
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Industrial").level
+ fit.ship.boostItemAttr("capacity", ship.getModifiedItemAttr("shipBonusMI") * level)
diff --git a/eos/effects/shipbonuscf1torpedoexplosionvelocity.py b/eos/effects/shipbonuscf1torpedoexplosionvelocity.py
new file mode 100755
index 000000000..4b823944e
--- /dev/null
+++ b/eos/effects/shipbonuscf1torpedoexplosionvelocity.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Manticore
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Torpedoes"),
+ "aoeVelocity", ship.getModifiedItemAttr("shipBonusCF") * level)
diff --git a/eos/effects/shipbonuscf1torpedoflighttime.py b/eos/effects/shipbonuscf1torpedoflighttime.py
new file mode 100755
index 000000000..1f08bea5f
--- /dev/null
+++ b/eos/effects/shipbonuscf1torpedoflighttime.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Manticore
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Torpedoes"),
+ "explosionDelay", ship.getModifiedItemAttr("shipBonusCF") * level)
diff --git a/eos/effects/shipbonusdronearmorhitpointsab.py b/eos/effects/shipbonusdronearmorhitpointsab.py
new file mode 100644
index 000000000..a5521ce8b
--- /dev/null
+++ b/eos/effects/shipbonusdronearmorhitpointsab.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Armageddon
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battleship").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "armorHP", ship.getModifiedItemAttr("shipBonusAB") * level)
diff --git a/eos/effects/shipbonusdronearmorhitpointsgf2.py b/eos/effects/shipbonusdronearmorhitpointsgf2.py
new file mode 100755
index 000000000..0454cd51b
--- /dev/null
+++ b/eos/effects/shipbonusdronearmorhitpointsgf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Ishkur
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Frigate").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "armorHP", ship.getModifiedItemAttr("shipBonusGF2") * level)
diff --git a/eos/effects/shipbonusdronecapacitygf.py b/eos/effects/shipbonusdronecapacitygf.py
new file mode 100755
index 000000000..cf55c7175
--- /dev/null
+++ b/eos/effects/shipbonusdronecapacitygf.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Worm
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Frigate").level
+ fit.ship.increaseItemAttr("droneCapacity", ship.getModifiedItemAttr("shipBonusGF") * level)
diff --git a/eos/effects/shipbonusdronedamagegf2.py b/eos/effects/shipbonusdronedamagegf2.py
new file mode 100755
index 000000000..5cf79392c
--- /dev/null
+++ b/eos/effects/shipbonusdronedamagegf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Utu
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Frigate").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusGF2") * level)
diff --git a/eos/effects/shipbonusdronedamagemultiplierab.py b/eos/effects/shipbonusdronedamagemultiplierab.py
new file mode 100644
index 000000000..3bb30b9c8
--- /dev/null
+++ b/eos/effects/shipbonusdronedamagemultiplierab.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Armageddon
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battleship").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusAB") * level)
diff --git a/eos/effects/shipbonusdronedamagemultiplierabc2.py b/eos/effects/shipbonusdronedamagemultiplierabc2.py
new file mode 100755
index 000000000..e3a0ebccd
--- /dev/null
+++ b/eos/effects/shipbonusdronedamagemultiplierabc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Prophecy
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battlecruiser").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusABC2") * level)
diff --git a/eos/effects/shipbonusdronedamagemultiplierac2.py b/eos/effects/shipbonusdronedamagemultiplierac2.py
new file mode 100755
index 000000000..a6c7a18e2
--- /dev/null
+++ b/eos/effects/shipbonusdronedamagemultiplierac2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Arbitrator (3 of 3)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Cruiser").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusAC2") * level)
diff --git a/eos/effects/shipbonusdronedamagemultiplierad1.py b/eos/effects/shipbonusdronedamagemultiplierad1.py
new file mode 100644
index 000000000..63591015d
--- /dev/null
+++ b/eos/effects/shipbonusdronedamagemultiplierad1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Dragoon
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Destroyer").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusAD1") * level)
diff --git a/eos/effects/shipbonusdronedamagemultipliergb2.py b/eos/effects/shipbonusdronedamagemultipliergb2.py
new file mode 100755
index 000000000..2567cae59
--- /dev/null
+++ b/eos/effects/shipbonusdronedamagemultipliergb2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Variations of ship: Dominix (3 of 3)
+# Ship: Rattlesnake
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Battleship").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusGB2") * level)
diff --git a/eos/effects/shipbonusdronedamagemultipliergbc1.py b/eos/effects/shipbonusdronedamagemultipliergbc1.py
new file mode 100755
index 000000000..cfc4dc678
--- /dev/null
+++ b/eos/effects/shipbonusdronedamagemultipliergbc1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Myrmidon
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Battlecruiser").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusGBC1") * level)
diff --git a/eos/effects/shipbonusdronedamagemultipliergc2.py b/eos/effects/shipbonusdronedamagemultipliergc2.py
new file mode 100755
index 000000000..892173d90
--- /dev/null
+++ b/eos/effects/shipbonusdronedamagemultipliergc2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Variations of ship: Vexor (3 of 4)
+# Ship: Gila
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Cruiser").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusGC2") * level)
diff --git a/eos/effects/shipbonusdronedamagemultipliergd1.py b/eos/effects/shipbonusdronedamagemultipliergd1.py
new file mode 100755
index 000000000..c83cd3fac
--- /dev/null
+++ b/eos/effects/shipbonusdronedamagemultipliergd1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Algos
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Destroyer").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusGD1") * level)
diff --git a/eos/effects/shipbonusdronedamagemultiplierrookie.py b/eos/effects/shipbonusdronedamagemultiplierrookie.py
new file mode 100755
index 000000000..b8e884a56
--- /dev/null
+++ b/eos/effects/shipbonusdronedamagemultiplierrookie.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Gnosis
+# Ship: Taipan
+# Ship: Velator
+type = "passive"
+def handler(fit, ship, context):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "damageMultiplier", ship.getModifiedItemAttr("rookieDroneBonus"))
diff --git a/eos/effects/shipbonusdronehitpointsabc2.py b/eos/effects/shipbonusdronehitpointsabc2.py
new file mode 100755
index 000000000..24dd08960
--- /dev/null
+++ b/eos/effects/shipbonusdronehitpointsabc2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Prophecy
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battlecruiser").level
+ for layer in ("shieldCapacity", "armorHP", "hp"):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ layer, ship.getModifiedItemAttr("shipBonusABC2") * level)
diff --git a/eos/effects/shipbonusdronehitpointsad1.py b/eos/effects/shipbonusdronehitpointsad1.py
new file mode 100644
index 000000000..c8574cd40
--- /dev/null
+++ b/eos/effects/shipbonusdronehitpointsad1.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Dragoon
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Destroyer").level
+ for layer in ("shieldCapacity", "armorHP", "hp"):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ layer, ship.getModifiedItemAttr("shipBonusAD1") * level)
diff --git a/eos/effects/shipbonusdronehitpointsfixedac2.py b/eos/effects/shipbonusdronehitpointsfixedac2.py
new file mode 100755
index 000000000..0c09c9baf
--- /dev/null
+++ b/eos/effects/shipbonusdronehitpointsfixedac2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Variations of ship: Arbitrator (3 of 3)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Cruiser").level
+ for type in ("shieldCapacity", "armorHP", "hp"):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ type, ship.getModifiedItemAttr("shipBonusAC2") * level)
diff --git a/eos/effects/shipbonusdronehitpointsgb2.py b/eos/effects/shipbonusdronehitpointsgb2.py
new file mode 100755
index 000000000..83b91493a
--- /dev/null
+++ b/eos/effects/shipbonusdronehitpointsgb2.py
@@ -0,0 +1,9 @@
+# Used by:
+# Variations of ship: Dominix (3 of 3)
+# Ship: Rattlesnake
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Battleship").level
+ for type in ("shieldCapacity", "armorHP", "hp"):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ type, ship.getModifiedItemAttr("shipBonusGB2") * level)
diff --git a/eos/effects/shipbonusdronehitpointsgbc1.py b/eos/effects/shipbonusdronehitpointsgbc1.py
new file mode 100755
index 000000000..79d3d02db
--- /dev/null
+++ b/eos/effects/shipbonusdronehitpointsgbc1.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Myrmidon
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Battlecruiser").level
+ for layer in ("shieldCapacity", "armorHP", "hp"):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ layer, ship.getModifiedItemAttr("shipBonusGBC1") * level)
diff --git a/eos/effects/shipbonusdronehitpointsgc2.py b/eos/effects/shipbonusdronehitpointsgc2.py
new file mode 100755
index 000000000..052d5c595
--- /dev/null
+++ b/eos/effects/shipbonusdronehitpointsgc2.py
@@ -0,0 +1,9 @@
+# Used by:
+# Variations of ship: Vexor (3 of 4)
+# Ship: Gila
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Cruiser").level
+ for type in ("shieldCapacity", "armorHP", "hp"):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ type, ship.getModifiedItemAttr("shipBonusGC2") * level)
diff --git a/eos/effects/shipbonusdronehitpointsgd1.py b/eos/effects/shipbonusdronehitpointsgd1.py
new file mode 100755
index 000000000..fbe058ec9
--- /dev/null
+++ b/eos/effects/shipbonusdronehitpointsgd1.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Algos
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Destroyer").level
+ for layer in ("shieldCapacity", "armorHP", "hp"):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ layer, ship.getModifiedItemAttr("shipBonusGD1") * level)
diff --git a/eos/effects/shipbonusdronehitpointsgf.py b/eos/effects/shipbonusdronehitpointsgf.py
new file mode 100755
index 000000000..6fa93448e
--- /dev/null
+++ b/eos/effects/shipbonusdronehitpointsgf.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Tristan
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Frigate").level
+ for layer in ("shieldCapacity", "armorHP", "hp"):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ layer, ship.getModifiedItemAttr("shipBonusGF") * level)
diff --git a/eos/effects/shipbonusdronehitpointsgf2.py b/eos/effects/shipbonusdronehitpointsgf2.py
new file mode 100755
index 000000000..ae0cba4ac
--- /dev/null
+++ b/eos/effects/shipbonusdronehitpointsgf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Ishkur
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Frigate").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "hp", ship.getModifiedItemAttr("shipBonusGF2") * level)
diff --git a/eos/effects/shipbonusdronehitpointsrookie.py b/eos/effects/shipbonusdronehitpointsrookie.py
new file mode 100755
index 000000000..e7d7c3e37
--- /dev/null
+++ b/eos/effects/shipbonusdronehitpointsrookie.py
@@ -0,0 +1,9 @@
+# Used by:
+# Ship: Gnosis
+# Ship: Taipan
+# Ship: Velator
+type = "passive"
+def handler(fit, ship, context):
+ for type in ("shieldCapacity", "armorHP", "hp"):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ type, ship.getModifiedItemAttr("rookieDroneBonus"))
\ No newline at end of file
diff --git a/eos/effects/shipbonusdroneminingamountac2.py b/eos/effects/shipbonusdroneminingamountac2.py
new file mode 100755
index 000000000..e94095a66
--- /dev/null
+++ b/eos/effects/shipbonusdroneminingamountac2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Arbitrator
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Cruiser").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.group.name == "Mining Drone",
+ "miningAmount", ship.getModifiedItemAttr("shipBonusAC2") * level)
diff --git a/eos/effects/shipbonusdroneminingamountgc2.py b/eos/effects/shipbonusdroneminingamountgc2.py
new file mode 100755
index 000000000..ff6c472a9
--- /dev/null
+++ b/eos/effects/shipbonusdroneminingamountgc2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Vexor
+# Ship: Vexor Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Cruiser").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.group.name == "Mining Drone",
+ "miningAmount", ship.getModifiedItemAttr("shipBonusGC2") * level)
diff --git a/eos/effects/shipbonusdronemwdboostgc.py b/eos/effects/shipbonusdronemwdboostgc.py
new file mode 100644
index 000000000..8ef0c8030
--- /dev/null
+++ b/eos/effects/shipbonusdronemwdboostgc.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Vexor Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Cruiser").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusGC") * level)
diff --git a/eos/effects/shipbonusdronemwdboostrole.py b/eos/effects/shipbonusdronemwdboostrole.py
new file mode 100755
index 000000000..70ff1e6fd
--- /dev/null
+++ b/eos/effects/shipbonusdronemwdboostrole.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Algos
+# Ship: Dragoon
+type = "passive"
+def handler(fit, ship, context):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shipbonusdroneoptimalrangegb.py b/eos/effects/shipbonusdroneoptimalrangegb.py
new file mode 100644
index 000000000..b16c3ab9b
--- /dev/null
+++ b/eos/effects/shipbonusdroneoptimalrangegb.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Dominix
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Battleship").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "maxRange", ship.getModifiedItemAttr("shipBonusGB") * level)
diff --git a/eos/effects/shipbonusdroneshieldhitpointsab.py b/eos/effects/shipbonusdroneshieldhitpointsab.py
new file mode 100644
index 000000000..50805d7b4
--- /dev/null
+++ b/eos/effects/shipbonusdroneshieldhitpointsab.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Armageddon
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battleship").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "shieldCapacity", ship.getModifiedItemAttr("shipBonusAB") * level)
diff --git a/eos/effects/shipbonusdroneshieldhitpointsgf2.py b/eos/effects/shipbonusdroneshieldhitpointsgf2.py
new file mode 100755
index 000000000..376a1d4e7
--- /dev/null
+++ b/eos/effects/shipbonusdroneshieldhitpointsgf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Ishkur
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Frigate").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "shieldCapacity", ship.getModifiedItemAttr("shipBonusGF2") * level)
diff --git a/eos/effects/shipbonusdronestructurehitpointsab.py b/eos/effects/shipbonusdronestructurehitpointsab.py
new file mode 100644
index 000000000..18a741990
--- /dev/null
+++ b/eos/effects/shipbonusdronestructurehitpointsab.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Armageddon
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battleship").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "hp", ship.getModifiedItemAttr("shipBonusAB") * level)
diff --git a/eos/effects/shipbonusdronetrackinggb.py b/eos/effects/shipbonusdronetrackinggb.py
new file mode 100644
index 000000000..25a78157a
--- /dev/null
+++ b/eos/effects/shipbonusdronetrackinggb.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Dominix
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Battleship").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "trackingSpeed", ship.getModifiedItemAttr("shipBonusGB") * level)
diff --git a/eos/effects/shipbonusdronetrackinggc.py b/eos/effects/shipbonusdronetrackinggc.py
new file mode 100644
index 000000000..302966d77
--- /dev/null
+++ b/eos/effects/shipbonusdronetrackinggc.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Vexor Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Cruiser").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "trackingSpeed", ship.getModifiedItemAttr("shipBonusGC") * level)
diff --git a/eos/effects/shipbonusdronetrackinggf.py b/eos/effects/shipbonusdronetrackinggf.py
new file mode 100755
index 000000000..19bb76cd7
--- /dev/null
+++ b/eos/effects/shipbonusdronetrackinggf.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Tristan
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Frigate").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "trackingSpeed", ship.getModifiedItemAttr("shipBonusGF") * level)
diff --git a/eos/effects/shipbonusecmstrengthbonuscc.py b/eos/effects/shipbonusecmstrengthbonuscc.py
new file mode 100755
index 000000000..49cbd6dd5
--- /dev/null
+++ b/eos/effects/shipbonusecmstrengthbonuscc.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Blackbird
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ for type in ("Gravimetric", "Magnetometric", "Ladar", "Radar"):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
+ "scan{0}StrengthBonus".format(type), ship.getModifiedItemAttr("shipBonusCC") * level)
diff --git a/eos/effects/shipbonuselitecover2torpedoemdamage.py b/eos/effects/shipbonuselitecover2torpedoemdamage.py
new file mode 100755
index 000000000..f259ec64c
--- /dev/null
+++ b/eos/effects/shipbonuselitecover2torpedoemdamage.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Purifier
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Covert Ops").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Torpedoes"),
+ "emDamage", ship.getModifiedItemAttr("eliteBonusCoverOps2") * level)
diff --git a/eos/effects/shipbonuselitecover2torpedoexplosivedamage.py b/eos/effects/shipbonuselitecover2torpedoexplosivedamage.py
new file mode 100755
index 000000000..d5e6875d7
--- /dev/null
+++ b/eos/effects/shipbonuselitecover2torpedoexplosivedamage.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Hound
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Covert Ops").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Torpedoes"),
+ "explosiveDamage", ship.getModifiedItemAttr("eliteBonusCoverOps2") * level)
diff --git a/eos/effects/shipbonuselitecover2torpedokineticdamage.py b/eos/effects/shipbonuselitecover2torpedokineticdamage.py
new file mode 100755
index 000000000..a609aa9c9
--- /dev/null
+++ b/eos/effects/shipbonuselitecover2torpedokineticdamage.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Manticore
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Covert Ops").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Torpedoes"),
+ "kineticDamage", ship.getModifiedItemAttr("eliteBonusCoverOps2") * level)
diff --git a/eos/effects/shipbonuselitecover2torpedothermaldamage.py b/eos/effects/shipbonuselitecover2torpedothermaldamage.py
new file mode 100755
index 000000000..031860672
--- /dev/null
+++ b/eos/effects/shipbonuselitecover2torpedothermaldamage.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Nemesis
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Covert Ops").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Torpedoes"),
+ "thermalDamage", ship.getModifiedItemAttr("eliteBonusCoverOps2") * level)
diff --git a/eos/effects/shipbonusemshieldresistancecb2.py b/eos/effects/shipbonusemshieldresistancecb2.py
new file mode 100755
index 000000000..ede4bdd6e
--- /dev/null
+++ b/eos/effects/shipbonusemshieldresistancecb2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Rattlesnake
+# Ship: Rokh
+# Ship: Scorpion Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battleship").level
+ fit.ship.boostItemAttr("shieldEmDamageResonance", ship.getModifiedItemAttr("shipBonus2CB") * level)
diff --git a/eos/effects/shipbonusemshieldresistanceore3.py b/eos/effects/shipbonusemshieldresistanceore3.py
new file mode 100755
index 000000000..e863beeaf
--- /dev/null
+++ b/eos/effects/shipbonusemshieldresistanceore3.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ships from group: Exhumer (3 of 3)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Mining Barge").level
+ fit.ship.boostItemAttr("shieldEmDamageResonance", ship.getModifiedItemAttr("shipBonusORE3") * level)
\ No newline at end of file
diff --git a/eos/effects/shipbonusenergyneutrangeab2.py b/eos/effects/shipbonusenergyneutrangeab2.py
new file mode 100644
index 000000000..de8dde7d6
--- /dev/null
+++ b/eos/effects/shipbonusenergyneutrangeab2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Armageddon
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer",
+ "energyDestabilizationRange", ship.getModifiedItemAttr("shipBonusAB2") * level)
diff --git a/eos/effects/shipbonusenergyneutrangead2.py b/eos/effects/shipbonusenergyneutrangead2.py
new file mode 100755
index 000000000..f27b4a443
--- /dev/null
+++ b/eos/effects/shipbonusenergyneutrangead2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Dragoon
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Destroyer").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer",
+ "energyDestabilizationRange", ship.getModifiedItemAttr("shipBonusAD2") * level)
diff --git a/eos/effects/shipbonusenergyvampirerangeab2.py b/eos/effects/shipbonusenergyvampirerangeab2.py
new file mode 100644
index 000000000..51fafe0ab
--- /dev/null
+++ b/eos/effects/shipbonusenergyvampirerangeab2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Armageddon
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire",
+ "powerTransferRange", ship.getModifiedItemAttr("shipBonusAB2") * level)
diff --git a/eos/effects/shipbonusenergyvampirerangead2.py b/eos/effects/shipbonusenergyvampirerangead2.py
new file mode 100755
index 000000000..0cbd1610e
--- /dev/null
+++ b/eos/effects/shipbonusenergyvampirerangead2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Dragoon
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Destroyer").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire",
+ "powerTransferRange", ship.getModifiedItemAttr("shipBonusAD2") * level)
diff --git a/eos/effects/shipbonusewremotesensordampenerfalloffbonusgc1.py b/eos/effects/shipbonusewremotesensordampenerfalloffbonusgc1.py
new file mode 100755
index 000000000..adc462654
--- /dev/null
+++ b/eos/effects/shipbonusewremotesensordampenerfalloffbonusgc1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Celestis
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Sensor Damper",
+ "falloff", ship.getModifiedItemAttr("shipBonusGC") * level)
diff --git a/eos/effects/shipbonusewremotesensordampenermaxtargetrangebonusgc2.py b/eos/effects/shipbonusewremotesensordampenermaxtargetrangebonusgc2.py
new file mode 100755
index 000000000..197d0181f
--- /dev/null
+++ b/eos/effects/shipbonusewremotesensordampenermaxtargetrangebonusgc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Celestis (3 of 3)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Sensor Damper",
+ "maxTargetRangeBonus", ship.getModifiedItemAttr("shipBonusGC2") * level)
diff --git a/eos/effects/shipbonusewremotesensordampenermaxtargetrangebonusgf2.py b/eos/effects/shipbonusewremotesensordampenermaxtargetrangebonusgf2.py
new file mode 100755
index 000000000..8320326f3
--- /dev/null
+++ b/eos/effects/shipbonusewremotesensordampenermaxtargetrangebonusgf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Maulus (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Sensor Damper",
+ "maxTargetRangeBonus", ship.getModifiedItemAttr("shipBonusGF2") * level)
diff --git a/eos/effects/shipbonusewremotesensordampenermaxtargetrangebonusrookie.py b/eos/effects/shipbonusewremotesensordampenermaxtargetrangebonusrookie.py
new file mode 100755
index 000000000..3447fe7d1
--- /dev/null
+++ b/eos/effects/shipbonusewremotesensordampenermaxtargetrangebonusrookie.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Velator
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Sensor Damper",
+ "maxTargetRangeBonus", ship.getModifiedItemAttr("rookieDampStrengthBonus"))
diff --git a/eos/effects/shipbonusewremotesensordampeneroptimalbonusgc1.py b/eos/effects/shipbonusewremotesensordampeneroptimalbonusgc1.py
new file mode 100755
index 000000000..603a06443
--- /dev/null
+++ b/eos/effects/shipbonusewremotesensordampeneroptimalbonusgc1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Celestis
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Sensor Damper",
+ "maxRange", ship.getModifiedItemAttr("shipBonusGC") * level)
diff --git a/eos/effects/shipbonusewremotesensordampenerscanresolutionbonusgc2.py b/eos/effects/shipbonusewremotesensordampenerscanresolutionbonusgc2.py
new file mode 100755
index 000000000..909cf5ce1
--- /dev/null
+++ b/eos/effects/shipbonusewremotesensordampenerscanresolutionbonusgc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Celestis (3 of 3)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Sensor Damper",
+ "scanResolutionBonus", ship.getModifiedItemAttr("shipBonusGC2") * level)
diff --git a/eos/effects/shipbonusewremotesensordampenerscanresolutionbonusgf2.py b/eos/effects/shipbonusewremotesensordampenerscanresolutionbonusgf2.py
new file mode 100755
index 000000000..e87b914d9
--- /dev/null
+++ b/eos/effects/shipbonusewremotesensordampenerscanresolutionbonusgf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Maulus (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Sensor Damper",
+ "scanResolutionBonus", ship.getModifiedItemAttr("shipBonusGF2") * level)
diff --git a/eos/effects/shipbonusewremotesensordampenerscanresolutionbonusrookie.py b/eos/effects/shipbonusewremotesensordampenerscanresolutionbonusrookie.py
new file mode 100755
index 000000000..641abf125
--- /dev/null
+++ b/eos/effects/shipbonusewremotesensordampenerscanresolutionbonusrookie.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Velator
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Sensor Damper",
+ "scanResolutionBonus", ship.getModifiedItemAttr("rookieDampStrengthBonus"))
diff --git a/eos/effects/shipbonusewweapondisruptionmaxrangebonusac1.py b/eos/effects/shipbonusewweapondisruptionmaxrangebonusac1.py
new file mode 100755
index 000000000..3ef364d02
--- /dev/null
+++ b/eos/effects/shipbonusewweapondisruptionmaxrangebonusac1.py
@@ -0,0 +1,9 @@
+# Used by:
+# Variations of ship: Arbitrator (3 of 3)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Disruptor",
+ "maxRangeBonus", ship.getModifiedItemAttr("shipBonusAC") * level)
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Disruptor",
+ "falloffBonus", ship.getModifiedItemAttr("shipBonusAC") * level)
diff --git a/eos/effects/shipbonusewweapondisruptionmaxrangebonusaf1.py b/eos/effects/shipbonusewweapondisruptionmaxrangebonusaf1.py
new file mode 100755
index 000000000..7b84161ef
--- /dev/null
+++ b/eos/effects/shipbonusewweapondisruptionmaxrangebonusaf1.py
@@ -0,0 +1,9 @@
+# Used by:
+# Ship: Crucifier
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Disruptor",
+ "maxRangeBonus", ship.getModifiedItemAttr("shipBonusAF") * level)
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Disruptor",
+ "falloffBonus", ship.getModifiedItemAttr("shipBonusAF") * level)
diff --git a/eos/effects/shipbonusewweapondisruptionmaxrangebonusaf2.py b/eos/effects/shipbonusewweapondisruptionmaxrangebonusaf2.py
new file mode 100755
index 000000000..e17472222
--- /dev/null
+++ b/eos/effects/shipbonusewweapondisruptionmaxrangebonusaf2.py
@@ -0,0 +1,9 @@
+# Used by:
+# Ship: Sentinel
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Disruptor",
+ "maxRangeBonus", ship.getModifiedItemAttr("shipBonus2AF") * level)
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Disruptor",
+ "falloffBonus", ship.getModifiedItemAttr("shipBonus2AF") * level)
diff --git a/eos/effects/shipbonusewweapondisruptionmaxrangebonusrookie.py b/eos/effects/shipbonusewweapondisruptionmaxrangebonusrookie.py
new file mode 100755
index 000000000..ab6f44cd5
--- /dev/null
+++ b/eos/effects/shipbonusewweapondisruptionmaxrangebonusrookie.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Impairor
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Disruptor",
+ "maxRangeBonus", ship.getModifiedItemAttr("rookieWeaponDisruptionBonus"))
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Disruptor",
+ "falloffBonus", ship.getModifiedItemAttr("rookieWeaponDisruptionBonus"))
diff --git a/eos/effects/shipbonusewweapondisruptiontrackingspeedbonusac1.py b/eos/effects/shipbonusewweapondisruptiontrackingspeedbonusac1.py
new file mode 100755
index 000000000..1dc4ed53d
--- /dev/null
+++ b/eos/effects/shipbonusewweapondisruptiontrackingspeedbonusac1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Arbitrator (3 of 3)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Disruptor",
+ "trackingSpeedBonus", ship.getModifiedItemAttr("shipBonusAC") * level)
diff --git a/eos/effects/shipbonusewweapondisruptiontrackingspeedbonusaf1.py b/eos/effects/shipbonusewweapondisruptiontrackingspeedbonusaf1.py
new file mode 100755
index 000000000..be1629b99
--- /dev/null
+++ b/eos/effects/shipbonusewweapondisruptiontrackingspeedbonusaf1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Crucifier
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Disruptor",
+ "trackingSpeedBonus", ship.getModifiedItemAttr("shipBonusAF") * level)
diff --git a/eos/effects/shipbonusewweapondisruptiontrackingspeedbonusaf2.py b/eos/effects/shipbonusewweapondisruptiontrackingspeedbonusaf2.py
new file mode 100755
index 000000000..d4160dbf9
--- /dev/null
+++ b/eos/effects/shipbonusewweapondisruptiontrackingspeedbonusaf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Sentinel
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Disruptor",
+ "trackingSpeedBonus", ship.getModifiedItemAttr("shipBonus2AF") * level)
diff --git a/eos/effects/shipbonusewweapondisruptiontrackingspeedbonusrookie.py b/eos/effects/shipbonusewweapondisruptiontrackingspeedbonusrookie.py
new file mode 100755
index 000000000..439154da7
--- /dev/null
+++ b/eos/effects/shipbonusewweapondisruptiontrackingspeedbonusrookie.py
@@ -0,0 +1,6 @@
+# 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/shipbonusexplosiveshieldresistancecb2.py b/eos/effects/shipbonusexplosiveshieldresistancecb2.py
new file mode 100755
index 000000000..dce81a58e
--- /dev/null
+++ b/eos/effects/shipbonusexplosiveshieldresistancecb2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Rattlesnake
+# Ship: Rokh
+# Ship: Scorpion Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battleship").level
+ fit.ship.boostItemAttr("shieldExplosiveDamageResonance", ship.getModifiedItemAttr("shipBonus2CB") * level)
diff --git a/eos/effects/shipbonusexplosiveshieldresistanceore3.py b/eos/effects/shipbonusexplosiveshieldresistanceore3.py
new file mode 100755
index 000000000..59e9754ea
--- /dev/null
+++ b/eos/effects/shipbonusexplosiveshieldresistanceore3.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ships from group: Exhumer (3 of 3)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Mining Barge").level
+ fit.ship.boostItemAttr("shieldExplosiveDamageResonance", ship.getModifiedItemAttr("shipBonusORE3") * level)
\ No newline at end of file
diff --git a/eos/effects/shipbonusfrigatesizedlightmissileexplosivedamagemd1.py b/eos/effects/shipbonusfrigatesizedlightmissileexplosivedamagemd1.py
new file mode 100755
index 000000000..d61bd97a8
--- /dev/null
+++ b/eos/effects/shipbonusfrigatesizedlightmissileexplosivedamagemd1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Talwar
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Destroyer").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Light Missiles"),
+ "explosiveDamage", ship.getModifiedItemAttr("shipBonusMD1") * level)
diff --git a/eos/effects/shipbonusfrigatesizedmissilekineticdamagecd1.py b/eos/effects/shipbonusfrigatesizedmissilekineticdamagecd1.py
new file mode 100755
index 000000000..415962234
--- /dev/null
+++ b/eos/effects/shipbonusfrigatesizedmissilekineticdamagecd1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Corax
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Destroyer").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Light Missiles"),
+ "kineticDamage", ship.getModifiedItemAttr("shipBonusCD1") * level)
diff --git a/eos/effects/shipbonusgf1torpedoflighttime.py b/eos/effects/shipbonusgf1torpedoflighttime.py
new file mode 100755
index 000000000..16f1c6c4c
--- /dev/null
+++ b/eos/effects/shipbonusgf1torpedoflighttime.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Nemesis
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Torpedoes"),
+ "explosionDelay", ship.getModifiedItemAttr("shipBonusGF") * level)
diff --git a/eos/effects/shipbonusgftorpedoexplosionvelocity.py b/eos/effects/shipbonusgftorpedoexplosionvelocity.py
new file mode 100755
index 000000000..98a24e21b
--- /dev/null
+++ b/eos/effects/shipbonusgftorpedoexplosionvelocity.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Nemesis
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Torpedoes"),
+ "aoeVelocity", ship.getModifiedItemAttr("shipBonusGF") * level)
\ No newline at end of file
diff --git a/eos/effects/shipbonusheatdamageatf1.py b/eos/effects/shipbonusheatdamageatf1.py
new file mode 100755
index 000000000..1f3910650
--- /dev/null
+++ b/eos/effects/shipbonusheatdamageatf1.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Cambion
+# Ship: Etana
+# Ship: Utu
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: True, "heatDamage",
+ ship.getModifiedItemAttr("shipBonusATF1"))
diff --git a/eos/effects/shipbonusheavyassaultlauncherrateoffirecc2.py b/eos/effects/shipbonusheavyassaultlauncherrateoffirecc2.py
new file mode 100755
index 000000000..87bbb2c78
--- /dev/null
+++ b/eos/effects/shipbonusheavyassaultlauncherrateoffirecc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Rook
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Heavy Assault",
+ "speed", ship.getModifiedItemAttr("shipBonusCC2") * level)
diff --git a/eos/effects/shipbonusheavyassaultmissilekineticdamagecbc1.py b/eos/effects/shipbonusheavyassaultmissilekineticdamagecbc1.py
new file mode 100644
index 000000000..0d2741b53
--- /dev/null
+++ b/eos/effects/shipbonusheavyassaultmissilekineticdamagecbc1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Drake
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battlecruiser").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
+ "kineticDamage", ship.getModifiedItemAttr("shipBonusCBC1") * level)
diff --git a/eos/effects/shipbonusheavyassaultmissilelauncherrofmbc2.py b/eos/effects/shipbonusheavyassaultmissilelauncherrofmbc2.py
new file mode 100644
index 000000000..e70ff91be
--- /dev/null
+++ b/eos/effects/shipbonusheavyassaultmissilelauncherrofmbc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Cyclone
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Battlecruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Heavy Assault",
+ "speed", ship.getModifiedItemAttr("shipBonusMBC2") * level)
diff --git a/eos/effects/shipbonusheavylauncherrateoffirecc2.py b/eos/effects/shipbonusheavylauncherrateoffirecc2.py
new file mode 100755
index 000000000..7fd0e7578
--- /dev/null
+++ b/eos/effects/shipbonusheavylauncherrateoffirecc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Rook
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Heavy",
+ "speed", ship.getModifiedItemAttr("shipBonusCC2") * level)
diff --git a/eos/effects/shipbonusheavymissilekineticdamagecbc1.py b/eos/effects/shipbonusheavymissilekineticdamagecbc1.py
new file mode 100644
index 000000000..bed6710d1
--- /dev/null
+++ b/eos/effects/shipbonusheavymissilekineticdamagecbc1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Drake
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battlecruiser").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Missiles"),
+ "kineticDamage", ship.getModifiedItemAttr("shipBonusCBC1") * level)
diff --git a/eos/effects/shipbonusheavymissilelauncherrofmbc2.py b/eos/effects/shipbonusheavymissilelauncherrofmbc2.py
new file mode 100644
index 000000000..20cc37c39
--- /dev/null
+++ b/eos/effects/shipbonusheavymissilelauncherrofmbc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Cyclone
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Battlecruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Heavy",
+ "speed", ship.getModifiedItemAttr("shipBonusMBC2") * level)
diff --git a/eos/effects/shipbonushybridfalloffatc2.py b/eos/effects/shipbonushybridfalloffatc2.py
new file mode 100755
index 000000000..5e910deb1
--- /dev/null
+++ b/eos/effects/shipbonushybridfalloffatc2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Adrestia
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
+ "falloff", ship.getModifiedItemAttr("shipBonusATC2"))
diff --git a/eos/effects/shipbonushybridoptimalcb.py b/eos/effects/shipbonushybridoptimalcb.py
new file mode 100755
index 000000000..986a14868
--- /dev/null
+++ b/eos/effects/shipbonushybridoptimalcb.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Rokh
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Hybrid Turret"),
+ "maxRange", ship.getModifiedItemAttr("shipBonusCB") * level)
diff --git a/eos/effects/shipbonushybridtrackingatc2.py b/eos/effects/shipbonushybridtrackingatc2.py
new file mode 100755
index 000000000..efcda93bd
--- /dev/null
+++ b/eos/effects/shipbonushybridtrackingatc2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Adrestia
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("shipBonusATC2"))
diff --git a/eos/effects/shipbonushybridtrackinggf2.py b/eos/effects/shipbonushybridtrackinggf2.py
new file mode 100755
index 000000000..b79d891d1
--- /dev/null
+++ b/eos/effects/shipbonushybridtrackinggf2.py
@@ -0,0 +1,9 @@
+# Used by:
+# Ship: Ares
+# Ship: Federation Navy Comet
+# Ship: Tristan
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Hybrid Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("shipBonusGF2") * level)
diff --git a/eos/effects/shipbonusiceharvesterdurationore3.py b/eos/effects/shipbonusiceharvesterdurationore3.py
new file mode 100755
index 000000000..5d31336cf
--- /dev/null
+++ b/eos/effects/shipbonusiceharvesterdurationore3.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Covetor
+type = "passive"
+def handler(fit, container, context):
+ level = fit.character.getSkill("Mining Barge").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Ice Harvesting"),
+ "duration", container.getModifiedItemAttr("shipBonusORE3") * level)
\ No newline at end of file
diff --git a/eos/effects/shipbonuskineticshieldresistancecb2.py b/eos/effects/shipbonuskineticshieldresistancecb2.py
new file mode 100755
index 000000000..b0780f386
--- /dev/null
+++ b/eos/effects/shipbonuskineticshieldresistancecb2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Rattlesnake
+# Ship: Rokh
+# Ship: Scorpion Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battleship").level
+ fit.ship.boostItemAttr("shieldKineticDamageResonance", ship.getModifiedItemAttr("shipBonus2CB") * level)
diff --git a/eos/effects/shipbonuskineticshieldresistanceore3.py b/eos/effects/shipbonuskineticshieldresistanceore3.py
new file mode 100755
index 000000000..a3a7a50c2
--- /dev/null
+++ b/eos/effects/shipbonuskineticshieldresistanceore3.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ships from group: Exhumer (3 of 3)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Mining Barge").level
+ fit.ship.boostItemAttr("shieldKineticDamageResonance", ship.getModifiedItemAttr("shipBonusORE3") * level)
\ No newline at end of file
diff --git a/eos/effects/shipbonuslargeenergyturretdamagecb2.py b/eos/effects/shipbonuslargeenergyturretdamagecb2.py
new file mode 100755
index 000000000..f49093d0e
--- /dev/null
+++ b/eos/effects/shipbonuslargeenergyturretdamagecb2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Nightmare
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Energy Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonus2CB") * level)
diff --git a/eos/effects/shipbonuslargeenergyturretmaxrangeab2.py b/eos/effects/shipbonuslargeenergyturretmaxrangeab2.py
new file mode 100755
index 000000000..0af18751a
--- /dev/null
+++ b/eos/effects/shipbonuslargeenergyturretmaxrangeab2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Apocalypse
+# Ship: Apocalypse Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Energy Turret"),
+ "maxRange", ship.getModifiedItemAttr("shipBonusAB2") * level)
diff --git a/eos/effects/shipbonuslargeenergyturrettrackingab.py b/eos/effects/shipbonuslargeenergyturrettrackingab.py
new file mode 100644
index 000000000..4b774354a
--- /dev/null
+++ b/eos/effects/shipbonuslargeenergyturrettrackingab.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Apocalypse
+# Ship: Apocalypse Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Energy Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("shipBonusAB") * level)
diff --git a/eos/effects/shipbonuslargeenergyweapondamageab2.py b/eos/effects/shipbonuslargeenergyweapondamageab2.py
new file mode 100755
index 000000000..dc61807fe
--- /dev/null
+++ b/eos/effects/shipbonuslargeenergyweapondamageab2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Abaddon
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Energy Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusAB2") * level)
diff --git a/eos/effects/shipbonusmediumenergyturretdamagecc2.py b/eos/effects/shipbonusmediumenergyturretdamagecc2.py
new file mode 100755
index 000000000..5ec4296ed
--- /dev/null
+++ b/eos/effects/shipbonusmediumenergyturretdamagecc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Phantasm
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Energy Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusCC2") * level)
diff --git a/eos/effects/shipbonusmediumenergyturretdamagepiratefaction.py b/eos/effects/shipbonusmediumenergyturretdamagepiratefaction.py
new file mode 100755
index 000000000..d5c3f3aa9
--- /dev/null
+++ b/eos/effects/shipbonusmediumenergyturretdamagepiratefaction.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Ashimmu
+# Ship: Gnosis
+# Ship: Phantasm
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Energy Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shipbonusmediumenergyturrettrackingac2.py b/eos/effects/shipbonusmediumenergyturrettrackingac2.py
new file mode 100755
index 000000000..fff3658d3
--- /dev/null
+++ b/eos/effects/shipbonusmediumenergyturrettrackingac2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Phantasm
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Energy Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("shipBonusAC2") * level)
diff --git a/eos/effects/shipbonusmediumhybriddmgcc2.py b/eos/effects/shipbonusmediumhybriddmgcc2.py
new file mode 100755
index 000000000..709784801
--- /dev/null
+++ b/eos/effects/shipbonusmediumhybriddmgcc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Falcon
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusCC2") * level)
diff --git a/eos/effects/shipbonusmetoptimalac2.py b/eos/effects/shipbonusmetoptimalac2.py
new file mode 100644
index 000000000..5faea5e05
--- /dev/null
+++ b/eos/effects/shipbonusmetoptimalac2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Omen Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Energy Turret"),
+ "maxRange", ship.getModifiedItemAttr("shipBonusAC2") * level)
diff --git a/eos/effects/shipbonusmf1torpedoexplosionvelocity.py b/eos/effects/shipbonusmf1torpedoexplosionvelocity.py
new file mode 100755
index 000000000..ba78745e7
--- /dev/null
+++ b/eos/effects/shipbonusmf1torpedoexplosionvelocity.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Hound
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Torpedoes"),
+ "aoeVelocity", ship.getModifiedItemAttr("shipBonusMF") * level)
\ No newline at end of file
diff --git a/eos/effects/shipbonusmf1torpedoflighttime.py b/eos/effects/shipbonusmf1torpedoflighttime.py
new file mode 100755
index 000000000..9b8c8c1a6
--- /dev/null
+++ b/eos/effects/shipbonusmf1torpedoflighttime.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Hound
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Torpedoes"),
+ "explosionDelay", ship.getModifiedItemAttr("shipBonusMF") * level)
diff --git a/eos/effects/shipbonusminingdroneamountpercentrookie.py b/eos/effects/shipbonusminingdroneamountpercentrookie.py
new file mode 100755
index 000000000..6b71b942d
--- /dev/null
+++ b/eos/effects/shipbonusminingdroneamountpercentrookie.py
@@ -0,0 +1,9 @@
+# Used by:
+# Ship: Gnosis
+# Ship: Taipan
+# Ship: Velator
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.drones.filteredItemBoost(lambda drone: drone.item.group.name == "Mining Drone",
+ "miningAmount", container.getModifiedItemAttr("rookieDroneBonus"))
diff --git a/eos/effects/shipbonusmissileaoevelocitymb2.py b/eos/effects/shipbonusmissileaoevelocitymb2.py
new file mode 100644
index 000000000..28a00f6e2
--- /dev/null
+++ b/eos/effects/shipbonusmissileaoevelocitymb2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Typhoon
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Battleship").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Torpedoes"),
+ "aoeVelocity", ship.getModifiedItemAttr("shipBonusMB2") * level)
diff --git a/eos/effects/shipbonusmissilekineticlatf2.py b/eos/effects/shipbonusmissilekineticlatf2.py
new file mode 100644
index 000000000..655d99ee5
--- /dev/null
+++ b/eos/effects/shipbonusmissilekineticlatf2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Cambion
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "kineticDamage", ship.getModifiedItemAttr("shipBonusATF2"))
diff --git a/eos/effects/shipbonusmissilelauncherassaultrofatc1.py b/eos/effects/shipbonusmissilelauncherassaultrofatc1.py
new file mode 100755
index 000000000..712c1f21b
--- /dev/null
+++ b/eos/effects/shipbonusmissilelauncherassaultrofatc1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Vangel
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Rapid Light",
+ "speed", ship.getModifiedItemAttr("shipBonusATC1"))
diff --git a/eos/effects/shipbonusmissilelauncherheavyassaultrofatc1.py b/eos/effects/shipbonusmissilelauncherheavyassaultrofatc1.py
new file mode 100755
index 000000000..0f3ad919e
--- /dev/null
+++ b/eos/effects/shipbonusmissilelauncherheavyassaultrofatc1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Vangel
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Heavy Assault",
+ "speed", ship.getModifiedItemAttr("shipBonusATC1"))
diff --git a/eos/effects/shipbonusmissilelauncherheavyrofatc1.py b/eos/effects/shipbonusmissilelauncherheavyrofatc1.py
new file mode 100755
index 000000000..f2cbbacc2
--- /dev/null
+++ b/eos/effects/shipbonusmissilelauncherheavyrofatc1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Vangel
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Heavy",
+ "speed", ship.getModifiedItemAttr("shipBonusATC1"))
diff --git a/eos/effects/shipbonusmwdcapneedgc2.py b/eos/effects/shipbonusmwdcapneedgc2.py
new file mode 100755
index 000000000..ebaba29a6
--- /dev/null
+++ b/eos/effects/shipbonusmwdcapneedgc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Deimos
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Cruiser").level
+ fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill("High Speed Maneuvering"),
+ "capacitorCapacityMultiplier", ship.getModifiedItemAttr("shipBonusGC2") * level)
diff --git a/eos/effects/shipbonusmwdcapneedmf.py b/eos/effects/shipbonusmwdcapneedmf.py
new file mode 100755
index 000000000..a911669e7
--- /dev/null
+++ b/eos/effects/shipbonusmwdcapneedmf.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Hyena
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Frigate").level
+ fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill("High Speed Maneuvering"),
+ "capacitorCapacityMultiplier", ship.getModifiedItemAttr("shipBonusMF") * level)
diff --git a/eos/effects/shipbonusmwdsignatureradiusmd2.py b/eos/effects/shipbonusmwdsignatureradiusmd2.py
new file mode 100755
index 000000000..e846dee47
--- /dev/null
+++ b/eos/effects/shipbonusmwdsignatureradiusmd2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Talwar
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Destroyer").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("High Speed Maneuvering"),
+ "signatureRadiusBonus", ship.getModifiedItemAttr("shipBonusMD2") * level)
diff --git a/eos/effects/shipbonusnoctissalvagecycle.py b/eos/effects/shipbonusnoctissalvagecycle.py
new file mode 100755
index 000000000..453821924
--- /dev/null
+++ b/eos/effects/shipbonusnoctissalvagecycle.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Noctis
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("ORE Industrial").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Salvaging"),
+ "duration", ship.getModifiedItemAttr("shipBonusOreIndustrial1") * level)
diff --git a/eos/effects/shipbonusnoctistractorcycle.py b/eos/effects/shipbonusnoctistractorcycle.py
new file mode 100755
index 000000000..409d73091
--- /dev/null
+++ b/eos/effects/shipbonusnoctistractorcycle.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Noctis
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("ORE Industrial").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tractor Beam",
+ "duration", ship.getModifiedItemAttr("shipBonusOreIndustrial1") * level)
diff --git a/eos/effects/shipbonusnoctistractorrange.py b/eos/effects/shipbonusnoctistractorrange.py
new file mode 100755
index 000000000..456e56c2d
--- /dev/null
+++ b/eos/effects/shipbonusnoctistractorrange.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Noctis
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("ORE Industrial").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tractor Beam",
+ "maxRange", ship.getModifiedItemAttr("shipBonusOreIndustrial2") * level)
diff --git a/eos/effects/shipbonusnoctistractorvelocity.py b/eos/effects/shipbonusnoctistractorvelocity.py
new file mode 100755
index 000000000..c508e41c3
--- /dev/null
+++ b/eos/effects/shipbonusnoctistractorvelocity.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Noctis
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("ORE Industrial").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tractor Beam",
+ "maxTractorVelocity", ship.getModifiedItemAttr("shipBonusOreIndustrial2") * level)
diff --git a/eos/effects/shipbonusorecapshipdronearmorhpandshieldhpandhpbonus.py b/eos/effects/shipbonusorecapshipdronearmorhpandshieldhpandhpbonus.py
new file mode 100755
index 000000000..01d9768e8
--- /dev/null
+++ b/eos/effects/shipbonusorecapshipdronearmorhpandshieldhpandhpbonus.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Rorqual
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Capital Industrial Ships").level
+ for type in ("shieldCapacity", "armorHP", "hp"):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ type, ship.getModifiedItemAttr("shipBonusORECapital4") * level)
diff --git a/eos/effects/shipbonusorecapshipdronedmgbonus.py b/eos/effects/shipbonusorecapshipdronedmgbonus.py
new file mode 100755
index 000000000..65e1b8766
--- /dev/null
+++ b/eos/effects/shipbonusorecapshipdronedmgbonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Rorqual
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Capital Industrial Ships").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusORECapital4") * level)
diff --git a/eos/effects/shipbonusoreholdore2.py b/eos/effects/shipbonusoreholdore2.py
new file mode 100755
index 000000000..1379d9f3c
--- /dev/null
+++ b/eos/effects/shipbonusoreholdore2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Variations of ship: Retriever (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Mining Barge").level
+ fit.ship.boostItemAttr("specialOreHoldCapacity", ship.getModifiedItemAttr("shipBonusORE2") * level)
\ No newline at end of file
diff --git a/eos/effects/shipbonuspiratefrigateprojdamage.py b/eos/effects/shipbonuspiratefrigateprojdamage.py
new file mode 100755
index 000000000..96391b4c0
--- /dev/null
+++ b/eos/effects/shipbonuspiratefrigateprojdamage.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Dramiel
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Projectile Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shipbonuspiratesmallhybriddmg.py b/eos/effects/shipbonuspiratesmallhybriddmg.py
new file mode 100755
index 000000000..82a3500de
--- /dev/null
+++ b/eos/effects/shipbonuspiratesmallhybriddmg.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Daredevil
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Hybrid Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shipbonusprojectiledamagembc1.py b/eos/effects/shipbonusprojectiledamagembc1.py
new file mode 100755
index 000000000..e9dc13e4b
--- /dev/null
+++ b/eos/effects/shipbonusprojectiledamagembc1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Hurricane (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Battlecruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusMBC1") * level)
diff --git a/eos/effects/shipbonusprojectiletrackingmc2.py b/eos/effects/shipbonusprojectiletrackingmc2.py
new file mode 100755
index 000000000..bfc9c95f2
--- /dev/null
+++ b/eos/effects/shipbonusprojectiletrackingmc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Stabber Fleet Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("shipBonusMC2") * level)
diff --git a/eos/effects/shipbonusptfalloffmb1.py b/eos/effects/shipbonusptfalloffmb1.py
new file mode 100755
index 000000000..cf9d9ae1a
--- /dev/null
+++ b/eos/effects/shipbonusptfalloffmb1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Vargur
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Projectile Turret"),
+ "falloff", ship.getModifiedItemAttr("shipBonusMB") * level)
diff --git a/eos/effects/shipbonusremotearmorrepairamount2af.py b/eos/effects/shipbonusremotearmorrepairamount2af.py
new file mode 100755
index 000000000..07359407f
--- /dev/null
+++ b/eos/effects/shipbonusremotearmorrepairamount2af.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Inquisitor
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Projector",
+ "armorDamageAmount", ship.getModifiedItemAttr("shipBonus2AF") * level)
diff --git a/eos/effects/shipbonusremotearmorrepairamountac2.py b/eos/effects/shipbonusremotearmorrepairamountac2.py
new file mode 100755
index 000000000..f316cbbd6
--- /dev/null
+++ b/eos/effects/shipbonusremotearmorrepairamountac2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Augoror
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Projector",
+ "armorDamageAmount", ship.getModifiedItemAttr("shipBonusAC2") * level)
diff --git a/eos/effects/shipbonusremotearmorrepairamountgc2.py b/eos/effects/shipbonusremotearmorrepairamountgc2.py
new file mode 100755
index 000000000..d678a8779
--- /dev/null
+++ b/eos/effects/shipbonusremotearmorrepairamountgc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Exequror
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Projector",
+ "armorDamageAmount", ship.getModifiedItemAttr("shipBonusGC2") * level)
diff --git a/eos/effects/shipbonusremotearmorrepairamountgf2.py b/eos/effects/shipbonusremotearmorrepairamountgf2.py
new file mode 100755
index 000000000..dc9575422
--- /dev/null
+++ b/eos/effects/shipbonusremotearmorrepairamountgf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Navitas
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Projector",
+ "armorDamageAmount", ship.getModifiedItemAttr("shipBonusGF2") * level)
diff --git a/eos/effects/shipbonusremotearmorrepaircapneedac1.py b/eos/effects/shipbonusremotearmorrepaircapneedac1.py
new file mode 100755
index 000000000..c3d12bb66
--- /dev/null
+++ b/eos/effects/shipbonusremotearmorrepaircapneedac1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Augoror
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Projector",
+ "capacitorNeed", ship.getModifiedItemAttr("shipBonusAC") * level)
diff --git a/eos/effects/shipbonusremotearmorrepaircapneedaf.py b/eos/effects/shipbonusremotearmorrepaircapneedaf.py
new file mode 100755
index 000000000..756e970f9
--- /dev/null
+++ b/eos/effects/shipbonusremotearmorrepaircapneedaf.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Inquisitor
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Projector",
+ "capacitorNeed", ship.getModifiedItemAttr("shipBonusAF") * level)
diff --git a/eos/effects/shipbonusremotearmorrepaircapneedgc1.py b/eos/effects/shipbonusremotearmorrepaircapneedgc1.py
new file mode 100755
index 000000000..163b8be6a
--- /dev/null
+++ b/eos/effects/shipbonusremotearmorrepaircapneedgc1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Exequror
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Projector",
+ "capacitorNeed", ship.getModifiedItemAttr("shipBonusGC") * level)
diff --git a/eos/effects/shipbonusremotearmorrepaircapneedgf.py b/eos/effects/shipbonusremotearmorrepaircapneedgf.py
new file mode 100755
index 000000000..75c8dc8a3
--- /dev/null
+++ b/eos/effects/shipbonusremotearmorrepaircapneedgf.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Navitas
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Projector",
+ "capacitorNeed", ship.getModifiedItemAttr("shipBonusGF") * level)
diff --git a/eos/effects/shipbonusrepairsystemsarmorrepairamountgb2.py b/eos/effects/shipbonusrepairsystemsarmorrepairamountgb2.py
new file mode 100755
index 000000000..2b489df6b
--- /dev/null
+++ b/eos/effects/shipbonusrepairsystemsarmorrepairamountgb2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Hyperion
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Repair Systems"),
+ "armorDamageAmount", ship.getModifiedItemAttr("shipBonusGB2") * level)
diff --git a/eos/effects/shipbonusrepairsystemsbonusatc2.py b/eos/effects/shipbonusrepairsystemsbonusatc2.py
new file mode 100755
index 000000000..e2cfbaaab
--- /dev/null
+++ b/eos/effects/shipbonusrepairsystemsbonusatc2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Vangel
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Repair Systems"),
+ "armorDamageAmount", ship.getModifiedItemAttr("shipBonusATC2"))
diff --git a/eos/effects/shipbonussalvagecycleaf.py b/eos/effects/shipbonussalvagecycleaf.py
new file mode 100755
index 000000000..0cef3eba4
--- /dev/null
+++ b/eos/effects/shipbonussalvagecycleaf.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Magnate (3 of 6)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Salvaging"),
+ "duration", ship.getModifiedItemAttr("shipBonusAF") * level)
diff --git a/eos/effects/shipbonussalvagecyclecf.py b/eos/effects/shipbonussalvagecyclecf.py
new file mode 100755
index 000000000..07c68189d
--- /dev/null
+++ b/eos/effects/shipbonussalvagecyclecf.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ships named like: Heron (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Salvaging"),
+ "duration", ship.getModifiedItemAttr("shipBonusCF") * level)
diff --git a/eos/effects/shipbonussalvagecyclegf.py b/eos/effects/shipbonussalvagecyclegf.py
new file mode 100755
index 000000000..e3a615e13
--- /dev/null
+++ b/eos/effects/shipbonussalvagecyclegf.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ships named like: Imicus (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Salvaging"),
+ "duration", ship.getModifiedItemAttr("shipBonusGF") * level)
diff --git a/eos/effects/shipbonussalvagecyclemf.py b/eos/effects/shipbonussalvagecyclemf.py
new file mode 100755
index 000000000..85a3ad9c8
--- /dev/null
+++ b/eos/effects/shipbonussalvagecyclemf.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ships named like: Probe (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Salvaging"),
+ "duration", ship.getModifiedItemAttr("shipBonusMF") * level)
diff --git a/eos/effects/shipbonusscanprobestrength2af.py b/eos/effects/shipbonusscanprobestrength2af.py
new file mode 100755
index 000000000..4ecdca824
--- /dev/null
+++ b/eos/effects/shipbonusscanprobestrength2af.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Magnate (3 of 6)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.group.name == "Scanner Probe",
+ "baseSensorStrength", ship.getModifiedItemAttr("shipBonus2AF") * level)
diff --git a/eos/effects/shipbonusscanprobestrengthcf.py b/eos/effects/shipbonusscanprobestrengthcf.py
new file mode 100755
index 000000000..fa87f0953
--- /dev/null
+++ b/eos/effects/shipbonusscanprobestrengthcf.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ships named like: Heron (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.group.name == "Scanner Probe",
+ "baseSensorStrength", ship.getModifiedItemAttr("shipBonusCF2") * level)
\ No newline at end of file
diff --git a/eos/effects/shipbonusscanprobestrengthgf.py b/eos/effects/shipbonusscanprobestrengthgf.py
new file mode 100755
index 000000000..0095b4fd0
--- /dev/null
+++ b/eos/effects/shipbonusscanprobestrengthgf.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ships named like: Imicus (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.group.name == "Scanner Probe",
+ "baseSensorStrength", ship.getModifiedItemAttr("shipBonusGF2") * level)
diff --git a/eos/effects/shipbonusscanprobestrengthmf.py b/eos/effects/shipbonusscanprobestrengthmf.py
new file mode 100755
index 000000000..ba089f60a
--- /dev/null
+++ b/eos/effects/shipbonusscanprobestrengthmf.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ships named like: Probe (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.group.name == "Scanner Probe",
+ "baseSensorStrength", ship.getModifiedItemAttr("shipBonusMF2") * level)
diff --git a/eos/effects/shipbonusshieldboostermb1a.py b/eos/effects/shipbonusshieldboostermb1a.py
new file mode 100755
index 000000000..4d4cee22b
--- /dev/null
+++ b/eos/effects/shipbonusshieldboostermb1a.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Maelstrom
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Shield Booster",
+ "shieldBonus", ship.getModifiedItemAttr("shipBonusMB") * level)
diff --git a/eos/effects/shipbonusshieldcapacityore2.py b/eos/effects/shipbonusshieldcapacityore2.py
new file mode 100755
index 000000000..769532c2b
--- /dev/null
+++ b/eos/effects/shipbonusshieldcapacityore2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Procurer (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Mining Barge").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Shield Booster",
+ "shieldCapacity", ship.getModifiedItemAttr("shipBonusORE2") * level)
diff --git a/eos/effects/shipbonusshieldtransferboostamountcc2.py b/eos/effects/shipbonusshieldtransferboostamountcc2.py
new file mode 100755
index 000000000..024cd68ea
--- /dev/null
+++ b/eos/effects/shipbonusshieldtransferboostamountcc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Osprey
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"),
+ "shieldBonus", ship.getModifiedItemAttr("shipBonusCC2") * level)
diff --git a/eos/effects/shipbonusshieldtransferboostamountcf2.py b/eos/effects/shipbonusshieldtransferboostamountcf2.py
new file mode 100755
index 000000000..30cb7fa0c
--- /dev/null
+++ b/eos/effects/shipbonusshieldtransferboostamountcf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Bantam
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"),
+ "shieldBonus", ship.getModifiedItemAttr("shipBonusCF2") * level)
diff --git a/eos/effects/shipbonusshieldtransferboostamountmc2.py b/eos/effects/shipbonusshieldtransferboostamountmc2.py
new file mode 100755
index 000000000..65979f61b
--- /dev/null
+++ b/eos/effects/shipbonusshieldtransferboostamountmc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Scythe
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"),
+ "shieldBonus", ship.getModifiedItemAttr("shipBonusMC2") * level)
diff --git a/eos/effects/shipbonusshieldtransferboostamountmf2.py b/eos/effects/shipbonusshieldtransferboostamountmf2.py
new file mode 100755
index 000000000..c660a7bd5
--- /dev/null
+++ b/eos/effects/shipbonusshieldtransferboostamountmf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Burst
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"),
+ "shieldBonus", ship.getModifiedItemAttr("shipBonusMF2") * level)
diff --git a/eos/effects/shipbonusshieldtransfercapneed1.py b/eos/effects/shipbonusshieldtransfercapneed1.py
new file mode 100755
index 000000000..476795299
--- /dev/null
+++ b/eos/effects/shipbonusshieldtransfercapneed1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Osprey
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Shield Transporter",
+ "capacitorNeed", ship.getModifiedItemAttr("shipBonusCC") * level)
diff --git a/eos/effects/shipbonusshieldtransfercapneedcf.py b/eos/effects/shipbonusshieldtransfercapneedcf.py
new file mode 100755
index 000000000..93364babf
--- /dev/null
+++ b/eos/effects/shipbonusshieldtransfercapneedcf.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Bantam
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"),
+ "capacitorNeed", ship.getModifiedItemAttr("shipBonusCF") * level)
diff --git a/eos/effects/shipbonusshieldtransfercapneedmc1.py b/eos/effects/shipbonusshieldtransfercapneedmc1.py
new file mode 100755
index 000000000..3517a2350
--- /dev/null
+++ b/eos/effects/shipbonusshieldtransfercapneedmc1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Scythe
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"),
+ "capacitorNeed", ship.getModifiedItemAttr("shipBonusMC") * level)
diff --git a/eos/effects/shipbonusshieldtransfercapneedmf.py b/eos/effects/shipbonusshieldtransfercapneedmf.py
new file mode 100755
index 000000000..e0963c70c
--- /dev/null
+++ b/eos/effects/shipbonusshieldtransfercapneedmf.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Burst
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"),
+ "capacitorNeed", ship.getModifiedItemAttr("shipBonusMF") * level)
diff --git a/eos/effects/shipbonussmallenergyturretdamageatf1.py b/eos/effects/shipbonussmallenergyturretdamageatf1.py
new file mode 100755
index 000000000..6c8ca2ab0
--- /dev/null
+++ b/eos/effects/shipbonussmallenergyturretdamageatf1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Malice
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusATF1"))
diff --git a/eos/effects/shipbonussmallenergyturretdamagecf2.py b/eos/effects/shipbonussmallenergyturretdamagecf2.py
new file mode 100755
index 000000000..ab4ad7740
--- /dev/null
+++ b/eos/effects/shipbonussmallenergyturretdamagecf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Succubus
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusCF2") * level)
diff --git a/eos/effects/shipbonussmallenergyturretdamagepiratefaction.py b/eos/effects/shipbonussmallenergyturretdamagepiratefaction.py
new file mode 100755
index 000000000..e57d64bda
--- /dev/null
+++ b/eos/effects/shipbonussmallenergyturretdamagepiratefaction.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Cruor
+# Ship: Succubus
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shipbonussmallenergyturrettracking2af.py b/eos/effects/shipbonussmallenergyturrettracking2af.py
new file mode 100755
index 000000000..a94c284a6
--- /dev/null
+++ b/eos/effects/shipbonussmallenergyturrettracking2af.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Succubus
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("shipBonus2AF") * level)
diff --git a/eos/effects/shipbonussmallenergyweaponoptimalrangeatf2.py b/eos/effects/shipbonussmallenergyweaponoptimalrangeatf2.py
new file mode 100755
index 000000000..b4bd9e8ac
--- /dev/null
+++ b/eos/effects/shipbonussmallenergyweaponoptimalrangeatf2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Malice
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"),
+ "maxRange", ship.getModifiedItemAttr("shipBonusATF2"))
diff --git a/eos/effects/shipbonussmallhybridmaxrangeatf2.py b/eos/effects/shipbonussmallhybridmaxrangeatf2.py
new file mode 100755
index 000000000..6f61ead95
--- /dev/null
+++ b/eos/effects/shipbonussmallhybridmaxrangeatf2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Utu
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Hybrid Turret"),
+ "maxRange", ship.getModifiedItemAttr("shipBonusATF2"))
diff --git a/eos/effects/shipbonussmallhybridtrackingspeedatf2.py b/eos/effects/shipbonussmallhybridtrackingspeedatf2.py
new file mode 100755
index 000000000..38d0f631a
--- /dev/null
+++ b/eos/effects/shipbonussmallhybridtrackingspeedatf2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Utu
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Hybrid Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("shipBonusATF2"))
diff --git a/eos/effects/shipbonusstasismf2.py b/eos/effects/shipbonusstasismf2.py
new file mode 100755
index 000000000..f0bb1ecf1
--- /dev/null
+++ b/eos/effects/shipbonusstasismf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Freki
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Stasis Web",
+ "maxRange", ship.getModifiedItemAttr("shipBonusMF2") * level)
diff --git a/eos/effects/shipbonusstasiswebspeedfactorab.py b/eos/effects/shipbonusstasiswebspeedfactorab.py
new file mode 100755
index 000000000..3ade594e8
--- /dev/null
+++ b/eos/effects/shipbonusstasiswebspeedfactorab.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Paladin
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Stasis Web",
+ "speedFactor", ship.getModifiedItemAttr("shipBonusAB") * level)
diff --git a/eos/effects/shipbonusstasiswebspeedfactorgb2.py b/eos/effects/shipbonusstasiswebspeedfactorgb2.py
new file mode 100755
index 000000000..e19cbf81e
--- /dev/null
+++ b/eos/effects/shipbonusstasiswebspeedfactorgb2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Kronos
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Stasis Web",
+ "speedFactor", ship.getModifiedItemAttr("shipBonusGB2") * level)
diff --git a/eos/effects/shipbonusstasiswebspeedfactormb.py b/eos/effects/shipbonusstasiswebspeedfactormb.py
new file mode 100755
index 000000000..9c4d86deb
--- /dev/null
+++ b/eos/effects/shipbonusstasiswebspeedfactormb.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Vindicator
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Stasis Web",
+ "speedFactor", ship.getModifiedItemAttr("shipBonusMB") * level)
diff --git a/eos/effects/shipbonusstrategiccruiseramarrheatdamage.py b/eos/effects/shipbonusstrategiccruiseramarrheatdamage.py
new file mode 100755
index 000000000..470cfbe89
--- /dev/null
+++ b/eos/effects/shipbonusstrategiccruiseramarrheatdamage.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Legion
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Strategic Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: True, "heatDamage",
+ ship.getModifiedItemAttr("shipBonusStrategicCruiserAmarr") * level)
diff --git a/eos/effects/shipbonusstrategiccruisercaldariheatdamage.py b/eos/effects/shipbonusstrategiccruisercaldariheatdamage.py
new file mode 100755
index 000000000..e61a3ca0c
--- /dev/null
+++ b/eos/effects/shipbonusstrategiccruisercaldariheatdamage.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Tengu
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Strategic Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: True, "heatDamage",
+ ship.getModifiedItemAttr("shipBonusStrategicCruiserCaldari") * level)
diff --git a/eos/effects/shipbonusstrategiccruisergallenteheatdamage.py b/eos/effects/shipbonusstrategiccruisergallenteheatdamage.py
new file mode 100755
index 000000000..b23e9cc6c
--- /dev/null
+++ b/eos/effects/shipbonusstrategiccruisergallenteheatdamage.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Proteus
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Strategic Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: True, "heatDamage",
+ ship.getModifiedItemAttr("shipBonusStrategicCruiserGallente") * level)
diff --git a/eos/effects/shipbonusstrategiccruiserminmatarheatdamage.py b/eos/effects/shipbonusstrategiccruiserminmatarheatdamage.py
new file mode 100755
index 000000000..686b1de9c
--- /dev/null
+++ b/eos/effects/shipbonusstrategiccruiserminmatarheatdamage.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Loki
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Strategic Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: True, "heatDamage",
+ ship.getModifiedItemAttr("shipBonusStrategicCruiserMinmatar") * level)
diff --git a/eos/effects/shipbonussurveyprobeexplosiondelayskillsurveycovertops3.py b/eos/effects/shipbonussurveyprobeexplosiondelayskillsurveycovertops3.py
new file mode 100755
index 000000000..2188f2cb4
--- /dev/null
+++ b/eos/effects/shipbonussurveyprobeexplosiondelayskillsurveycovertops3.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ships from group: Covert Ops (4 of 4)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Covert Ops").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.group.name == "Survey Probe",
+ "explosionDelay", ship.getModifiedItemAttr("eliteBonusCoverOps3") * level)
diff --git a/eos/effects/shipbonustargetpainteroptimalmf1.py b/eos/effects/shipbonustargetpainteroptimalmf1.py
new file mode 100755
index 000000000..4559c3614
--- /dev/null
+++ b/eos/effects/shipbonustargetpainteroptimalmf1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Vigil
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Target Painting"),
+ "maxRange", ship.getModifiedItemAttr("shipBonusMF") * level)
diff --git a/eos/effects/shipbonustdoptimalbonusaf2.py b/eos/effects/shipbonustdoptimalbonusaf2.py
new file mode 100755
index 000000000..2dd96d34b
--- /dev/null
+++ b/eos/effects/shipbonustdoptimalbonusaf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Crucifier
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Disruptor",
+ "maxRange", ship.getModifiedItemAttr("shipBonus2AF") * level)
diff --git a/eos/effects/shipbonusthermicshieldresistancecb2.py b/eos/effects/shipbonusthermicshieldresistancecb2.py
new file mode 100755
index 000000000..c2fba8800
--- /dev/null
+++ b/eos/effects/shipbonusthermicshieldresistancecb2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Rattlesnake
+# Ship: Rokh
+# Ship: Scorpion Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battleship").level
+ fit.ship.boostItemAttr("shieldThermalDamageResonance", ship.getModifiedItemAttr("shipBonus2CB") * level)
diff --git a/eos/effects/shipbonusthermicshieldresistanceore3.py b/eos/effects/shipbonusthermicshieldresistanceore3.py
new file mode 100755
index 000000000..e49d0cfe2
--- /dev/null
+++ b/eos/effects/shipbonusthermicshieldresistanceore3.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ships from group: Exhumer (3 of 3)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Mining Barge").level
+ fit.ship.boostItemAttr("shieldThermalDamageResonance", ship.getModifiedItemAttr("shipBonusORE3") * level)
diff --git a/eos/effects/shipbonustorpedovelocity2af.py b/eos/effects/shipbonustorpedovelocity2af.py
new file mode 100755
index 000000000..1c4863246
--- /dev/null
+++ b/eos/effects/shipbonustorpedovelocity2af.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Purifier
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Torpedoes"),
+ "maxVelocity", ship.getModifiedItemAttr("shipBonus2AF") * level)
diff --git a/eos/effects/shipbonustorpedovelocitycf2.py b/eos/effects/shipbonustorpedovelocitycf2.py
new file mode 100755
index 000000000..2b729c67b
--- /dev/null
+++ b/eos/effects/shipbonustorpedovelocitycf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Manticore
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Torpedoes"),
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusCF2") * level)
diff --git a/eos/effects/shipbonustorpedovelocitygf2.py b/eos/effects/shipbonustorpedovelocitygf2.py
new file mode 100755
index 000000000..35275f76a
--- /dev/null
+++ b/eos/effects/shipbonustorpedovelocitygf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Nemesis
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Torpedoes"),
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusGF2") * level)
diff --git a/eos/effects/shipbonustorpedovelocitymf2.py b/eos/effects/shipbonustorpedovelocitymf2.py
new file mode 100755
index 000000000..111a71bf5
--- /dev/null
+++ b/eos/effects/shipbonustorpedovelocitymf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Hound
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Torpedoes"),
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusMF2") * level)
diff --git a/eos/effects/shipbonusvelocityci.py b/eos/effects/shipbonusvelocityci.py
new file mode 100755
index 000000000..5ef356b6f
--- /dev/null
+++ b/eos/effects/shipbonusvelocityci.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Badger (2 of 2)
+# Variations of ship: Badger Mark II (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Industrial").level
+ fit.ship.boostItemAttr("maxVelocity", ship.getModifiedItemAttr("shipBonusCI") * level)
diff --git a/eos/effects/shipbonusvelocitygi.py b/eos/effects/shipbonusvelocitygi.py
new file mode 100755
index 000000000..074181b99
--- /dev/null
+++ b/eos/effects/shipbonusvelocitygi.py
@@ -0,0 +1,14 @@
+# Used by:
+# Ships named like: Iteron Mark (7 of 7)
+# Variations of ship: Iteron (2 of 2)
+# Ship: Occator
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Industrial").level
+ # TODO: investigate if we can live without such ifs or hardcoding
+ # Viator doesn't have GI bonus
+ if "shipBonusGI" in fit.ship.item.attributes:
+ bonusAttr = "shipBonusGI"
+ else:
+ bonusAttr = "shipBonusGI2"
+ fit.ship.boostItemAttr("maxVelocity", ship.getModifiedItemAttr(bonusAttr) * level)
diff --git a/eos/effects/shipbonuswarpscramblermaxrangegc2.py b/eos/effects/shipbonuswarpscramblermaxrangegc2.py
new file mode 100755
index 000000000..916634fa5
--- /dev/null
+++ b/eos/effects/shipbonuswarpscramblermaxrangegc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Adrestia
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Warp Scrambler",
+ "maxRange", ship.getModifiedItemAttr("shipBonusGC2") * level)
diff --git a/eos/effects/shipbonuswarpscramblermaxrangegf2.py b/eos/effects/shipbonuswarpscramblermaxrangegf2.py
new file mode 100755
index 000000000..514849054
--- /dev/null
+++ b/eos/effects/shipbonuswarpscramblermaxrangegf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Utu
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Warp Scrambler",
+ "maxRange", ship.getModifiedItemAttr("shipBonusGF2") * level)
diff --git a/eos/effects/shipcapneedbonusab.py b/eos/effects/shipcapneedbonusab.py
new file mode 100755
index 000000000..7b3ff82d9
--- /dev/null
+++ b/eos/effects/shipcapneedbonusab.py
@@ -0,0 +1,8 @@
+# Used by:
+# Variations of ship: Armageddon (3 of 5)
+# Ship: Apocalypse Imperial Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Energy Turret"),
+ "capacitorNeed", ship.getModifiedItemAttr("shipBonusAB") * level)
diff --git a/eos/effects/shipcappropulsionjamming.py b/eos/effects/shipcappropulsionjamming.py
new file mode 100755
index 000000000..3beb44b7a
--- /dev/null
+++ b/eos/effects/shipcappropulsionjamming.py
@@ -0,0 +1,11 @@
+# Used by:
+# Ships from group: Interceptor (8 of 8)
+# Ship: Atron
+# Ship: Condor
+# Ship: Executioner
+# Ship: Slasher
+type = "passive"
+def handler(fit, ship, context):
+ groups = ("Stasis Web", "Warp Scrambler")
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
+ "capacitorNeed", ship.getModifiedItemAttr("eliteBonusInterceptorRole"))
diff --git a/eos/effects/shipcaprecharge2af.py b/eos/effects/shipcaprecharge2af.py
new file mode 100755
index 000000000..68f627eb4
--- /dev/null
+++ b/eos/effects/shipcaprecharge2af.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Anathema
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.ship.boostItemAttr("rechargeRate", ship.getModifiedItemAttr("shipBonus2AF") * level)
diff --git a/eos/effects/shipcargobonusai.py b/eos/effects/shipcargobonusai.py
new file mode 100755
index 000000000..bb30696b4
--- /dev/null
+++ b/eos/effects/shipcargobonusai.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Bestower (2 of 2)
+# Variations of ship: Sigil (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Industrial").level
+ fit.ship.boostItemAttr("capacity", ship.getModifiedItemAttr("shipBonusAI") * level)
diff --git a/eos/effects/shipcommandbonuseffectivemultiplierorecapital2.py b/eos/effects/shipcommandbonuseffectivemultiplierorecapital2.py
new file mode 100755
index 000000000..a136b4e4d
--- /dev/null
+++ b/eos/effects/shipcommandbonuseffectivemultiplierorecapital2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Rorqual
+type = "passive"
+def handler(fit, ship, context):
+ if fit.extraAttributes["siege"]:
+ level = fit.character.getSkill("Capital Industrial Ships").level
+ fit.ship.increaseItemAttr("commandBonusEffective", ship.getModifiedItemAttr("shipBonusORECapital2") * level)
diff --git a/eos/effects/shipconsumptionquantitybonusindustrialreconfigurationorecapital1.py b/eos/effects/shipconsumptionquantitybonusindustrialreconfigurationorecapital1.py
new file mode 100755
index 000000000..b36ad25f8
--- /dev/null
+++ b/eos/effects/shipconsumptionquantitybonusindustrialreconfigurationorecapital1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Rorqual
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Capital Industrial Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Industrial Reconfiguration"),
+ "consumptionQuantity", ship.getModifiedItemAttr("shipBonusORECapital1") * level)
diff --git a/eos/effects/shipcruiseandsiegelauncherrofbonus2cb.py b/eos/effects/shipcruiseandsiegelauncherrofbonus2cb.py
new file mode 100755
index 000000000..f5ce0f146
--- /dev/null
+++ b/eos/effects/shipcruiseandsiegelauncherrofbonus2cb.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Widow
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battleship").level
+ affectedGroups = ("Missile Launcher Cruise", "Missile Launcher Torpedo")
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in affectedGroups,
+ "speed", ship.getModifiedItemAttr("shipBonus2CB") * level)
diff --git a/eos/effects/shipcruiseandtorpedovelocitybonuscb3.py b/eos/effects/shipcruiseandtorpedovelocitybonuscb3.py
new file mode 100755
index 000000000..5c4970c4c
--- /dev/null
+++ b/eos/effects/shipcruiseandtorpedovelocitybonuscb3.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Golem
+# Ship: Widow
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battleship").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Cruise Missiles") or mod.charge.requiresSkill("Torpedoes"),
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusCB3") * level)
diff --git a/eos/effects/shipcruiselauncherrofbonus2cb.py b/eos/effects/shipcruiselauncherrofbonus2cb.py
new file mode 100755
index 000000000..2794afdb7
--- /dev/null
+++ b/eos/effects/shipcruiselauncherrofbonus2cb.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Raven
+# Ship: Raven State Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Cruise",
+ "speed", ship.getModifiedItemAttr("shipBonus2CB") * level)
diff --git a/eos/effects/shipcruisemissileaoecloudsize1cb.py b/eos/effects/shipcruisemissileaoecloudsize1cb.py
new file mode 100644
index 000000000..cd658bd69
--- /dev/null
+++ b/eos/effects/shipcruisemissileaoecloudsize1cb.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Raven Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battleship").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Cruise Missiles"),
+ "aoeCloudSize", ship.getModifiedItemAttr("shipBonusCB") * level)
diff --git a/eos/effects/shipcruisemissilerofcb.py b/eos/effects/shipcruisemissilerofcb.py
new file mode 100644
index 000000000..2137ddd79
--- /dev/null
+++ b/eos/effects/shipcruisemissilerofcb.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Scorpion Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Cruise",
+ "speed", ship.getModifiedItemAttr("shipBonusCB") * level)
diff --git a/eos/effects/shipcruisemissilevelocitybonuscb3.py b/eos/effects/shipcruisemissilevelocitybonuscb3.py
new file mode 100755
index 000000000..5282dfe5a
--- /dev/null
+++ b/eos/effects/shipcruisemissilevelocitybonuscb3.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Raven (3 of 4)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battleship").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Cruise Missiles"),
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusCB3") * level)
diff --git a/eos/effects/shipdronemwdspeedbonusrookie.py b/eos/effects/shipdronemwdspeedbonusrookie.py
new file mode 100755
index 000000000..1450c57bf
--- /dev/null
+++ b/eos/effects/shipdronemwdspeedbonusrookie.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Taipan
+type = "passive"
+def handler(fit, ship, context):
+ fit.drones.filteredItemBoost(lambda mod: True,
+ "maxVelocity", ship.getModifiedItemAttr("rookieDroneMWDspeed"))
diff --git a/eos/effects/shipdronescoutthermaldamagegf2.py b/eos/effects/shipdronescoutthermaldamagegf2.py
new file mode 100755
index 000000000..537cd01dc
--- /dev/null
+++ b/eos/effects/shipdronescoutthermaldamagegf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Helios
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Frigate").level
+ fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Scout Drone Operation"),
+ "thermalDamage", ship.getModifiedItemAttr("shipBonusGF2") * level)
diff --git a/eos/effects/shipdronesmaxgc2.py b/eos/effects/shipdronesmaxgc2.py
new file mode 100755
index 000000000..0c3992d9d
--- /dev/null
+++ b/eos/effects/shipdronesmaxgc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Guardian-Vexor
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Cruiser").level
+ amount = ship.getModifiedItemAttr("shipBonusGC2")
+ fit.extraAttributes.increase("maxActiveDrones", amount * level)
diff --git a/eos/effects/shipecmscanstrengthbonuscf.py b/eos/effects/shipecmscanstrengthbonuscf.py
new file mode 100755
index 000000000..e4feb3276
--- /dev/null
+++ b/eos/effects/shipecmscanstrengthbonuscf.py
@@ -0,0 +1,9 @@
+# Used by:
+# Variations of ship: Griffin (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Frigate").level
+ for type in ("Gravimetric", "Ladar", "Radar", "Magnetometric"):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
+ "scan{0}StrengthBonus".format(type),
+ ship.getModifiedItemAttr("shipBonusCF") * level)
diff --git a/eos/effects/shipecmscanstrengthbonusrookie.py b/eos/effects/shipecmscanstrengthbonusrookie.py
new file mode 100755
index 000000000..b73a6cc9d
--- /dev/null
+++ b/eos/effects/shipecmscanstrengthbonusrookie.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Ibis
+type = "passive"
+def handler(fit, ship, context):
+ for type in ("Gravimetric", "Ladar", "Radar", "Magnetometric"):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
+ "scan{0}StrengthBonus".format(type),
+ ship.getModifiedItemAttr("rookieECMStrengthBonus"))
diff --git a/eos/effects/shipenergydrainamountaf1.py b/eos/effects/shipenergydrainamountaf1.py
new file mode 100755
index 000000000..420418f91
--- /dev/null
+++ b/eos/effects/shipenergydrainamountaf1.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Cruor
+# Ship: Sentinel
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire",
+ "powerTransferAmount", ship.getModifiedItemAttr("shipBonusAF") * level)
diff --git a/eos/effects/shipenergyneutralizerrangebonusac.py b/eos/effects/shipenergyneutralizerrangebonusac.py
new file mode 100755
index 000000000..caa221b5d
--- /dev/null
+++ b/eos/effects/shipenergyneutralizerrangebonusac.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Vangel
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer",
+ "energyDestabilizationRange", ship.getModifiedItemAttr("shipBonusAC") * level)
diff --git a/eos/effects/shipenergyneutralizerrangebonusaf2.py b/eos/effects/shipenergyneutralizerrangebonusaf2.py
new file mode 100755
index 000000000..48177ed33
--- /dev/null
+++ b/eos/effects/shipenergyneutralizerrangebonusaf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Malice
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer",
+ "energyDestabilizationRange", ship.getModifiedItemAttr("shipBonus2AF") * level)
diff --git a/eos/effects/shipenergyneutralizertransferamountbonusab.py b/eos/effects/shipenergyneutralizertransferamountbonusab.py
new file mode 100755
index 000000000..601b9a450
--- /dev/null
+++ b/eos/effects/shipenergyneutralizertransferamountbonusab.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Bhaalgorn
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer",
+ "energyDestabilizationAmount", ship.getModifiedItemAttr("shipBonusAB") * level)
diff --git a/eos/effects/shipenergyneutralizertransferamountbonusac.py b/eos/effects/shipenergyneutralizertransferamountbonusac.py
new file mode 100755
index 000000000..056c6cbe1
--- /dev/null
+++ b/eos/effects/shipenergyneutralizertransferamountbonusac.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Ashimmu
+# Ship: Vangel
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer",
+ "energyDestabilizationAmount", ship.getModifiedItemAttr("shipBonusAC") * level)
diff --git a/eos/effects/shipenergyneutralizertransferamountbonusaf.py b/eos/effects/shipenergyneutralizertransferamountbonusaf.py
new file mode 100755
index 000000000..8b1b83ba0
--- /dev/null
+++ b/eos/effects/shipenergyneutralizertransferamountbonusaf.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Cruor
+# Ship: Sentinel
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer",
+ "energyDestabilizationAmount", ship.getModifiedItemAttr("shipBonusAF") * level)
diff --git a/eos/effects/shipenergyneutralizertransferamountbonusaf2.py b/eos/effects/shipenergyneutralizertransferamountbonusaf2.py
new file mode 100755
index 000000000..607c2d262
--- /dev/null
+++ b/eos/effects/shipenergyneutralizertransferamountbonusaf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Malice
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer",
+ "energyDestabilizationAmount", ship.getModifiedItemAttr("shipBonus2AF") * level)
diff --git a/eos/effects/shipenergytcapneedbonusaf.py b/eos/effects/shipenergytcapneedbonusaf.py
new file mode 100755
index 000000000..92edcbcfb
--- /dev/null
+++ b/eos/effects/shipenergytcapneedbonusaf.py
@@ -0,0 +1,12 @@
+# Used by:
+# Ship: Crusader
+# Ship: Executioner
+# Ship: Gold Magnate
+# Ship: Retribution
+# Ship: Silver Magnate
+# Ship: Tormentor
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"),
+ "capacitorNeed", ship.getModifiedItemAttr("shipBonus2AF") * level)
diff --git a/eos/effects/shipenergytcapneedbonusrookie.py b/eos/effects/shipenergytcapneedbonusrookie.py
new file mode 100755
index 000000000..33ba98cb6
--- /dev/null
+++ b/eos/effects/shipenergytcapneedbonusrookie.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Hematos
+# Ship: Impairor
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"),
+ "capacitorNeed", ship.getModifiedItemAttr("rookieSETCapBonus"))
diff --git a/eos/effects/shipenergytrackingabc1.py b/eos/effects/shipenergytrackingabc1.py
new file mode 100644
index 000000000..e3ca61c83
--- /dev/null
+++ b/eos/effects/shipenergytrackingabc1.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Harbinger Navy Issue
+
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battlecruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Energy Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("shipBonusABC1") * level)
diff --git a/eos/effects/shipenergytransferrange1.py b/eos/effects/shipenergytransferrange1.py
new file mode 100755
index 000000000..1f03a1f52
--- /dev/null
+++ b/eos/effects/shipenergytransferrange1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Guardian
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Transfer Array",
+ "powerTransferRange", ship.getModifiedItemAttr("shipBonusAC") * level)
diff --git a/eos/effects/shipenergytransferrange2.py b/eos/effects/shipenergytransferrange2.py
new file mode 100755
index 000000000..ada260525
--- /dev/null
+++ b/eos/effects/shipenergytransferrange2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Basilisk
+# Ship: Etana
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Transfer Array",
+ "powerTransferRange", ship.getModifiedItemAttr("shipBonusCC2") * level)
diff --git a/eos/effects/shipenergyvampireamountbonusfixedaf2.py b/eos/effects/shipenergyvampireamountbonusfixedaf2.py
new file mode 100644
index 000000000..88ccb3a31
--- /dev/null
+++ b/eos/effects/shipenergyvampireamountbonusfixedaf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Malice
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire",
+ "powerTransferAmount", ship.getModifiedItemAttr("shipBonus2AF") * level)
diff --git a/eos/effects/shipenergyvampirerangebonusfixedac.py b/eos/effects/shipenergyvampirerangebonusfixedac.py
new file mode 100755
index 000000000..2b44cacd1
--- /dev/null
+++ b/eos/effects/shipenergyvampirerangebonusfixedac.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Vangel
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire",
+ "powerTransferRange", ship.getModifiedItemAttr("shipBonusAC") * level)
diff --git a/eos/effects/shipenergyvampirerangebonusfixedaf2.py b/eos/effects/shipenergyvampirerangebonusfixedaf2.py
new file mode 100644
index 000000000..287c9ef50
--- /dev/null
+++ b/eos/effects/shipenergyvampirerangebonusfixedaf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Malice
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire",
+ "powerTransferRange", ship.getModifiedItemAttr("shipBonus2AF") * level)
diff --git a/eos/effects/shipenergyvampiretransferamountbonusab.py b/eos/effects/shipenergyvampiretransferamountbonusab.py
new file mode 100755
index 000000000..dd267b52c
--- /dev/null
+++ b/eos/effects/shipenergyvampiretransferamountbonusab.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Bhaalgorn
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire",
+ "powerTransferAmount", ship.getModifiedItemAttr("shipBonusAB") * level)
diff --git a/eos/effects/shipenergyvampiretransferamountbonusac.py b/eos/effects/shipenergyvampiretransferamountbonusac.py
new file mode 100755
index 000000000..5d8173eac
--- /dev/null
+++ b/eos/effects/shipenergyvampiretransferamountbonusac.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Ashimmu
+# Ship: Vangel
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire",
+ "powerTransferAmount", ship.getModifiedItemAttr("shipBonusAC") * level)
diff --git a/eos/effects/shipetdamageaf.py b/eos/effects/shipetdamageaf.py
new file mode 100755
index 000000000..f94bbfb7b
--- /dev/null
+++ b/eos/effects/shipetdamageaf.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Crusader
+# Ship: Imperial Navy Slicer
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusAF") * level)
\ No newline at end of file
diff --git a/eos/effects/shipetoptimalrange2af.py b/eos/effects/shipetoptimalrange2af.py
new file mode 100755
index 000000000..02ded67db
--- /dev/null
+++ b/eos/effects/shipetoptimalrange2af.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Imperial Navy Slicer
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"),
+ "maxRange", ship.getModifiedItemAttr("shipBonus2AF") * level)
\ No newline at end of file
diff --git a/eos/effects/shipetspeedbonusab2.py b/eos/effects/shipetspeedbonusab2.py
new file mode 100755
index 000000000..e34d87576
--- /dev/null
+++ b/eos/effects/shipetspeedbonusab2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Armageddon (3 of 5)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Energy Turret"),
+ "speed", ship.getModifiedItemAttr("shipBonusAB2") * level)
\ No newline at end of file
diff --git a/eos/effects/shipfalloffbonusgf.py b/eos/effects/shipfalloffbonusgf.py
new file mode 100755
index 000000000..33ec8fc4a
--- /dev/null
+++ b/eos/effects/shipfalloffbonusgf.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Atron
+# Ship: Daredevil
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Hybrid Turret"),
+ "falloff", ship.getModifiedItemAttr("shipBonusGF2") * level)
diff --git a/eos/effects/shipfalloffbonusmf.py b/eos/effects/shipfalloffbonusmf.py
new file mode 100755
index 000000000..2184b18b2
--- /dev/null
+++ b/eos/effects/shipfalloffbonusmf.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Dramiel
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Projectile Turret"),
+ "falloff", ship.getModifiedItemAttr("shipBonusMF") * level)
diff --git a/eos/effects/shipfighterbomberdamagepiratesupercarrier.py b/eos/effects/shipfighterbomberdamagepiratesupercarrier.py
new file mode 100755
index 000000000..8bc58af76
--- /dev/null
+++ b/eos/effects/shipfighterbomberdamagepiratesupercarrier.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Revenant
+type = "passive"
+def handler(fit, ship, context):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Fighter Bombers"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shipfighterbomberhitpointspiratesupercarrier.py b/eos/effects/shipfighterbomberhitpointspiratesupercarrier.py
new file mode 100755
index 000000000..640c45b4d
--- /dev/null
+++ b/eos/effects/shipfighterbomberhitpointspiratesupercarrier.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Revenant
+type = "passive"
+def handler(fit, ship, context):
+ for type in ("shieldCapacity", "armorHP", "hp"):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Fighter Bombers"),
+ type, ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shipfighterdamagepiratesupercarrier.py b/eos/effects/shipfighterdamagepiratesupercarrier.py
new file mode 100755
index 000000000..e65556816
--- /dev/null
+++ b/eos/effects/shipfighterdamagepiratesupercarrier.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Revenant
+type = "passive"
+def handler(fit, ship, context):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Fighters"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shipfighterhitpointspiratesupercarrier.py b/eos/effects/shipfighterhitpointspiratesupercarrier.py
new file mode 100755
index 000000000..f96191d00
--- /dev/null
+++ b/eos/effects/shipfighterhitpointspiratesupercarrier.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Revenant
+type = "passive"
+def handler(fit, ship, context):
+ for type in ("shieldCapacity", "armorHP", "hp"):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Fighters"),
+ type, ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shipgchyieldbonusorefrig2.py b/eos/effects/shipgchyieldbonusorefrig2.py
new file mode 100755
index 000000000..5d0451b2f
--- /dev/null
+++ b/eos/effects/shipgchyieldbonusorefrig2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Venture
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Mining Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gas Cloud Harvesting"),
+ "duration", module.getModifiedItemAttr("shipBonusOREfrig2") * level)
\ No newline at end of file
diff --git a/eos/effects/shipheavyassaultmissileaoecloudsizecbc1.py b/eos/effects/shipheavyassaultmissileaoecloudsizecbc1.py
new file mode 100644
index 000000000..29218ad09
--- /dev/null
+++ b/eos/effects/shipheavyassaultmissileaoecloudsizecbc1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Drake Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battlecruiser").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
+ "aoeCloudSize", ship.getModifiedItemAttr("shipBonusCBC1") * level)
diff --git a/eos/effects/shipheavyassaultmissileaoecloudsizecc2.py b/eos/effects/shipheavyassaultmissileaoecloudsizecc2.py
new file mode 100644
index 000000000..5d110cd66
--- /dev/null
+++ b/eos/effects/shipheavyassaultmissileaoecloudsizecc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Caracal Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
+ "aoeCloudSize", ship.getModifiedItemAttr("shipBonusCC2") * level)
diff --git a/eos/effects/shipheavyassaultmissileemandexpandkinandthmdmgac1.py b/eos/effects/shipheavyassaultmissileemandexpandkinandthmdmgac1.py
new file mode 100755
index 000000000..7b476d48a
--- /dev/null
+++ b/eos/effects/shipheavyassaultmissileemandexpandkinandthmdmgac1.py
@@ -0,0 +1,9 @@
+# Used by:
+# Ship: Sacrilege
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Cruiser").level
+ damageTypes = ("em", "explosive", "kinetic", "thermal")
+ for damageType in damageTypes:
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
+ "{0}Damage".format(damageType), ship.getModifiedItemAttr("shipBonusAC") * level)
diff --git a/eos/effects/shipheavyassaultmissileemdmgpiratecruiser.py b/eos/effects/shipheavyassaultmissileemdmgpiratecruiser.py
new file mode 100755
index 000000000..66a3aded8
--- /dev/null
+++ b/eos/effects/shipheavyassaultmissileemdmgpiratecruiser.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Gnosis
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
+ "emDamage", ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shipheavyassaultmissileexpdmgpiratecruiser.py b/eos/effects/shipheavyassaultmissileexpdmgpiratecruiser.py
new file mode 100755
index 000000000..b3d7ee3da
--- /dev/null
+++ b/eos/effects/shipheavyassaultmissileexpdmgpiratecruiser.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Gnosis
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
+ "explosiveDamage", ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shipheavyassaultmissilekindmgpiratecruiser.py b/eos/effects/shipheavyassaultmissilekindmgpiratecruiser.py
new file mode 100755
index 000000000..f33c45d4f
--- /dev/null
+++ b/eos/effects/shipheavyassaultmissilekindmgpiratecruiser.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Gnosis
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
+ "kineticDamage", ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shipheavyassaultmissilethermdmgpiratecruiser.py b/eos/effects/shipheavyassaultmissilethermdmgpiratecruiser.py
new file mode 100755
index 000000000..b130fff57
--- /dev/null
+++ b/eos/effects/shipheavyassaultmissilethermdmgpiratecruiser.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Gnosis
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
+ "thermalDamage", ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shipheavyassaultmissilevelocitycbc2.py b/eos/effects/shipheavyassaultmissilevelocitycbc2.py
new file mode 100644
index 000000000..5487890ed
--- /dev/null
+++ b/eos/effects/shipheavyassaultmissilevelocitycbc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Drake Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battlecruiser").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusCBC2") * level)
diff --git a/eos/effects/shipheavymissileaoecloudsizecbc1.py b/eos/effects/shipheavymissileaoecloudsizecbc1.py
new file mode 100644
index 000000000..0676ae95c
--- /dev/null
+++ b/eos/effects/shipheavymissileaoecloudsizecbc1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Drake Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battlecruiser").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Missiles"),
+ "aoeCloudSize", ship.getModifiedItemAttr("shipBonusCBC1") * level)
diff --git a/eos/effects/shipheavymissileaoecloudsizecc2.py b/eos/effects/shipheavymissileaoecloudsizecc2.py
new file mode 100644
index 000000000..f46c0aab0
--- /dev/null
+++ b/eos/effects/shipheavymissileaoecloudsizecc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Caracal Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Missiles"),
+ "aoeCloudSize", ship.getModifiedItemAttr("shipBonusCC2") * level)
diff --git a/eos/effects/shipheavymissileemdmgpiratecruiser.py b/eos/effects/shipheavymissileemdmgpiratecruiser.py
new file mode 100755
index 000000000..0e17a4cc2
--- /dev/null
+++ b/eos/effects/shipheavymissileemdmgpiratecruiser.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Gnosis
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Missiles"),
+ "emDamage", ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shipheavymissileexpdmgpiratecruiser.py b/eos/effects/shipheavymissileexpdmgpiratecruiser.py
new file mode 100755
index 000000000..c2c55f466
--- /dev/null
+++ b/eos/effects/shipheavymissileexpdmgpiratecruiser.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Gnosis
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Missiles"),
+ "explosiveDamage", ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shipheavymissilekindmgpiratecruiser.py b/eos/effects/shipheavymissilekindmgpiratecruiser.py
new file mode 100755
index 000000000..cd4672382
--- /dev/null
+++ b/eos/effects/shipheavymissilekindmgpiratecruiser.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Gnosis
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Missiles"),
+ "kineticDamage", ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shipheavymissilethermdmgpiratecruiser.py b/eos/effects/shipheavymissilethermdmgpiratecruiser.py
new file mode 100755
index 000000000..cd4a65c37
--- /dev/null
+++ b/eos/effects/shipheavymissilethermdmgpiratecruiser.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Gnosis
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Missiles"),
+ "thermalDamage", ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shipheavymissilevelocitycbc2.py b/eos/effects/shipheavymissilevelocitycbc2.py
new file mode 100644
index 000000000..9e6e68cae
--- /dev/null
+++ b/eos/effects/shipheavymissilevelocitycbc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Drake Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battlecruiser").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Missiles"),
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusCBC2") * level)
diff --git a/eos/effects/shiphrangebonuscc.py b/eos/effects/shiphrangebonuscc.py
new file mode 100755
index 000000000..cf15224af
--- /dev/null
+++ b/eos/effects/shiphrangebonuscc.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Eagle
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
+ "maxRange", ship.getModifiedItemAttr("shipBonusCC") * level)
diff --git a/eos/effects/shiphtdamagebonuscc.py b/eos/effects/shiphtdamagebonuscc.py
new file mode 100755
index 000000000..c0ea740cd
--- /dev/null
+++ b/eos/effects/shiphtdamagebonuscc.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Moa
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusCC") * level)
diff --git a/eos/effects/shiphtdmgbonusfixedgc.py b/eos/effects/shiphtdmgbonusfixedgc.py
new file mode 100755
index 000000000..00f8a2a10
--- /dev/null
+++ b/eos/effects/shiphtdmgbonusfixedgc.py
@@ -0,0 +1,12 @@
+# Used by:
+# Variations of ship: Thorax (3 of 4)
+# Variations of ship: Vexor (3 of 4)
+# Ship: Adrestia
+# Ship: Arazu
+# Ship: Exequror Navy Issue
+# Ship: Lachesis
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusGC") * level)
diff --git a/eos/effects/shiphtdmgbonusgb.py b/eos/effects/shiphtdmgbonusgb.py
new file mode 100755
index 000000000..75fa77f9c
--- /dev/null
+++ b/eos/effects/shiphtdmgbonusgb.py
@@ -0,0 +1,11 @@
+# Used by:
+# Ship: Dominix Navy Issue
+# Ship: Hyperion
+# Ship: Kronos
+# Ship: Megathron Federate Issue
+# Ship: Sin
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Hybrid Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusGB") * level)
diff --git a/eos/effects/shiphttrackingbonusgb.py b/eos/effects/shiphttrackingbonusgb.py
new file mode 100755
index 000000000..12faec2d9
--- /dev/null
+++ b/eos/effects/shiphttrackingbonusgb.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Vindicator
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Hybrid Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("shipBonusGB") * level)
diff --git a/eos/effects/shiphttrackingbonusgb2.py b/eos/effects/shiphttrackingbonusgb2.py
new file mode 100755
index 000000000..a13ea08c3
--- /dev/null
+++ b/eos/effects/shiphttrackingbonusgb2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ships named like: Megathron (3 of 3)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Hybrid Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("shipBonusGB2") * level)
diff --git a/eos/effects/shiphturretfalloffbonusgc.py b/eos/effects/shiphturretfalloffbonusgc.py
new file mode 100755
index 000000000..57bff3b0b
--- /dev/null
+++ b/eos/effects/shiphturretfalloffbonusgc.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Vigilant
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
+ "falloff", ship.getModifiedItemAttr("shipBonusGC") * level)
diff --git a/eos/effects/shiphybriddamagebonuscbc2.py b/eos/effects/shiphybriddamagebonuscbc2.py
new file mode 100755
index 000000000..89435b863
--- /dev/null
+++ b/eos/effects/shiphybriddamagebonuscbc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Naga
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battlecruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Hybrid Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusCBC2") * level)
diff --git a/eos/effects/shiphybriddamagebonuscf.py b/eos/effects/shiphybriddamagebonuscf.py
new file mode 100755
index 000000000..4ab5ca01a
--- /dev/null
+++ b/eos/effects/shiphybriddamagebonuscf.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Raptor
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Hybrid Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusCF") * level)
\ No newline at end of file
diff --git a/eos/effects/shiphybriddamagebonuscf2.py b/eos/effects/shiphybriddamagebonuscf2.py
new file mode 100755
index 000000000..39ec765d2
--- /dev/null
+++ b/eos/effects/shiphybriddamagebonuscf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Merlin
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Hybrid Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusCF2") * level)
diff --git a/eos/effects/shiphybriddamagebonusgbc2.py b/eos/effects/shiphybriddamagebonusgbc2.py
new file mode 100644
index 000000000..b04c5ca78
--- /dev/null
+++ b/eos/effects/shiphybriddamagebonusgbc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Talos
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Battlecruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Hybrid Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusGBC2") * level)
diff --git a/eos/effects/shiphybriddmg1gbc1.py b/eos/effects/shiphybriddmg1gbc1.py
new file mode 100755
index 000000000..e49c2fe78
--- /dev/null
+++ b/eos/effects/shiphybriddmg1gbc1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Brutix (4 of 4)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Battlecruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusGBC1") * level)
diff --git a/eos/effects/shiphybriddmgpiratebattleship.py b/eos/effects/shiphybriddmgpiratebattleship.py
new file mode 100755
index 000000000..a14b2fae0
--- /dev/null
+++ b/eos/effects/shiphybriddmgpiratebattleship.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Vindicator
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Hybrid Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shiphybriddmgpiratecruiser.py b/eos/effects/shiphybriddmgpiratecruiser.py
new file mode 100755
index 000000000..ded9eb36b
--- /dev/null
+++ b/eos/effects/shiphybriddmgpiratecruiser.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Gnosis
+# Ship: Vigilant
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shiphybridfalloff1gd1.py b/eos/effects/shiphybridfalloff1gd1.py
new file mode 100755
index 000000000..16107334d
--- /dev/null
+++ b/eos/effects/shiphybridfalloff1gd1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Catalyst (7 of 7)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Destroyer").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Hybrid Turret"),
+ "falloff", ship.getModifiedItemAttr("shipBonusGD1") * level)
diff --git a/eos/effects/shiphybridoptimal1cbc1.py b/eos/effects/shiphybridoptimal1cbc1.py
new file mode 100755
index 000000000..be7b0e7a5
--- /dev/null
+++ b/eos/effects/shiphybridoptimal1cbc1.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Ferox
+# Ship: Vulture
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battlecruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
+ "maxRange", ship.getModifiedItemAttr("shipBonusCBC1") * level)
diff --git a/eos/effects/shiphybridrange1cd1.py b/eos/effects/shiphybridrange1cd1.py
new file mode 100755
index 000000000..1d979d1aa
--- /dev/null
+++ b/eos/effects/shiphybridrange1cd1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Cormorant
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Destroyer").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Hybrid Turret"),
+ "maxRange", ship.getModifiedItemAttr("shipBonusCD1") * level)
diff --git a/eos/effects/shiphybridrangebonuscbc1.py b/eos/effects/shiphybridrangebonuscbc1.py
new file mode 100755
index 000000000..ce1446c9a
--- /dev/null
+++ b/eos/effects/shiphybridrangebonuscbc1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Naga
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battlecruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Hybrid Turret"),
+ "maxRange", ship.getModifiedItemAttr("shipBonusCBC1") * level)
diff --git a/eos/effects/shiphybridrangebonuscf2.py b/eos/effects/shiphybridrangebonuscf2.py
new file mode 100755
index 000000000..bd5178236
--- /dev/null
+++ b/eos/effects/shiphybridrangebonuscf2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Harpy
+# Ship: Raptor
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Hybrid Turret"),
+ "maxRange", ship.getModifiedItemAttr("shipBonusCF2") * level)
\ No newline at end of file
diff --git a/eos/effects/shiphybridrangebonusrookie.py b/eos/effects/shiphybridrangebonusrookie.py
new file mode 100755
index 000000000..0ee5ffcca
--- /dev/null
+++ b/eos/effects/shiphybridrangebonusrookie.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Ibis
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Hybrid Turret"),
+ "maxRange", ship.getModifiedItemAttr("rookieSHTOptimalBonus"))
\ No newline at end of file
diff --git a/eos/effects/shiphybridtracking1gd2.py b/eos/effects/shiphybridtracking1gd2.py
new file mode 100755
index 000000000..26daaab6f
--- /dev/null
+++ b/eos/effects/shiphybridtracking1gd2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Variations of ship: Catalyst (7 of 7)
+# Ship: Algos
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Destroyer").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Hybrid Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("shipBonusGD2") * level)
diff --git a/eos/effects/shiphybridtrackingcd2.py b/eos/effects/shiphybridtrackingcd2.py
new file mode 100644
index 000000000..5fa5adcb6
--- /dev/null
+++ b/eos/effects/shiphybridtrackingcd2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Cormorant
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Destroyer").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Hybrid Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("shipBonusCD2") * level)
diff --git a/eos/effects/shiphybridtrackinggbc2.py b/eos/effects/shiphybridtrackinggbc2.py
new file mode 100644
index 000000000..49e44c555
--- /dev/null
+++ b/eos/effects/shiphybridtrackinggbc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Brutix Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Battlecruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("shipBonusGBC2") * level)
diff --git a/eos/effects/shiphybridtrackinggc2.py b/eos/effects/shiphybridtrackinggc2.py
new file mode 100755
index 000000000..d1c863245
--- /dev/null
+++ b/eos/effects/shiphybridtrackinggc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Thorax
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("shipBonusGC2") * level)
diff --git a/eos/effects/shiphybridturretrofbonusgc2.py b/eos/effects/shiphybridturretrofbonusgc2.py
new file mode 100755
index 000000000..17f059f42
--- /dev/null
+++ b/eos/effects/shiphybridturretrofbonusgc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Exequror Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
+ "speed", ship.getModifiedItemAttr("shipBonusGC2") * level)
diff --git a/eos/effects/shiplargehybridtrackingbonusgbc1.py b/eos/effects/shiplargehybridtrackingbonusgbc1.py
new file mode 100755
index 000000000..221d4696e
--- /dev/null
+++ b/eos/effects/shiplargehybridtrackingbonusgbc1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Talos
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Battlecruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Hybrid Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("shipBonusGBC1") * level)
diff --git a/eos/effects/shiplargehybridturretrofgb.py b/eos/effects/shiplargehybridturretrofgb.py
new file mode 100644
index 000000000..a830b49dd
--- /dev/null
+++ b/eos/effects/shiplargehybridturretrofgb.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Megathron
+# Ship: Megathron Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Hybrid Turret"),
+ "speed", ship.getModifiedItemAttr("shipBonusGB") * level)
diff --git a/eos/effects/shiplargelasercapabc1.py b/eos/effects/shiplargelasercapabc1.py
new file mode 100755
index 000000000..57d9132c3
--- /dev/null
+++ b/eos/effects/shiplargelasercapabc1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Oracle
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battlecruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Energy Turret"),
+ "capacitorNeed", ship.getModifiedItemAttr("shipBonusABC1") * level)
diff --git a/eos/effects/shiplargelaserdamagebonusabc2.py b/eos/effects/shiplargelaserdamagebonusabc2.py
new file mode 100755
index 000000000..3b95e8256
--- /dev/null
+++ b/eos/effects/shiplargelaserdamagebonusabc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Oracle
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battlecruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Energy Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusABC2") * level)
diff --git a/eos/effects/shiplasercap1abc2.py b/eos/effects/shiplasercap1abc2.py
new file mode 100755
index 000000000..320099521
--- /dev/null
+++ b/eos/effects/shiplasercap1abc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Absolution
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battlecruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Energy Turret"),
+ "capacitorNeed", ship.getModifiedItemAttr("shipBonusABC2") * level)
diff --git a/eos/effects/shiplasercapabc1.py b/eos/effects/shiplasercapabc1.py
new file mode 100755
index 000000000..a2e41ff47
--- /dev/null
+++ b/eos/effects/shiplasercapabc1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Harbinger
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battlecruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Energy Turret"),
+ "capacitorNeed", ship.getModifiedItemAttr("shipBonusABC1") * level)
diff --git a/eos/effects/shiplasercapneed2ad1.py b/eos/effects/shiplasercapneed2ad1.py
new file mode 100755
index 000000000..d8163db37
--- /dev/null
+++ b/eos/effects/shiplasercapneed2ad1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Coercer
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Destroyer").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"),
+ "capacitorNeed", ship.getModifiedItemAttr("shipBonusAD1") * level)
diff --git a/eos/effects/shiplaserdamagebonusabc2.py b/eos/effects/shiplaserdamagebonusabc2.py
new file mode 100755
index 000000000..bf705c9a4
--- /dev/null
+++ b/eos/effects/shiplaserdamagebonusabc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Harbinger (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battlecruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Energy Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusABC2") * level)
diff --git a/eos/effects/shiplaserdamagepiratebattleship.py b/eos/effects/shiplaserdamagepiratebattleship.py
new file mode 100755
index 000000000..6fc8e720a
--- /dev/null
+++ b/eos/effects/shiplaserdamagepiratebattleship.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Bhaalgorn
+# Ship: Nightmare
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Energy Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shiplaserrofac2.py b/eos/effects/shiplaserrofac2.py
new file mode 100755
index 000000000..d4495ffac
--- /dev/null
+++ b/eos/effects/shiplaserrofac2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Omen
+# Ship: Zealot
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Energy Turret"),
+ "speed", ship.getModifiedItemAttr("shipBonusAC2") * level)
diff --git a/eos/effects/shiplasertracking2ad2.py b/eos/effects/shiplasertracking2ad2.py
new file mode 100755
index 000000000..380f4c49d
--- /dev/null
+++ b/eos/effects/shiplasertracking2ad2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Coercer
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Destroyer").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("shipBonusAD2") * level)
diff --git a/eos/effects/shiplauncherrofbonusmb1.py b/eos/effects/shiplauncherrofbonusmb1.py
new file mode 100755
index 000000000..2e830fc37
--- /dev/null
+++ b/eos/effects/shiplauncherrofbonusmb1.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Typhoon
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Battleship").level
+ groups = ("Missile Launcher Torpedo", "Missile Launcher Cruise")
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
+ "speed", ship.getModifiedItemAttr("shipBonusMB") * level)
diff --git a/eos/effects/shiplightmissilemaxvelocitybonusrookie.py b/eos/effects/shiplightmissilemaxvelocitybonusrookie.py
new file mode 100755
index 000000000..353ad6ff9
--- /dev/null
+++ b/eos/effects/shiplightmissilemaxvelocitybonusrookie.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Taipan
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Light Missiles"),
+ "maxVelocity", ship.getModifiedItemAttr("rookieLightMissileVelocity"))
diff --git a/eos/effects/shipmaxlockedtargetsbonusaddonline.py b/eos/effects/shipmaxlockedtargetsbonusaddonline.py
new file mode 100755
index 000000000..2312fa901
--- /dev/null
+++ b/eos/effects/shipmaxlockedtargetsbonusaddonline.py
@@ -0,0 +1,5 @@
+# Used by:
+# Modules from group: Signal Amplifier (11 of 11)
+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
new file mode 100755
index 000000000..8cd1bdc12
--- /dev/null
+++ b/eos/effects/shipmaxtargetrangebonusonline.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules from group: Signal Amplifier (11 of 11)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.boostItemAttr("maxTargetRange", module.getModifiedItemAttr("maxTargetRangeBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/shipmaxvelocitymc2.py b/eos/effects/shipmaxvelocitymc2.py
new file mode 100755
index 000000000..d6040a587
--- /dev/null
+++ b/eos/effects/shipmaxvelocitymc2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Vagabond
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Cruiser").level
+ fit.ship.boostItemAttr("maxVelocity", ship.getModifiedItemAttr("shipBonusMC2") * level)
diff --git a/eos/effects/shipmetcdamagebonusac.py b/eos/effects/shipmetcdamagebonusac.py
new file mode 100755
index 000000000..1806931ff
--- /dev/null
+++ b/eos/effects/shipmetcdamagebonusac.py
@@ -0,0 +1,9 @@
+# Used by:
+# Ship: Augoror Navy Issue
+# Ship: Maller
+# Ship: Omen Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Energy Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusAC") * level)
diff --git a/eos/effects/shipminingbonusore2.py b/eos/effects/shipminingbonusore2.py
new file mode 100755
index 000000000..78209d4d9
--- /dev/null
+++ b/eos/effects/shipminingbonusore2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Variations of ship: Covetor (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Mining Barge").level
+ groups = ("Strip Miner", "Frequency Mining Laser")
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
+ "miningAmount", ship.getModifiedItemAttr("shipBonusORE2") * level)
diff --git a/eos/effects/shipminingbonusorefrig1.py b/eos/effects/shipminingbonusorefrig1.py
new file mode 100755
index 000000000..d6f138813
--- /dev/null
+++ b/eos/effects/shipminingbonusorefrig1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Venture
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Mining Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining"),
+ "miningAmount", module.getModifiedItemAttr("shipBonusOREfrig1") * level)
\ No newline at end of file
diff --git a/eos/effects/shipmissileaoevelocityad2.py b/eos/effects/shipmissileaoevelocityad2.py
new file mode 100755
index 000000000..0d4f2dad9
--- /dev/null
+++ b/eos/effects/shipmissileaoevelocityad2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Heretic
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Destroyer").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "aoeVelocity", ship.getModifiedItemAttr("shipBonusAD2") * level)
diff --git a/eos/effects/shipmissileassaultmissilevelocitybonuscc2.py b/eos/effects/shipmissileassaultmissilevelocitybonuscc2.py
new file mode 100755
index 000000000..3def24ece
--- /dev/null
+++ b/eos/effects/shipmissileassaultmissilevelocitybonuscc2.py
@@ -0,0 +1,9 @@
+# Used by:
+# Ship: Caracal
+# Ship: Cerberus
+# Ship: Osprey Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusCC2") * level)
diff --git a/eos/effects/shipmissileemdamagecc.py b/eos/effects/shipmissileemdamagecc.py
new file mode 100644
index 000000000..273e02c23
--- /dev/null
+++ b/eos/effects/shipmissileemdamagecc.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Osprey Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "emDamage", ship.getModifiedItemAttr("shipBonusCC") * level)
diff --git a/eos/effects/shipmissileemdamagemb.py b/eos/effects/shipmissileemdamagemb.py
new file mode 100644
index 000000000..8ae11c3d7
--- /dev/null
+++ b/eos/effects/shipmissileemdamagemb.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Typhoon Fleet Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Battleship").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "emDamage", ship.getModifiedItemAttr("shipBonusMB") * level)
diff --git a/eos/effects/shipmissileemdamagemc2.py b/eos/effects/shipmissileemdamagemc2.py
new file mode 100644
index 000000000..523e45665
--- /dev/null
+++ b/eos/effects/shipmissileemdamagemc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Scythe Fleet Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Cruiser").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "emDamage", ship.getModifiedItemAttr("shipBonusMC2") * level)
diff --git a/eos/effects/shipmissileexpdamagecc.py b/eos/effects/shipmissileexpdamagecc.py
new file mode 100644
index 000000000..706076d21
--- /dev/null
+++ b/eos/effects/shipmissileexpdamagecc.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Osprey Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "explosiveDamage", ship.getModifiedItemAttr("shipBonusCC") * level)
diff --git a/eos/effects/shipmissileexpdamagemc2.py b/eos/effects/shipmissileexpdamagemc2.py
new file mode 100644
index 000000000..47e59d093
--- /dev/null
+++ b/eos/effects/shipmissileexpdamagemc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Scythe Fleet Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Cruiser").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "explosiveDamage", ship.getModifiedItemAttr("shipBonusMC2") * level)
diff --git a/eos/effects/shipmissileexplosivedamagemb.py b/eos/effects/shipmissileexplosivedamagemb.py
new file mode 100644
index 000000000..ba0e0304c
--- /dev/null
+++ b/eos/effects/shipmissileexplosivedamagemb.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Typhoon Fleet Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Battleship").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "explosiveDamage", ship.getModifiedItemAttr("shipBonusMB") * level)
diff --git a/eos/effects/shipmissileheavyassaultrofcbc1.py b/eos/effects/shipmissileheavyassaultrofcbc1.py
new file mode 100644
index 000000000..36c1ea2a6
--- /dev/null
+++ b/eos/effects/shipmissileheavyassaultrofcbc1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Nighthawk
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battlecruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Heavy Assault",
+ "speed", ship.getModifiedItemAttr("shipBonusCBC1") * level)
diff --git a/eos/effects/shipmissileheavyassaultvelocityabc2.py b/eos/effects/shipmissileheavyassaultvelocityabc2.py
new file mode 100755
index 000000000..ca7e354f1
--- /dev/null
+++ b/eos/effects/shipmissileheavyassaultvelocityabc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Damnation
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battlecruiser").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusABC2") * level)
diff --git a/eos/effects/shipmissileheavyrofcbc1.py b/eos/effects/shipmissileheavyrofcbc1.py
new file mode 100644
index 000000000..7cce90790
--- /dev/null
+++ b/eos/effects/shipmissileheavyrofcbc1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Nighthawk
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battlecruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Heavy",
+ "speed", ship.getModifiedItemAttr("shipBonusCBC1") * level)
diff --git a/eos/effects/shipmissileheavyvelocityabc2.py b/eos/effects/shipmissileheavyvelocityabc2.py
new file mode 100755
index 000000000..71653463c
--- /dev/null
+++ b/eos/effects/shipmissileheavyvelocityabc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Damnation
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battlecruiser").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Missiles"),
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusABC2") * level)
diff --git a/eos/effects/shipmissileheavyvelocitybonuscc2.py b/eos/effects/shipmissileheavyvelocitybonuscc2.py
new file mode 100755
index 000000000..f55b6ef40
--- /dev/null
+++ b/eos/effects/shipmissileheavyvelocitybonuscc2.py
@@ -0,0 +1,9 @@
+# Used by:
+# Ship: Caracal
+# Ship: Cerberus
+# Ship: Osprey Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Missiles"),
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusCC2") * level)
diff --git a/eos/effects/shipmissilekindamagecc2.py b/eos/effects/shipmissilekindamagecc2.py
new file mode 100644
index 000000000..c853417db
--- /dev/null
+++ b/eos/effects/shipmissilekindamagecc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Osprey Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "kineticDamage", ship.getModifiedItemAttr("shipBonusCC2") * level)
diff --git a/eos/effects/shipmissilekineticdamagecc.py b/eos/effects/shipmissilekineticdamagecc.py
new file mode 100755
index 000000000..7f715b736
--- /dev/null
+++ b/eos/effects/shipmissilekineticdamagecc.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Cerberus
+# Ship: Onyx
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "kineticDamage", ship.getModifiedItemAttr("shipBonusCC") * level)
diff --git a/eos/effects/shipmissilekineticdamagecf.py b/eos/effects/shipmissilekineticdamagecf.py
new file mode 100755
index 000000000..c78196bd5
--- /dev/null
+++ b/eos/effects/shipmissilekineticdamagecf.py
@@ -0,0 +1,11 @@
+# Used by:
+# Ship: Buzzard
+# Ship: Caldari Navy Hookbill
+# Ship: Condor
+# Ship: Crow
+# Ship: Hawk
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "kineticDamage", ship.getModifiedItemAttr("shipBonusCF") * level)
diff --git a/eos/effects/shipmissilekineticdamagemb.py b/eos/effects/shipmissilekineticdamagemb.py
new file mode 100644
index 000000000..dba9702a8
--- /dev/null
+++ b/eos/effects/shipmissilekineticdamagemb.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Typhoon Fleet Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Battleship").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "kineticDamage", ship.getModifiedItemAttr("shipBonusMB") * level)
diff --git a/eos/effects/shipmissilekineticdamagemc2.py b/eos/effects/shipmissilekineticdamagemc2.py
new file mode 100644
index 000000000..1eb3d7609
--- /dev/null
+++ b/eos/effects/shipmissilekineticdamagemc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Scythe Fleet Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Cruiser").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "kineticDamage", ship.getModifiedItemAttr("shipBonusMC2") * level)
diff --git a/eos/effects/shipmissilekineticdamagerookie.py b/eos/effects/shipmissilekineticdamagerookie.py
new file mode 100755
index 000000000..c2bd05b75
--- /dev/null
+++ b/eos/effects/shipmissilekineticdamagerookie.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Ibis
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "kineticDamage", ship.getModifiedItemAttr("rookieMissileKinDamageBonus"))
diff --git a/eos/effects/shipmissilelauncherspeedbonusmc2.py b/eos/effects/shipmissilelauncherspeedbonusmc2.py
new file mode 100755
index 000000000..4744281a4
--- /dev/null
+++ b/eos/effects/shipmissilelauncherspeedbonusmc2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Bellicose
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Cruiser").level
+ groups = ("Missile Launcher Rapid Light", "Missile Launcher Heavy", "Missile Launcher Heavy Assault")
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
+ "speed", ship.getModifiedItemAttr("shipBonusMC2") * level)
diff --git a/eos/effects/shipmissilelightvelocitybonuscc2.py b/eos/effects/shipmissilelightvelocitybonuscc2.py
new file mode 100755
index 000000000..ed86cbeab
--- /dev/null
+++ b/eos/effects/shipmissilelightvelocitybonuscc2.py
@@ -0,0 +1,9 @@
+# Used by:
+# Ship: Caracal
+# Ship: Cerberus
+# Ship: Osprey Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Light Missiles"),
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusCC2") * level)
diff --git a/eos/effects/shipmissilelightvelocitybonuscf2.py b/eos/effects/shipmissilelightvelocitybonuscf2.py
new file mode 100755
index 000000000..1e1dffbfe
--- /dev/null
+++ b/eos/effects/shipmissilelightvelocitybonuscf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Caldari Navy Hookbill
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Light Missiles"),
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusCF2") * level)
diff --git a/eos/effects/shipmissilerapidlightrofcbc1.py b/eos/effects/shipmissilerapidlightrofcbc1.py
new file mode 100644
index 000000000..e2c536d36
--- /dev/null
+++ b/eos/effects/shipmissilerapidlightrofcbc1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Nighthawk
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battlecruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Rapid Light",
+ "speed", ship.getModifiedItemAttr("shipBonusCBC1") * level)
diff --git a/eos/effects/shipmissilerocketvelocitybonuscf2.py b/eos/effects/shipmissilerocketvelocitybonuscf2.py
new file mode 100755
index 000000000..5f0f0b352
--- /dev/null
+++ b/eos/effects/shipmissilerocketvelocitybonuscf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Caldari Navy Hookbill
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"),
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusCF2") * level)
diff --git a/eos/effects/shipmissilerofcc.py b/eos/effects/shipmissilerofcc.py
new file mode 100755
index 000000000..57953a243
--- /dev/null
+++ b/eos/effects/shipmissilerofcc.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ships named like: Caracal (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ groups = ("Missile Launcher Heavy", "Missile Launcher Rapid Light", "Missile Launcher Heavy Assault")
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
+ "speed", ship.getModifiedItemAttr("shipBonusCC") * level)
diff --git a/eos/effects/shipmissilespeedbonusaf.py b/eos/effects/shipmissilespeedbonusaf.py
new file mode 100755
index 000000000..a88bc8c4a
--- /dev/null
+++ b/eos/effects/shipmissilespeedbonusaf.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Vengeance
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Missile Launcher Operation"),
+ "speed", ship.getModifiedItemAttr("shipBonus2AF") * level)
diff --git a/eos/effects/shipmissilespeedbonuscf.py b/eos/effects/shipmissilespeedbonuscf.py
new file mode 100755
index 000000000..4e250e1a4
--- /dev/null
+++ b/eos/effects/shipmissilespeedbonuscf.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Buzzard
+# Ship: Hawk
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Missile Launcher Operation"),
+ "speed", ship.getModifiedItemAttr("shipBonusCF2") * level)
diff --git a/eos/effects/shipmissilethermaldamagemb.py b/eos/effects/shipmissilethermaldamagemb.py
new file mode 100644
index 000000000..e960aa2c1
--- /dev/null
+++ b/eos/effects/shipmissilethermaldamagemb.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Typhoon Fleet Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Battleship").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "thermalDamage", ship.getModifiedItemAttr("shipBonusMB") * level)
diff --git a/eos/effects/shipmissilethermdamagecc.py b/eos/effects/shipmissilethermdamagecc.py
new file mode 100644
index 000000000..2ad9d4108
--- /dev/null
+++ b/eos/effects/shipmissilethermdamagecc.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Osprey Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "thermalDamage", ship.getModifiedItemAttr("shipBonusCC") * level)
diff --git a/eos/effects/shipmissilethermdamagemc2.py b/eos/effects/shipmissilethermdamagemc2.py
new file mode 100644
index 000000000..fbcf6a1da
--- /dev/null
+++ b/eos/effects/shipmissilethermdamagemc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Scythe Fleet Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Cruiser").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "thermalDamage", ship.getModifiedItemAttr("shipBonusMC2") * level)
diff --git a/eos/effects/shipmissilevelocitycd1.py b/eos/effects/shipmissilevelocitycd1.py
new file mode 100755
index 000000000..df8ca232d
--- /dev/null
+++ b/eos/effects/shipmissilevelocitycd1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Flycatcher
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Destroyer").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusCD1") * level)
diff --git a/eos/effects/shipmissilevelocitycf.py b/eos/effects/shipmissilevelocitycf.py
new file mode 100755
index 000000000..b9d9aaf5f
--- /dev/null
+++ b/eos/effects/shipmissilevelocitycf.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Kestrel
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Destroyers").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusCF") * level)
diff --git a/eos/effects/shipmissilevelocitypiratefactioncruise.py b/eos/effects/shipmissilevelocitypiratefactioncruise.py
new file mode 100755
index 000000000..d5af7a255
--- /dev/null
+++ b/eos/effects/shipmissilevelocitypiratefactioncruise.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Rattlesnake
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Cruise Missiles"),
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusPirateFaction"))
\ No newline at end of file
diff --git a/eos/effects/shipmissilevelocitypiratefactionfrigate.py b/eos/effects/shipmissilevelocitypiratefactionfrigate.py
new file mode 100755
index 000000000..bbed3cadb
--- /dev/null
+++ b/eos/effects/shipmissilevelocitypiratefactionfrigate.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Worm
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Light Missiles") or mod.charge.requiresSkill("Rockets"),
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shipmissilevelocitypiratefactionheavy.py b/eos/effects/shipmissilevelocitypiratefactionheavy.py
new file mode 100755
index 000000000..7e650ecdc
--- /dev/null
+++ b/eos/effects/shipmissilevelocitypiratefactionheavy.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Gila
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Missiles"),
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shipmissilevelocitypiratefactionheavyassault.py b/eos/effects/shipmissilevelocitypiratefactionheavyassault.py
new file mode 100755
index 000000000..3c4e2d715
--- /dev/null
+++ b/eos/effects/shipmissilevelocitypiratefactionheavyassault.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Gila
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shipmissilevelocitypiratefactionlight.py b/eos/effects/shipmissilevelocitypiratefactionlight.py
new file mode 100755
index 000000000..9b3231d7b
--- /dev/null
+++ b/eos/effects/shipmissilevelocitypiratefactionlight.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Corax
+# Ship: Gila
+# Ship: Talwar
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Light Missiles"),
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shipmissilevelocitypiratefactionrocket.py b/eos/effects/shipmissilevelocitypiratefactionrocket.py
new file mode 100755
index 000000000..27f9650af
--- /dev/null
+++ b/eos/effects/shipmissilevelocitypiratefactionrocket.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Corax
+# Ship: Talwar
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"),
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shipmissilevelocitypiratefactiontorp.py b/eos/effects/shipmissilevelocitypiratefactiontorp.py
new file mode 100755
index 000000000..52b86d0e7
--- /dev/null
+++ b/eos/effects/shipmissilevelocitypiratefactiontorp.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Rattlesnake
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Torpedoes"),
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusPirateFaction"))
\ No newline at end of file
diff --git a/eos/effects/shipmtfalloffbonusatc.py b/eos/effects/shipmtfalloffbonusatc.py
new file mode 100755
index 000000000..9e569db23
--- /dev/null
+++ b/eos/effects/shipmtfalloffbonusatc.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Mimir
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
+ "falloff", ship.getModifiedItemAttr("shipBonusATC2"))
diff --git a/eos/effects/shipmtfalloffbonusatf.py b/eos/effects/shipmtfalloffbonusatf.py
new file mode 100755
index 000000000..7e72f3c69
--- /dev/null
+++ b/eos/effects/shipmtfalloffbonusatf.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Freki
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Projectile Turret"),
+ "falloff", ship.getModifiedItemAttr("shipBonusATF2"))
\ No newline at end of file
diff --git a/eos/effects/shipmtmaxrangebonusatc.py b/eos/effects/shipmtmaxrangebonusatc.py
new file mode 100755
index 000000000..67831c266
--- /dev/null
+++ b/eos/effects/shipmtmaxrangebonusatc.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Mimir
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
+ "maxRange", ship.getModifiedItemAttr("shipBonusATC2"))
diff --git a/eos/effects/shipmtmaxrangebonusatf.py b/eos/effects/shipmtmaxrangebonusatf.py
new file mode 100755
index 000000000..ad6fe348e
--- /dev/null
+++ b/eos/effects/shipmtmaxrangebonusatf.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Freki
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Projectile Turret"),
+ "maxRange", ship.getModifiedItemAttr("shipBonusATF2"))
diff --git a/eos/effects/shipneutdestabilizationamountbonusrookie.py b/eos/effects/shipneutdestabilizationamountbonusrookie.py
new file mode 100755
index 000000000..6b612f817
--- /dev/null
+++ b/eos/effects/shipneutdestabilizationamountbonusrookie.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Hematos
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer",
+ "energyDestabilizationAmount", ship.getModifiedItemAttr("rookieNeutDrain"))
diff --git a/eos/effects/shipnostransferamountbonusrookie.py b/eos/effects/shipnostransferamountbonusrookie.py
new file mode 100755
index 000000000..5099e46b8
--- /dev/null
+++ b/eos/effects/shipnostransferamountbonusrookie.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Hematos
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire",
+ "powerTransferAmount", ship.getModifiedItemAttr("rookieNosDrain"))
diff --git a/eos/effects/shippdmgbonusmf.py b/eos/effects/shippdmgbonusmf.py
new file mode 100755
index 000000000..480938de0
--- /dev/null
+++ b/eos/effects/shippdmgbonusmf.py
@@ -0,0 +1,11 @@
+# Used by:
+# Variations of ship: Rifter (3 of 3)
+# Variations of ship: Slasher (3 of 3)
+# Ship: Cheetah
+# Ship: Freki
+# Ship: Republic Fleet Firetail
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Projectile Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusMF") * level)
diff --git a/eos/effects/shipprojectiledamagemd1.py b/eos/effects/shipprojectiledamagemd1.py
new file mode 100755
index 000000000..656294c32
--- /dev/null
+++ b/eos/effects/shipprojectiledamagemd1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Thrasher (3 of 3)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Destroyer").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Projectile Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusMD1") * level)
diff --git a/eos/effects/shipprojectiledmgmc.py b/eos/effects/shipprojectiledmgmc.py
new file mode 100755
index 000000000..c36ab756c
--- /dev/null
+++ b/eos/effects/shipprojectiledmgmc.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Mimir
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusMC") * level)
diff --git a/eos/effects/shipprojectiledmgmc2.py b/eos/effects/shipprojectiledmgmc2.py
new file mode 100755
index 000000000..5299ed545
--- /dev/null
+++ b/eos/effects/shipprojectiledmgmc2.py
@@ -0,0 +1,9 @@
+# Used by:
+# Ship: Cynabal
+# Ship: Muninn
+# Ship: Rupture
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusMC2") * level)
diff --git a/eos/effects/shipprojectiledmgpiratecruiser.py b/eos/effects/shipprojectiledmgpiratecruiser.py
new file mode 100755
index 000000000..31d487bc6
--- /dev/null
+++ b/eos/effects/shipprojectiledmgpiratecruiser.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Gnosis
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shipprojectilefalloffbonusmbc2.py b/eos/effects/shipprojectilefalloffbonusmbc2.py
new file mode 100755
index 000000000..9a3208e55
--- /dev/null
+++ b/eos/effects/shipprojectilefalloffbonusmbc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Tornado
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Battlecruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Projectile Turret"),
+ "falloff", ship.getModifiedItemAttr("shipBonusMBC2") * level)
diff --git a/eos/effects/shipprojectileoptimalbonusemf2.py b/eos/effects/shipprojectileoptimalbonusemf2.py
new file mode 100755
index 000000000..3d3ae10bc
--- /dev/null
+++ b/eos/effects/shipprojectileoptimalbonusemf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Cheetah
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Projectile Turret"),
+ "maxRange", ship.getModifiedItemAttr("shipBonusMF2") * level)
diff --git a/eos/effects/shipprojectilerof1mbc2.py b/eos/effects/shipprojectilerof1mbc2.py
new file mode 100755
index 000000000..2efb33515
--- /dev/null
+++ b/eos/effects/shipprojectilerof1mbc2.py
@@ -0,0 +1,9 @@
+# Used by:
+# Variations of ship: Hurricane (2 of 2)
+# Ship: Claymore
+# Ship: Sleipnir
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Battlecruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
+ "speed", ship.getModifiedItemAttr("shipBonusMBC2") * level)
diff --git a/eos/effects/shipprojectilerofbonusmbc1.py b/eos/effects/shipprojectilerofbonusmbc1.py
new file mode 100755
index 000000000..a559ab481
--- /dev/null
+++ b/eos/effects/shipprojectilerofbonusmbc1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Tornado
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Battlecruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Projectile Turret"),
+ "speed", ship.getModifiedItemAttr("shipBonusMBC1") * level)
diff --git a/eos/effects/shipprojectilerofpiratebattleship.py b/eos/effects/shipprojectilerofpiratebattleship.py
new file mode 100755
index 000000000..35bbe3bbe
--- /dev/null
+++ b/eos/effects/shipprojectilerofpiratebattleship.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Machariel
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Projectile Turret"),
+ "speed", ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shipprojectilerofpiratecruiser.py b/eos/effects/shipprojectilerofpiratecruiser.py
new file mode 100755
index 000000000..ce1f87db6
--- /dev/null
+++ b/eos/effects/shipprojectilerofpiratecruiser.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Cynabal
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
+ "speed", ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shipprojectiletracking1md2.py b/eos/effects/shipprojectiletracking1md2.py
new file mode 100755
index 000000000..3f141435a
--- /dev/null
+++ b/eos/effects/shipprojectiletracking1md2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Thrasher (3 of 3)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Destroyer").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Projectile Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("shipBonusMD2") * level)
diff --git a/eos/effects/shipprojectiletrackinggf.py b/eos/effects/shipprojectiletrackinggf.py
new file mode 100755
index 000000000..eb6183485
--- /dev/null
+++ b/eos/effects/shipprojectiletrackinggf.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Dramiel
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Projectile Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("shipBonusGF") * level)
diff --git a/eos/effects/shipprojectiletrackingmf2.py b/eos/effects/shipprojectiletrackingmf2.py
new file mode 100755
index 000000000..aecedc59a
--- /dev/null
+++ b/eos/effects/shipprojectiletrackingmf2.py
@@ -0,0 +1,10 @@
+# Used by:
+# Variations of ship: Rifter (3 of 3)
+# Ship: Republic Fleet Firetail
+# Ship: Slasher
+# Ship: Stiletto
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Projectile Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("shipBonusMF2") * level)
diff --git a/eos/effects/shipptdmgbonusmb.py b/eos/effects/shipptdmgbonusmb.py
new file mode 100755
index 000000000..09810e80f
--- /dev/null
+++ b/eos/effects/shipptdmgbonusmb.py
@@ -0,0 +1,9 @@
+# Used by:
+# Variations of ship: Tempest (3 of 4)
+# Ship: Machariel
+# Ship: Panther
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Projectile Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusMB") * level)
diff --git a/eos/effects/shipptspeedbonusmb2.py b/eos/effects/shipptspeedbonusmb2.py
new file mode 100755
index 000000000..302d474aa
--- /dev/null
+++ b/eos/effects/shipptspeedbonusmb2.py
@@ -0,0 +1,10 @@
+# Used by:
+# Variations of ship: Tempest (4 of 4)
+# Ship: Maelstrom
+# Ship: Panther
+# Ship: Typhoon Fleet Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Projectile Turret"),
+ "speed", ship.getModifiedItemAttr("shipBonusMB2") * level)
diff --git a/eos/effects/shippturretfalloffbonusgb.py b/eos/effects/shippturretfalloffbonusgb.py
new file mode 100755
index 000000000..832cf1647
--- /dev/null
+++ b/eos/effects/shippturretfalloffbonusgb.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Machariel
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Projectile Turret"),
+ "falloff", ship.getModifiedItemAttr("shipBonusGB") * level)
\ No newline at end of file
diff --git a/eos/effects/shippturretfalloffbonusgc.py b/eos/effects/shippturretfalloffbonusgc.py
new file mode 100755
index 000000000..1f7781df1
--- /dev/null
+++ b/eos/effects/shippturretfalloffbonusgc.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Cynabal
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
+ "falloff", ship.getModifiedItemAttr("shipBonusGC") * level)
diff --git a/eos/effects/shippturretfalloffbonusmc2.py b/eos/effects/shippturretfalloffbonusmc2.py
new file mode 100755
index 000000000..3856a7772
--- /dev/null
+++ b/eos/effects/shippturretfalloffbonusmc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Stabber
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
+ "falloff", ship.getModifiedItemAttr("shipBonusMC2") * level)
diff --git a/eos/effects/shippturretspeedbonusmc.py b/eos/effects/shippturretspeedbonusmc.py
new file mode 100755
index 000000000..54693d592
--- /dev/null
+++ b/eos/effects/shippturretspeedbonusmc.py
@@ -0,0 +1,11 @@
+# Used by:
+# Variations of ship: Rupture (3 of 3)
+# Variations of ship: Stabber (3 of 3)
+# Ship: Huginn
+# Ship: Rapier
+# Ship: Scythe Fleet Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
+ "speed", ship.getModifiedItemAttr("shipBonusMC") * level)
diff --git a/eos/effects/shipremotearmorrange1.py b/eos/effects/shipremotearmorrange1.py
new file mode 100755
index 000000000..3035d9545
--- /dev/null
+++ b/eos/effects/shipremotearmorrange1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Oneiros
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Projector",
+ "maxRange", ship.getModifiedItemAttr("shipBonusGC") * level)
\ No newline at end of file
diff --git a/eos/effects/shipremotearmorrange2.py b/eos/effects/shipremotearmorrange2.py
new file mode 100755
index 000000000..c4506d5f8
--- /dev/null
+++ b/eos/effects/shipremotearmorrange2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Guardian
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Projector",
+ "maxRange", ship.getModifiedItemAttr("shipBonusAC2") * level)
diff --git a/eos/effects/shipremotesensordampenercapneedgf.py b/eos/effects/shipremotesensordampenercapneedgf.py
new file mode 100755
index 000000000..672482767
--- /dev/null
+++ b/eos/effects/shipremotesensordampenercapneedgf.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Maulus (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Sensor Damper",
+ "capacitorNeed", ship.getModifiedItemAttr("shipBonusGF") * level)
diff --git a/eos/effects/shiprocketemandexpandkinandthmdmgaf.py b/eos/effects/shiprocketemandexpandkinandthmdmgaf.py
new file mode 100755
index 000000000..90ca8e554
--- /dev/null
+++ b/eos/effects/shiprocketemandexpandkinandthmdmgaf.py
@@ -0,0 +1,9 @@
+# Used by:
+# Ship: Malediction
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ damageTypes = ("em", "explosive", "kinetic", "thermal")
+ for damageType in damageTypes:
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"),
+ "{0}Damage".format(damageType), ship.getModifiedItemAttr("shipBonusAF") * level)
diff --git a/eos/effects/shiprocketemdmgad1.py b/eos/effects/shiprocketemdmgad1.py
new file mode 100755
index 000000000..fdf357078
--- /dev/null
+++ b/eos/effects/shiprocketemdmgad1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Heretic
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Destroyer").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"),
+ "emDamage", ship.getModifiedItemAttr("shipBonusAD1") * level)
diff --git a/eos/effects/shiprocketemdmgaf.py b/eos/effects/shiprocketemdmgaf.py
new file mode 100755
index 000000000..817369ddd
--- /dev/null
+++ b/eos/effects/shiprocketemdmgaf.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Anathema
+# Ship: Vengeance
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"),
+ "emDamage", ship.getModifiedItemAttr("shipBonusAF") * level)
diff --git a/eos/effects/shiprocketexplosivedmgad1.py b/eos/effects/shiprocketexplosivedmgad1.py
new file mode 100644
index 000000000..51b78edb6
--- /dev/null
+++ b/eos/effects/shiprocketexplosivedmgad1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Heretic
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Destroyer").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"),
+ "explosiveDamage", ship.getModifiedItemAttr("shipBonusAD1") * level)
diff --git a/eos/effects/shiprocketexplosivedmgaf.py b/eos/effects/shiprocketexplosivedmgaf.py
new file mode 100755
index 000000000..8a0cd858b
--- /dev/null
+++ b/eos/effects/shiprocketexplosivedmgaf.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Anathema
+# Ship: Vengeance
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"),
+ "explosiveDamage", ship.getModifiedItemAttr("shipBonusAF") * level)
diff --git a/eos/effects/shiprocketexplosivedmgmd1.py b/eos/effects/shiprocketexplosivedmgmd1.py
new file mode 100755
index 000000000..0454989fa
--- /dev/null
+++ b/eos/effects/shiprocketexplosivedmgmd1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Talwar
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Destroyer").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"),
+ "explosiveDamage", ship.getModifiedItemAttr("shipBonusMD1") * level)
diff --git a/eos/effects/shiprocketkineticdmgad1.py b/eos/effects/shiprocketkineticdmgad1.py
new file mode 100644
index 000000000..c02e6dae2
--- /dev/null
+++ b/eos/effects/shiprocketkineticdmgad1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Heretic
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Destroyer").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"),
+ "kineticDamage", ship.getModifiedItemAttr("shipBonusAD1") * level)
diff --git a/eos/effects/shiprocketkineticdmgaf.py b/eos/effects/shiprocketkineticdmgaf.py
new file mode 100755
index 000000000..c2504dc99
--- /dev/null
+++ b/eos/effects/shiprocketkineticdmgaf.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Anathema
+# Ship: Vengeance
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"),
+ "kineticDamage", ship.getModifiedItemAttr("shipBonusAF") * level)
diff --git a/eos/effects/shiprocketkineticdmgcd1.py b/eos/effects/shiprocketkineticdmgcd1.py
new file mode 100755
index 000000000..3fc2e99a7
--- /dev/null
+++ b/eos/effects/shiprocketkineticdmgcd1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Corax
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Destroyer").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"),
+ "kineticDamage", ship.getModifiedItemAttr("shipBonusCD1") * level)
diff --git a/eos/effects/shiprocketmaxvelocitybonusrookie.py b/eos/effects/shiprocketmaxvelocitybonusrookie.py
new file mode 100755
index 000000000..95db1ca17
--- /dev/null
+++ b/eos/effects/shiprocketmaxvelocitybonusrookie.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Taipan
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"),
+ "maxVelocity", ship.getModifiedItemAttr("rookieRocketVelocity"))
diff --git a/eos/effects/shiprocketthermaldmgad1.py b/eos/effects/shiprocketthermaldmgad1.py
new file mode 100755
index 000000000..f7964959b
--- /dev/null
+++ b/eos/effects/shiprocketthermaldmgad1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Heretic
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Destroyer").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"),
+ "thermalDamage", ship.getModifiedItemAttr("shipBonusAD1") * level)
diff --git a/eos/effects/shiprocketthermaldmgaf.py b/eos/effects/shiprocketthermaldmgaf.py
new file mode 100755
index 000000000..2035218b1
--- /dev/null
+++ b/eos/effects/shiprocketthermaldmgaf.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Anathema
+# Ship: Vengeance
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"),
+ "thermalDamage", ship.getModifiedItemAttr("shipBonusAF") * level)
diff --git a/eos/effects/shipscanprobestrengthbonuspiratecruiser.py b/eos/effects/shipscanprobestrengthbonuspiratecruiser.py
new file mode 100755
index 000000000..33f7f377c
--- /dev/null
+++ b/eos/effects/shipscanprobestrengthbonuspiratecruiser.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Gnosis
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Astrometrics"),
+ "baseSensorStrength", container.getModifiedItemAttr("shipBonusPirateFaction2"))
diff --git a/eos/effects/shipscanresolutionbonusonline.py b/eos/effects/shipscanresolutionbonusonline.py
new file mode 100755
index 000000000..2b402ae63
--- /dev/null
+++ b/eos/effects/shipscanresolutionbonusonline.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules from group: Signal Amplifier (11 of 11)
+# Module: QA Damage Module
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.boostItemAttr("scanResolution", module.getModifiedItemAttr("scanResolutionBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/shipsetdmgbonus2af.py b/eos/effects/shipsetdmgbonus2af.py
new file mode 100755
index 000000000..200931ff9
--- /dev/null
+++ b/eos/effects/shipsetdmgbonus2af.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Punisher
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonus2AF") * level)
diff --git a/eos/effects/shipsetdmgbonusaf.py b/eos/effects/shipsetdmgbonusaf.py
new file mode 100755
index 000000000..d1fb5392d
--- /dev/null
+++ b/eos/effects/shipsetdmgbonusaf.py
@@ -0,0 +1,10 @@
+# Used by:
+# Ship: Executioner
+# Ship: Gold Magnate
+# Ship: Silver Magnate
+# Ship: Tormentor
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusAF") * level)
diff --git a/eos/effects/shipsetdmgbonusrookie.py b/eos/effects/shipsetdmgbonusrookie.py
new file mode 100755
index 000000000..a48fb7e6a
--- /dev/null
+++ b/eos/effects/shipsetdmgbonusrookie.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Hematos
+# Ship: Immolator
+# Ship: Impairor
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("rookieSETDamageBonus"))
diff --git a/eos/effects/shipsetoptimalbonusrookie.py b/eos/effects/shipsetoptimalbonusrookie.py
new file mode 100755
index 000000000..5c1b593d7
--- /dev/null
+++ b/eos/effects/shipsetoptimalbonusrookie.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Immolator
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"),
+ "maxRange", ship.getModifiedItemAttr("rookieSETOptimal"))
diff --git a/eos/effects/shipsettrackingbonusaf.py b/eos/effects/shipsettrackingbonusaf.py
new file mode 100755
index 000000000..f1a705df2
--- /dev/null
+++ b/eos/effects/shipsettrackingbonusaf.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Retribution
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("shipBonusAF") * level)
diff --git a/eos/effects/shipsettrackingbonusrookie.py b/eos/effects/shipsettrackingbonusrookie.py
new file mode 100755
index 000000000..83b24b13c
--- /dev/null
+++ b/eos/effects/shipsettrackingbonusrookie.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Immolator
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("rookieSETTracking"))
diff --git a/eos/effects/shipshieldboost1mbc1.py b/eos/effects/shipshieldboost1mbc1.py
new file mode 100755
index 000000000..b49f3efe8
--- /dev/null
+++ b/eos/effects/shipshieldboost1mbc1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Cyclone (3 of 3)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Battlecruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Operation"),
+ "shieldBonus", ship.getModifiedItemAttr("shipBonusMBC1") * level)
diff --git a/eos/effects/shipshieldboostmf.py b/eos/effects/shipshieldboostmf.py
new file mode 100755
index 000000000..84e32dd4c
--- /dev/null
+++ b/eos/effects/shipshieldboostmf.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Breacher
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Operation"),
+ "shieldBonus", ship.getModifiedItemAttr("shipBonusMF") * level)
diff --git a/eos/effects/shipshieldboostrookie.py b/eos/effects/shipshieldboostrookie.py
new file mode 100755
index 000000000..9b223b7e2
--- /dev/null
+++ b/eos/effects/shipshieldboostrookie.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Immolator
+# Ship: Reaper
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Operation"),
+ "shieldBonus", ship.getModifiedItemAttr("rookieShieldBoostBonus"))
diff --git a/eos/effects/shipshieldemresistance1cbc2.py b/eos/effects/shipshieldemresistance1cbc2.py
new file mode 100644
index 000000000..2d234c442
--- /dev/null
+++ b/eos/effects/shipshieldemresistance1cbc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Ferox (3 of 3)
+# Ship: Drake
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battlecruiser").level
+ fit.ship.boostItemAttr("shieldEmDamageResonance", ship.getModifiedItemAttr("shipBonusCBC2") * level)
diff --git a/eos/effects/shipshieldemresistancecc2.py b/eos/effects/shipshieldemresistancecc2.py
new file mode 100755
index 000000000..47f8e67ab
--- /dev/null
+++ b/eos/effects/shipshieldemresistancecc2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Variations of ship: Moa (4 of 4)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ fit.ship.boostItemAttr("shieldEmDamageResonance", ship.getModifiedItemAttr("shipBonusCC2") * level)
diff --git a/eos/effects/shipshieldemresistancecf2.py b/eos/effects/shipshieldemresistancecf2.py
new file mode 100755
index 000000000..713aedb33
--- /dev/null
+++ b/eos/effects/shipshieldemresistancecf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Merlin (3 of 4)
+# Ship: Cambion
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Frigate").level
+ fit.ship.boostItemAttr("shieldEmDamageResonance", ship.getModifiedItemAttr("shipBonusCF") * level)
diff --git a/eos/effects/shipshieldemresistancemc2.py b/eos/effects/shipshieldemresistancemc2.py
new file mode 100755
index 000000000..1c9b8dba4
--- /dev/null
+++ b/eos/effects/shipshieldemresistancemc2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Broadsword
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Cruiser").level
+ fit.ship.boostItemAttr("shieldEmDamageResonance", ship.getModifiedItemAttr("shipBonusMC2") * level)
diff --git a/eos/effects/shipshieldemresistancerookie.py b/eos/effects/shipshieldemresistancerookie.py
new file mode 100755
index 000000000..cfa8e4de7
--- /dev/null
+++ b/eos/effects/shipshieldemresistancerookie.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Ibis
+# Ship: Taipan
+type = "passive"
+def handler(fit, ship, context):
+ fit.ship.boostItemAttr("shieldEmDamageResonance", ship.getModifiedItemAttr("rookieShieldResistBonus"))
diff --git a/eos/effects/shipshieldexplosiveresistance1cbc2.py b/eos/effects/shipshieldexplosiveresistance1cbc2.py
new file mode 100644
index 000000000..fd34cefb2
--- /dev/null
+++ b/eos/effects/shipshieldexplosiveresistance1cbc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Ferox (3 of 3)
+# Ship: Drake
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battlecruiser").level
+ fit.ship.boostItemAttr("shieldExplosiveDamageResonance", ship.getModifiedItemAttr("shipBonusCBC2") * level)
diff --git a/eos/effects/shipshieldexplosiveresistancecc2.py b/eos/effects/shipshieldexplosiveresistancecc2.py
new file mode 100755
index 000000000..9d467942b
--- /dev/null
+++ b/eos/effects/shipshieldexplosiveresistancecc2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Variations of ship: Moa (4 of 4)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ fit.ship.boostItemAttr("shieldExplosiveDamageResonance", ship.getModifiedItemAttr("shipBonusCC2") * level)
diff --git a/eos/effects/shipshieldexplosiveresistancecf2.py b/eos/effects/shipshieldexplosiveresistancecf2.py
new file mode 100755
index 000000000..9ce6b555a
--- /dev/null
+++ b/eos/effects/shipshieldexplosiveresistancecf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Merlin (3 of 4)
+# Ship: Cambion
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Frigate").level
+ fit.ship.boostItemAttr("shieldExplosiveDamageResonance", ship.getModifiedItemAttr("shipBonusCF") * level)
diff --git a/eos/effects/shipshieldexplosiveresistancemc2.py b/eos/effects/shipshieldexplosiveresistancemc2.py
new file mode 100755
index 000000000..308959156
--- /dev/null
+++ b/eos/effects/shipshieldexplosiveresistancemc2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Broadsword
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Cruiser").level
+ fit.ship.boostItemAttr("shieldExplosiveDamageResonance", ship.getModifiedItemAttr("shipBonusMC2") * level)
diff --git a/eos/effects/shipshieldexplosiveresistancerookie.py b/eos/effects/shipshieldexplosiveresistancerookie.py
new file mode 100755
index 000000000..050cc1855
--- /dev/null
+++ b/eos/effects/shipshieldexplosiveresistancerookie.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Ibis
+# Ship: Taipan
+type = "passive"
+def handler(fit, ship, context):
+ fit.ship.boostItemAttr("shieldExplosiveDamageResonance", ship.getModifiedItemAttr("rookieShieldResistBonus"))
diff --git a/eos/effects/shipshieldkineticresistance1cbc2.py b/eos/effects/shipshieldkineticresistance1cbc2.py
new file mode 100644
index 000000000..d8a690580
--- /dev/null
+++ b/eos/effects/shipshieldkineticresistance1cbc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Ferox (3 of 3)
+# Ship: Drake
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battlecruiser").level
+ fit.ship.boostItemAttr("shieldKineticDamageResonance", ship.getModifiedItemAttr("shipBonusCBC2") * level)
diff --git a/eos/effects/shipshieldkineticresistancecc2.py b/eos/effects/shipshieldkineticresistancecc2.py
new file mode 100755
index 000000000..b27ef4c2d
--- /dev/null
+++ b/eos/effects/shipshieldkineticresistancecc2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Variations of ship: Moa (4 of 4)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ fit.ship.boostItemAttr("shieldKineticDamageResonance", ship.getModifiedItemAttr("shipBonusCC2") * level)
diff --git a/eos/effects/shipshieldkineticresistancecf2.py b/eos/effects/shipshieldkineticresistancecf2.py
new file mode 100755
index 000000000..fbd281958
--- /dev/null
+++ b/eos/effects/shipshieldkineticresistancecf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Merlin (3 of 4)
+# Ship: Cambion
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Frigate").level
+ fit.ship.boostItemAttr("shieldKineticDamageResonance", ship.getModifiedItemAttr("shipBonusCF") * level)
diff --git a/eos/effects/shipshieldkineticresistancemc2.py b/eos/effects/shipshieldkineticresistancemc2.py
new file mode 100755
index 000000000..15d06e4f3
--- /dev/null
+++ b/eos/effects/shipshieldkineticresistancemc2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Broadsword
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Cruiser").level
+ fit.ship.boostItemAttr("shieldKineticDamageResonance", ship.getModifiedItemAttr("shipBonusMC2") * level)
diff --git a/eos/effects/shipshieldkineticresistancerookie.py b/eos/effects/shipshieldkineticresistancerookie.py
new file mode 100755
index 000000000..03ad54e6e
--- /dev/null
+++ b/eos/effects/shipshieldkineticresistancerookie.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Ibis
+# Ship: Taipan
+type = "passive"
+def handler(fit, ship, context):
+ fit.ship.boostItemAttr("shieldKineticDamageResonance", ship.getModifiedItemAttr("rookieShieldResistBonus"))
diff --git a/eos/effects/shipshieldthermalresistance1cbc2.py b/eos/effects/shipshieldthermalresistance1cbc2.py
new file mode 100644
index 000000000..6c93db49a
--- /dev/null
+++ b/eos/effects/shipshieldthermalresistance1cbc2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Ferox (3 of 3)
+# Ship: Drake
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battlecruiser").level
+ fit.ship.boostItemAttr("shieldThermalDamageResonance", ship.getModifiedItemAttr("shipBonusCBC2") * level)
diff --git a/eos/effects/shipshieldthermalresistancecc2.py b/eos/effects/shipshieldthermalresistancecc2.py
new file mode 100755
index 000000000..565ca1670
--- /dev/null
+++ b/eos/effects/shipshieldthermalresistancecc2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Variations of ship: Moa (4 of 4)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ fit.ship.boostItemAttr("shieldThermalDamageResonance", ship.getModifiedItemAttr("shipBonusCC2") * level)
diff --git a/eos/effects/shipshieldthermalresistancecf2.py b/eos/effects/shipshieldthermalresistancecf2.py
new file mode 100755
index 000000000..5734f5c3a
--- /dev/null
+++ b/eos/effects/shipshieldthermalresistancecf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Merlin (3 of 4)
+# Ship: Cambion
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Frigate").level
+ fit.ship.boostItemAttr("shieldThermalDamageResonance", ship.getModifiedItemAttr("shipBonusCF") * level)
diff --git a/eos/effects/shipshieldthermalresistancemc2.py b/eos/effects/shipshieldthermalresistancemc2.py
new file mode 100755
index 000000000..f4bda11db
--- /dev/null
+++ b/eos/effects/shipshieldthermalresistancemc2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Broadsword
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Cruiser").level
+ fit.ship.boostItemAttr("shieldThermalDamageResonance", ship.getModifiedItemAttr("shipBonusMC2") * level)
diff --git a/eos/effects/shipshieldthermalresistancerookie.py b/eos/effects/shipshieldthermalresistancerookie.py
new file mode 100755
index 000000000..b0471843c
--- /dev/null
+++ b/eos/effects/shipshieldthermalresistancerookie.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Ibis
+# Ship: Taipan
+type = "passive"
+def handler(fit, ship, context):
+ fit.ship.boostItemAttr("shieldThermalDamageResonance", ship.getModifiedItemAttr("rookieShieldResistBonus"))
diff --git a/eos/effects/shipshieldtransferrange1.py b/eos/effects/shipshieldtransferrange1.py
new file mode 100755
index 000000000..5c9090bc2
--- /dev/null
+++ b/eos/effects/shipshieldtransferrange1.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Basilisk
+# Ship: Etana
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Shield Transporter",
+ "shieldTransferRange", ship.getModifiedItemAttr("shipBonusCC") * level)
diff --git a/eos/effects/shipshieldtransferrange2.py b/eos/effects/shipshieldtransferrange2.py
new file mode 100755
index 000000000..8a41c5ed5
--- /dev/null
+++ b/eos/effects/shipshieldtransferrange2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Scimitar
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Shield Transporter",
+ "shieldTransferRange", ship.getModifiedItemAttr("shipBonusMC2") * level)
diff --git a/eos/effects/shipshtdmgbonusgf.py b/eos/effects/shipshtdmgbonusgf.py
new file mode 100755
index 000000000..4a0cc72cb
--- /dev/null
+++ b/eos/effects/shipshtdmgbonusgf.py
@@ -0,0 +1,10 @@
+# Used by:
+# Variations of ship: Atron (3 of 3)
+# Variations of ship: Incursus (3 of 3)
+# Ship: Federation Navy Comet
+# Ship: Helios
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Hybrid Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusGF") * level)
diff --git a/eos/effects/shipshtdmgbonusrookie.py b/eos/effects/shipshtdmgbonusrookie.py
new file mode 100755
index 000000000..30edb4ed6
--- /dev/null
+++ b/eos/effects/shipshtdmgbonusrookie.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Velator
+# Ship: Violator
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Hybrid Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("rookieSHTDamageBonus"))
diff --git a/eos/effects/shipshtfalloffbonusrookie.py b/eos/effects/shipshtfalloffbonusrookie.py
new file mode 100755
index 000000000..bc581163e
--- /dev/null
+++ b/eos/effects/shipshtfalloffbonusrookie.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Violator
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Hybrid Turret"),
+ "falloff", ship.getModifiedItemAttr("rookieSHTFalloff"))
diff --git a/eos/effects/shipshttrackingspeedbonusrookie.py b/eos/effects/shipshttrackingspeedbonusrookie.py
new file mode 100755
index 000000000..4bb276853
--- /dev/null
+++ b/eos/effects/shipshttrackingspeedbonusrookie.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Violator
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Hybrid Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("rookieSHTTracking"))
diff --git a/eos/effects/shipsiegelauncherrofbonus2cb.py b/eos/effects/shipsiegelauncherrofbonus2cb.py
new file mode 100755
index 000000000..aec0ffa79
--- /dev/null
+++ b/eos/effects/shipsiegelauncherrofbonus2cb.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Raven
+# Ship: Raven State Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Torpedo",
+ "speed", ship.getModifiedItemAttr("shipBonus2CB") * level)
diff --git a/eos/effects/shipsmallmissileemdmgcf2.py b/eos/effects/shipsmallmissileemdmgcf2.py
new file mode 100755
index 000000000..770078461
--- /dev/null
+++ b/eos/effects/shipsmallmissileemdmgcf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Kestrel
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets") or mod.charge.requiresSkill("Light Missiles"),
+ "emDamage", ship.getModifiedItemAttr("shipBonusCF2") * level)
diff --git a/eos/effects/shipsmallmissileemdmgmf2.py b/eos/effects/shipsmallmissileemdmgmf2.py
new file mode 100755
index 000000000..69f6b5320
--- /dev/null
+++ b/eos/effects/shipsmallmissileemdmgmf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Breacher
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets") or mod.charge.requiresSkill("Light Missiles"),
+ "emDamage", ship.getModifiedItemAttr("shipBonusMF2") * level)
diff --git a/eos/effects/shipsmallmissileexpdmgcf2.py b/eos/effects/shipsmallmissileexpdmgcf2.py
new file mode 100755
index 000000000..397260282
--- /dev/null
+++ b/eos/effects/shipsmallmissileexpdmgcf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Kestrel
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets") or mod.charge.requiresSkill("Light Missiles"),
+ "explosiveDamage", ship.getModifiedItemAttr("shipBonusCF2") * level)
diff --git a/eos/effects/shipsmallmissileexpdmgmf2.py b/eos/effects/shipsmallmissileexpdmgmf2.py
new file mode 100755
index 000000000..8e2eed170
--- /dev/null
+++ b/eos/effects/shipsmallmissileexpdmgmf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Breacher
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets") or mod.charge.requiresSkill("Light Missiles"),
+ "explosiveDamage", ship.getModifiedItemAttr("shipBonusMF2") * level)
diff --git a/eos/effects/shipsmallmissilekindmgcf2.py b/eos/effects/shipsmallmissilekindmgcf2.py
new file mode 100755
index 000000000..e09a5bec3
--- /dev/null
+++ b/eos/effects/shipsmallmissilekindmgcf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Kestrel
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets") or mod.charge.requiresSkill("Light Missiles"),
+ "kineticDamage", ship.getModifiedItemAttr("shipBonusCF2") * level)
diff --git a/eos/effects/shipsmallmissilekindmgmf2.py b/eos/effects/shipsmallmissilekindmgmf2.py
new file mode 100755
index 000000000..d5e72054f
--- /dev/null
+++ b/eos/effects/shipsmallmissilekindmgmf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Breacher
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets") or mod.charge.requiresSkill("Light Missiles"),
+ "kineticDamage", ship.getModifiedItemAttr("shipBonusMF2") * level)
diff --git a/eos/effects/shipsmallmissilethermdmgcf2.py b/eos/effects/shipsmallmissilethermdmgcf2.py
new file mode 100755
index 000000000..58ad5823b
--- /dev/null
+++ b/eos/effects/shipsmallmissilethermdmgcf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Kestrel
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets") or mod.charge.requiresSkill("Light Missiles"),
+ "thermalDamage", ship.getModifiedItemAttr("shipBonusCF2") * level)
diff --git a/eos/effects/shipsmallmissilethermdmgmf2.py b/eos/effects/shipsmallmissilethermdmgmf2.py
new file mode 100755
index 000000000..3e823feed
--- /dev/null
+++ b/eos/effects/shipsmallmissilethermdmgmf2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Breacher
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Frigate").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets") or mod.charge.requiresSkill("Light Missiles"),
+ "thermalDamage", ship.getModifiedItemAttr("shipBonusMF2") * level)
diff --git a/eos/effects/shipsptdmgbonusrookie.py b/eos/effects/shipsptdmgbonusrookie.py
new file mode 100755
index 000000000..135cf28de
--- /dev/null
+++ b/eos/effects/shipsptdmgbonusrookie.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Echo
+# Ship: Reaper
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Projectile Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("rookieSPTDamageBonus"))
diff --git a/eos/effects/shipsptfalloffbonusrookie.py b/eos/effects/shipsptfalloffbonusrookie.py
new file mode 100755
index 000000000..84a58e887
--- /dev/null
+++ b/eos/effects/shipsptfalloffbonusrookie.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Echo
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Projectile Turret"),
+ "falloff", ship.getModifiedItemAttr("rookieSPTFalloff"))
diff --git a/eos/effects/shipsptoptimalrangebonusrookie.py b/eos/effects/shipsptoptimalrangebonusrookie.py
new file mode 100755
index 000000000..b50b8f921
--- /dev/null
+++ b/eos/effects/shipsptoptimalrangebonusrookie.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Echo
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Projectile Turret"),
+ "maxRange", ship.getModifiedItemAttr("rookieSPTOptimal"))
diff --git a/eos/effects/shipspttrackingspeedbonusrookie.py b/eos/effects/shipspttrackingspeedbonusrookie.py
new file mode 100755
index 000000000..b43c42fa8
--- /dev/null
+++ b/eos/effects/shipspttrackingspeedbonusrookie.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Echo
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Projectile Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("rookieSPTTracking"))
diff --git a/eos/effects/shipstasiswebrangebonusmb.py b/eos/effects/shipstasiswebrangebonusmb.py
new file mode 100755
index 000000000..a8ee4774c
--- /dev/null
+++ b/eos/effects/shipstasiswebrangebonusmb.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Bhaalgorn
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Stasis Web",
+ "maxRange", ship.getModifiedItemAttr("shipBonusMB") * level)
diff --git a/eos/effects/shipstasiswebstrengthbonusmc2.py b/eos/effects/shipstasiswebstrengthbonusmc2.py
new file mode 100755
index 000000000..9c15a0284
--- /dev/null
+++ b/eos/effects/shipstasiswebstrengthbonusmc2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Ashimmu
+# Ship: Vigilant
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Stasis Web",
+ "speedFactor", ship.getModifiedItemAttr("shipBonusMC2") * level)
diff --git a/eos/effects/shipstasiswebstrengthbonusmf2.py b/eos/effects/shipstasiswebstrengthbonusmf2.py
new file mode 100755
index 000000000..926c3d109
--- /dev/null
+++ b/eos/effects/shipstasiswebstrengthbonusmf2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Cruor
+# Ship: Daredevil
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Frigate").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Stasis Web",
+ "speedFactor", ship.getModifiedItemAttr("shipBonusMF2") * level)
diff --git a/eos/effects/shiptcapneedbonusac.py b/eos/effects/shiptcapneedbonusac.py
new file mode 100755
index 000000000..fa12cefa2
--- /dev/null
+++ b/eos/effects/shiptcapneedbonusac.py
@@ -0,0 +1,9 @@
+# Used by:
+# Ship: Devoter
+# Ship: Omen
+# Ship: Zealot
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Energy Turret"),
+ "capacitorNeed", ship.getModifiedItemAttr("shipBonusAC") * level)
diff --git a/eos/effects/shiptorpedoaoecloudsize1cb.py b/eos/effects/shiptorpedoaoecloudsize1cb.py
new file mode 100644
index 000000000..490d8a09e
--- /dev/null
+++ b/eos/effects/shiptorpedoaoecloudsize1cb.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Raven Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battleship").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Torpedoes"),
+ "aoeCloudSize", ship.getModifiedItemAttr("shipBonusCB") * level)
diff --git a/eos/effects/shiptorpedorofcb.py b/eos/effects/shiptorpedorofcb.py
new file mode 100644
index 000000000..7da329077
--- /dev/null
+++ b/eos/effects/shiptorpedorofcb.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Scorpion Navy Issue
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Torpedo",
+ "speed", ship.getModifiedItemAttr("shipBonusCB") * level)
diff --git a/eos/effects/shiptorpedosvelocitybonuscb3.py b/eos/effects/shiptorpedosvelocitybonuscb3.py
new file mode 100755
index 000000000..8a940dbf1
--- /dev/null
+++ b/eos/effects/shiptorpedosvelocitybonuscb3.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Raven (3 of 4)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Battleship").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Torpedoes"),
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusCB3") * level)
diff --git a/eos/effects/shiptrackingbonusab.py b/eos/effects/shiptrackingbonusab.py
new file mode 100755
index 000000000..64447effe
--- /dev/null
+++ b/eos/effects/shiptrackingbonusab.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Nightmare
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Battleship").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Energy Turret"),
+ "trackingSpeed", ship.getModifiedItemAttr("shipBonusAB2") * level)
diff --git a/eos/effects/shiptrackinglinkrange1fixed.py b/eos/effects/shiptrackinglinkrange1fixed.py
new file mode 100755
index 000000000..286c6b463
--- /dev/null
+++ b/eos/effects/shiptrackinglinkrange1fixed.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Scimitar
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Link",
+ "maxRange", ship.getModifiedItemAttr("shipBonusMC") * level)
diff --git a/eos/effects/shiptrackinglinkrange2group.py b/eos/effects/shiptrackinglinkrange2group.py
new file mode 100755
index 000000000..766277ea1
--- /dev/null
+++ b/eos/effects/shiptrackinglinkrange2group.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Oneiros
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Cruiser").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Link",
+ "maxRange", ship.getModifiedItemAttr("shipBonusGC2") * level)
diff --git a/eos/effects/shipvelocitybonusai.py b/eos/effects/shipvelocitybonusai.py
new file mode 100755
index 000000000..c8577f4f5
--- /dev/null
+++ b/eos/effects/shipvelocitybonusai.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Bestower (2 of 2)
+# Variations of ship: Sigil (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Industrial").level
+ fit.ship.boostItemAttr("maxVelocity", ship.getModifiedItemAttr("shipBonusAI") * level)
diff --git a/eos/effects/shipvelocitybonusatc1.py b/eos/effects/shipvelocitybonusatc1.py
new file mode 100755
index 000000000..ae56a46f9
--- /dev/null
+++ b/eos/effects/shipvelocitybonusatc1.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Adrestia
+# Ship: Mimir
+type = "passive"
+def handler(fit, ship, context):
+ fit.ship.boostItemAttr("maxVelocity", ship.getModifiedItemAttr("shipBonusATC1"))
diff --git a/eos/effects/shipvelocitybonusmi.py b/eos/effects/shipvelocitybonusmi.py
new file mode 100755
index 000000000..7f18a0b63
--- /dev/null
+++ b/eos/effects/shipvelocitybonusmi.py
@@ -0,0 +1,8 @@
+# Used by:
+# Variations of ship: Mammoth (2 of 2)
+# Variations of ship: Wreathe (2 of 2)
+# Ship: Hoarder
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Industrial").level
+ fit.ship.boostItemAttr("maxVelocity", ship.getModifiedItemAttr("shipBonusMI") * level)
diff --git a/eos/effects/shipvelocitybonusrookie.py b/eos/effects/shipvelocitybonusrookie.py
new file mode 100755
index 000000000..1063f6624
--- /dev/null
+++ b/eos/effects/shipvelocitybonusrookie.py
@@ -0,0 +1,5 @@
+# Used by:
+# Ship: Reaper
+type = "passive"
+def handler(fit, ship, context):
+ fit.ship.boostItemAttr("maxVelocity", ship.getModifiedItemAttr("rookieShipVelocityBonus"))
diff --git a/eos/effects/shipwebvelocitybonusrookie.py b/eos/effects/shipwebvelocitybonusrookie.py
new file mode 100755
index 000000000..5f31fa5fd
--- /dev/null
+++ b/eos/effects/shipwebvelocitybonusrookie.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Hematos
+# Ship: Violator
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Stasis Web",
+ "speedFactor", ship.getModifiedItemAttr("rookieWebAmount"))
diff --git a/eos/effects/shipxlprojectiledamagerole.py b/eos/effects/shipxlprojectiledamagerole.py
new file mode 100644
index 000000000..d522cf7ff
--- /dev/null
+++ b/eos/effects/shipxlprojectiledamagerole.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Naglfar
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Projectile Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusPirateFaction"))
diff --git a/eos/effects/shirmishwarfaremindlink.py b/eos/effects/shirmishwarfaremindlink.py
new file mode 100755
index 000000000..87fedb77b
--- /dev/null
+++ b/eos/effects/shirmishwarfaremindlink.py
@@ -0,0 +1,7 @@
+# Used by:
+# Implant: Skirmish Warfare Mindlink
+type = "passive"
+def handler(fit, implant, context):
+ fit.character.getSkill("Skirmish Warfare Specialist").suppress()
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Warfare Specialist"),
+ "commandBonus", implant.getModifiedItemAttr("mindlinkBonus"))
diff --git a/eos/effects/siegemodeeffect6.py b/eos/effects/siegemodeeffect6.py
new file mode 100755
index 000000000..b2cf08c06
--- /dev/null
+++ b/eos/effects/siegemodeeffect6.py
@@ -0,0 +1,53 @@
+# Used by:
+# Variations of module: Siege Module I (2 of 2)
+type = "active"
+runTime = "early"
+def handler(fit, module, context):
+ #Turrets
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Energy Turret") or \
+ mod.item.requiresSkill("Capital Hybrid Turret") or \
+ mod.item.requiresSkill("Capital Projectile Turret"),
+ "damageMultiplier", module.getModifiedItemAttr("damageMultiplierBonus"))
+
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Energy Turret") or \
+ mod.item.requiresSkill("Capital Hybrid Turret") or \
+ mod.item.requiresSkill("Capital Projectile Turret"),
+ "trackingSpeed", module.getModifiedItemAttr("trackingSpeedBonus"))
+
+ #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"),
+ "%sDamage" % type, module.getModifiedItemAttr("damageMultiplierBonus"))
+
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Torpedoes") or \
+ mod.charge.requiresSkill("Citadel Cruise Missiles"),
+ "aoeVelocity", module.getModifiedItemAttr("aoeVelocityBonus"))
+
+ #Shield Boosters
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Operation"),
+ "duration", module.getModifiedItemAttr("shieldBonusDurationBonus"))
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Operation"),
+ "shieldBonus", module.getModifiedItemAttr("shieldBoostMultiplier"))
+
+ #Armor Reppers
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Unit",
+ "armorDamageAmount", module.getModifiedItemAttr("armorDamageAmountBonus"))
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Unit",
+ "duration", module.getModifiedItemAttr("armorDamageDurationBonus"))
+
+ #Speed penalty
+ fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("speedFactor"))
+
+ #Mass
+ fit.ship.multiplyItemAttr("mass", module.getModifiedItemAttr("massMultiplier"))
+
+ #Scan resolution
+ fit.ship.multiplyItemAttr("scanResolution", module.getModifiedItemAttr("scanResolutionMultiplier"))
+
+ #Max locked targets
+ fit.ship.forceItemAttr("maxLockedTargets", module.getModifiedItemAttr("maxLockedTargets"))
+
+ #Block Hostile EWAR and friendly effects
+ fit.ship.forceItemAttr("disallowOffensiveModifiers", module.getModifiedItemAttr("disallowOffensiveModifiers"))
+ fit.ship.forceItemAttr("disallowAssistance", module.getModifiedItemAttr("disallowAssistance"))
diff --git a/eos/effects/siegewarfaremindlink.py b/eos/effects/siegewarfaremindlink.py
new file mode 100755
index 000000000..90edae621
--- /dev/null
+++ b/eos/effects/siegewarfaremindlink.py
@@ -0,0 +1,7 @@
+# Used by:
+# Implant: Siege Warfare Mindlink
+type = "passive"
+def handler(fit, implant, context):
+ fit.character.getSkill("Siege Warfare Specialist").suppress()
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Siege Warfare Specialist"),
+ "commandBonus", implant.getModifiedItemAttr("mindlinkBonus"))
diff --git a/eos/effects/signatureanalysisscanresolutionbonuspostpercentscanresolutionship.py b/eos/effects/signatureanalysisscanresolutionbonuspostpercentscanresolutionship.py
new file mode 100755
index 000000000..192b3f06a
--- /dev/null
+++ b/eos/effects/signatureanalysisscanresolutionbonuspostpercentscanresolutionship.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implants named like: Zainou 'Gypsy' Signature Analysis SA (6 of 6)
+# Modules named like: Targeting System Subcontroller (8 of 8)
+# Implant: Quafe Zero
+# Skill: Signature Analysis
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.ship.boostItemAttr("scanResolution", container.getModifiedItemAttr("scanResolutionBonus") * level)
diff --git a/eos/effects/signatureradiuspreassignment.py b/eos/effects/signatureradiuspreassignment.py
new file mode 100755
index 000000000..00d1cf509
--- /dev/null
+++ b/eos/effects/signatureradiuspreassignment.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystems from group: Defensive Systems (16 of 16)
+type = "passive"
+runTime = "early"
+def handler(fit, module, context):
+ fit.ship.preAssignItemAttr("signatureRadius", module.getModifiedItemAttr("signatureRadius"))
diff --git a/eos/effects/skilladvancedweaponupgradespowerneedbonus.py b/eos/effects/skilladvancedweaponupgradespowerneedbonus.py
new file mode 100755
index 000000000..38238e07c
--- /dev/null
+++ b/eos/effects/skilladvancedweaponupgradespowerneedbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Advanced Weapon Upgrades
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery") or mod.item.requiresSkill("Missile Launcher Operation"),
+ "power", skill.getModifiedItemAttr("powerNeedBonus") * skill.level)
diff --git a/eos/effects/skilladvancedweaponupgradespowerneedbonusbomblaunchers.py b/eos/effects/skilladvancedweaponupgradespowerneedbonusbomblaunchers.py
new file mode 100755
index 000000000..59ee3638c
--- /dev/null
+++ b/eos/effects/skilladvancedweaponupgradespowerneedbonusbomblaunchers.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Advanced Weapon Upgrades
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Bomb Deployment"),
+ "power", skill.getModifiedItemAttr("powerNeedBonus") * skill.level)
diff --git a/eos/effects/skillbombdeploymentmodulereactivationdelaybonus.py b/eos/effects/skillbombdeploymentmodulereactivationdelaybonus.py
new file mode 100755
index 000000000..c35cbe8cf
--- /dev/null
+++ b/eos/effects/skillbombdeploymentmodulereactivationdelaybonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Bomb Deployment
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Bomb",
+ "moduleReactivationDelay", skill.getModifiedItemAttr("rofBonus") * skill.level)
diff --git a/eos/effects/skillcapitalremotehullrepairsystemscapneedbonus.py b/eos/effects/skillcapitalremotehullrepairsystemscapneedbonus.py
new file mode 100755
index 000000000..8c1695c64
--- /dev/null
+++ b/eos/effects/skillcapitalremotehullrepairsystemscapneedbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Capital Remote Hull Repair Systems
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Hull Repair Systems"),
+ "capacitorNeed", skill.getModifiedItemAttr("capNeedBonus") * skill.level)
diff --git a/eos/effects/skillcapitalshipsadvancedagility.py b/eos/effects/skillcapitalshipsadvancedagility.py
new file mode 100755
index 000000000..5d5674da2
--- /dev/null
+++ b/eos/effects/skillcapitalshipsadvancedagility.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Capital Ships
+type = "passive"
+def handler(fit, skill, context):
+ if fit.ship.item.requiresSkill("Capital Ships"):
+ fit.ship.boostItemAttr("agility", skill.getModifiedItemAttr("agilityBonus") * skill.level)
diff --git a/eos/effects/skillfighterbombersdmgbonus.py b/eos/effects/skillfighterbombersdmgbonus.py
new file mode 100755
index 000000000..f118d28c5
--- /dev/null
+++ b/eos/effects/skillfighterbombersdmgbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Fighter Bombers
+type = "passive"
+def handler(fit, skill, context):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Fighter Bombers"),
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
diff --git a/eos/effects/skillfreightbonus.py b/eos/effects/skillfreightbonus.py
new file mode 100755
index 000000000..285eacc92
--- /dev/null
+++ b/eos/effects/skillfreightbonus.py
@@ -0,0 +1,5 @@
+# Used by:
+# Modules named like: Cargohold Optimization (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.boostItemAttr("capacity", module.getModifiedItemAttr("cargoCapacityBonus"))
diff --git a/eos/effects/skillindustrialreconfigurationconsumptionquantitybonus.py b/eos/effects/skillindustrialreconfigurationconsumptionquantitybonus.py
new file mode 100755
index 000000000..24b800526
--- /dev/null
+++ b/eos/effects/skillindustrialreconfigurationconsumptionquantitybonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Skill: Industrial Reconfiguration
+type = "passive"
+def handler(fit, skill, context):
+ amount = -skill.getModifiedItemAttr("consumptionQuantityBonus")
+ fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill(skill),
+ "consumptionQuantity", amount * skill.level)
diff --git a/eos/effects/skilljumpdriveconsumptionamountbonuspercentage.py b/eos/effects/skilljumpdriveconsumptionamountbonuspercentage.py
new file mode 100755
index 000000000..460ceb4d9
--- /dev/null
+++ b/eos/effects/skilljumpdriveconsumptionamountbonuspercentage.py
@@ -0,0 +1,5 @@
+# Used by:
+# Skill: Jump Fuel Conservation
+type = "passive"
+def handler(fit, skill, context):
+ fit.ship.boostItemAttr("jumpDriveConsumptionAmount", skill.getModifiedItemAttr("consumptionQuantityBonusPercentage") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/skillmjddurationbonus.py b/eos/effects/skillmjddurationbonus.py
new file mode 100755
index 000000000..0a57f8037
--- /dev/null
+++ b/eos/effects/skillmjddurationbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Micro Jump Drive Operation
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Micro Jump Drive Operation"),
+ "duration", skill.getModifiedItemAttr("durationBonus") * skill.level)
diff --git a/eos/effects/skillreactivearmorhardenercapneedbonus.py b/eos/effects/skillreactivearmorhardenercapneedbonus.py
new file mode 100755
index 000000000..9b8523365
--- /dev/null
+++ b/eos/effects/skillreactivearmorhardenercapneedbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Armor Resistance Phasing
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Resistance Shift Hardener",
+ "capacitorNeed", skill.getModifiedItemAttr("capNeedBonus") * skill.level)
diff --git a/eos/effects/skillreactivearmorhardenerdurationbonus.py b/eos/effects/skillreactivearmorhardenerdurationbonus.py
new file mode 100755
index 000000000..1ae3e20c6
--- /dev/null
+++ b/eos/effects/skillreactivearmorhardenerdurationbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Armor Resistance Phasing
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Resistance Shift Hardener",
+ "duration", skill.getModifiedItemAttr("durationBonus") * skill.level)
diff --git a/eos/effects/skillremoteecmdurationbonus.py b/eos/effects/skillremoteecmdurationbonus.py
new file mode 100755
index 000000000..efa8e1fef
--- /dev/null
+++ b/eos/effects/skillremoteecmdurationbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Projected Electronic Counter Measures
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote ECM Burst",
+ "duration", skill.getModifiedItemAttr("projECMDurationBonus") * skill.level)
diff --git a/eos/effects/skillremotehullrepairsystemscapneedbonus.py b/eos/effects/skillremotehullrepairsystemscapneedbonus.py
new file mode 100755
index 000000000..271262a55
--- /dev/null
+++ b/eos/effects/skillremotehullrepairsystemscapneedbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Remote Hull Repair Systems
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Hull Repair Systems"),
+ "capacitorNeed", skill.getModifiedItemAttr("capNeedBonus") * skill.level)
diff --git a/eos/effects/skillsiegemoduleconsumptionquantitybonus.py b/eos/effects/skillsiegemoduleconsumptionquantitybonus.py
new file mode 100755
index 000000000..7bb93c42f
--- /dev/null
+++ b/eos/effects/skillsiegemoduleconsumptionquantitybonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Skill: Tactical Weapon Reconfiguration
+type = "passive"
+def handler(fit, skill, context):
+ amount = -skill.getModifiedItemAttr("consumptionQuantityBonus")
+ fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill(skill),
+ "consumptionQuantity", amount * skill.level)
diff --git a/eos/effects/skillsuperweapondmgbonus.py b/eos/effects/skillsuperweapondmgbonus.py
new file mode 100755
index 000000000..937d4c811
--- /dev/null
+++ b/eos/effects/skillsuperweapondmgbonus.py
@@ -0,0 +1,9 @@
+# Used by:
+# Skill: Doomsday Operation
+type = "passive"
+def handler(fit, skill, context):
+ damageTypes = ("em", "explosive", "kinetic", "thermal")
+ for dmgType in damageTypes:
+ dmgAttr = "{0}Damage".format(dmgType)
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Super Weapon" and dmgAttr in mod.itemModifiedAttributes,
+ dmgAttr, skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
diff --git a/eos/effects/skilltargetbreakercapneedbonus2.py b/eos/effects/skilltargetbreakercapneedbonus2.py
new file mode 100755
index 000000000..03ddd1ea6
--- /dev/null
+++ b/eos/effects/skilltargetbreakercapneedbonus2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Target Breaker Amplification
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Target Breaker",
+ "capacitorNeed", skill.getModifiedItemAttr("capNeedBonus") * skill.level)
diff --git a/eos/effects/skilltargetbreakerdurationbonus2.py b/eos/effects/skilltargetbreakerdurationbonus2.py
new file mode 100755
index 000000000..f73cb4080
--- /dev/null
+++ b/eos/effects/skilltargetbreakerdurationbonus2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Target Breaker Amplification
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Target Breaker",
+ "duration", skill.getModifiedItemAttr("durationBonus") * skill.level)
diff --git a/eos/effects/skilltriagemoduleconsumptionquantitybonus.py b/eos/effects/skilltriagemoduleconsumptionquantitybonus.py
new file mode 100755
index 000000000..12d937126
--- /dev/null
+++ b/eos/effects/skilltriagemoduleconsumptionquantitybonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Skill: Tactical Logistics Reconfiguration
+type = "passive"
+def handler(fit, skill, context):
+ amount = -skill.getModifiedItemAttr("consumptionQuantityBonus")
+ fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill(skill),
+ "consumptionQuantity", amount * skill.level)
diff --git a/eos/effects/skirmishwarfareagilitybonus.py b/eos/effects/skirmishwarfareagilitybonus.py
new file mode 100755
index 000000000..f3db880bc
--- /dev/null
+++ b/eos/effects/skirmishwarfareagilitybonus.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implant: Skirmish Warfare Mindlink
+# Skill: Skirmish Warfare
+type = "gang"
+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)
diff --git a/eos/effects/slotmodifier.py b/eos/effects/slotmodifier.py
new file mode 100755
index 000000000..9649d893e
--- /dev/null
+++ b/eos/effects/slotmodifier.py
@@ -0,0 +1,7 @@
+# Used by:
+# Items from category: Subsystem (80 of 80)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.increaseItemAttr("hiSlots", module.getModifiedItemAttr("hiSlotModifier"))
+ fit.ship.increaseItemAttr("medSlots", module.getModifiedItemAttr("medSlotModifier"))
+ fit.ship.increaseItemAttr("lowSlots", module.getModifiedItemAttr("lowSlotModifier"))
diff --git a/eos/effects/smallenergymaxrangebonus.py b/eos/effects/smallenergymaxrangebonus.py
new file mode 100755
index 000000000..d2a09ba5d
--- /dev/null
+++ b/eos/effects/smallenergymaxrangebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Coercer
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"),
+ "maxRange", ship.getModifiedItemAttr("maxRangeBonus"))
diff --git a/eos/effects/smallenergyturretdamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringsmallenergyturret.py b/eos/effects/smallenergyturretdamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringsmallenergyturret.py
new file mode 100755
index 000000000..9c8795274
--- /dev/null
+++ b/eos/effects/smallenergyturretdamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringsmallenergyturret.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Inherent Implants 'Lancer' Small Energy Turret SE (6 of 6)
+# Skill: Small Energy Turret
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"),
+ "damageMultiplier", container.getModifiedItemAttr("damageMultiplierBonus") * level)
diff --git a/eos/effects/smallhybridmaxrangebonus.py b/eos/effects/smallhybridmaxrangebonus.py
new file mode 100755
index 000000000..1e2ef1349
--- /dev/null
+++ b/eos/effects/smallhybridmaxrangebonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of ship: Catalyst (6 of 7)
+# Ship: Cormorant
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Hybrid Turret"),
+ "maxRange", ship.getModifiedItemAttr("maxRangeBonus"))
\ No newline at end of file
diff --git a/eos/effects/smallhybridturretdamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringsmallhybridturret.py b/eos/effects/smallhybridturretdamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringsmallhybridturret.py
new file mode 100755
index 000000000..56bf3470b
--- /dev/null
+++ b/eos/effects/smallhybridturretdamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringsmallhybridturret.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Zainou 'Deadeye' Small Hybrid Turret SH (6 of 6)
+# Skill: Small Hybrid Turret
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Hybrid Turret"),
+ "damageMultiplier", container.getModifiedItemAttr("damageMultiplierBonus") * level)
diff --git a/eos/effects/smallprojectilemaxrangebonus.py b/eos/effects/smallprojectilemaxrangebonus.py
new file mode 100755
index 000000000..ca3d53925
--- /dev/null
+++ b/eos/effects/smallprojectilemaxrangebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ships named like: Thrasher (2 of 2)
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Projectile Turret"),
+ "maxRange", ship.getModifiedItemAttr("maxRangeBonus"))
diff --git a/eos/effects/smallprojectileturretdamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringsmallprojectileturret.py b/eos/effects/smallprojectileturretdamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringsmallprojectileturret.py
new file mode 100755
index 000000000..ff35bea0b
--- /dev/null
+++ b/eos/effects/smallprojectileturretdamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringsmallprojectileturret.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Eifyr and Co. 'Gunslinger' Small Projectile Turret SP (6 of 6)
+# Skill: Small Projectile Turret
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Projectile Turret"),
+ "damageMultiplier", container.getModifiedItemAttr("damageMultiplierBonus") * level)
diff --git a/eos/effects/speedboostmassaddition.py b/eos/effects/speedboostmassaddition.py
new file mode 100755
index 000000000..f5f98c660
--- /dev/null
+++ b/eos/effects/speedboostmassaddition.py
@@ -0,0 +1,13 @@
+# Used by:
+# Variations of module: 100MN Afterburner I (24 of 24)
+# Variations of module: 10MN Afterburner I (14 of 14)
+# Variations of module: 1MN Afterburner I (15 of 15)
+# Module: Civilian Afterburner
+type = "active"
+runTime = "late"
+def handler(fit, module, context):
+ fit.ship.increaseItemAttr("mass", module.getModifiedItemAttr("massAddition"))
+ speedBoost = module.getModifiedItemAttr("speedFactor")
+ mass = fit.ship.getModifiedItemAttr("mass")
+ thrust = module.getModifiedItemAttr("speedBoostFactor")
+ fit.ship.boostItemAttr("maxVelocity", speedBoost * thrust / mass)
diff --git a/eos/effects/speedboostmasssigrad.py b/eos/effects/speedboostmasssigrad.py
new file mode 100755
index 000000000..e18e5a754
--- /dev/null
+++ b/eos/effects/speedboostmasssigrad.py
@@ -0,0 +1,13 @@
+# Used by:
+# Variations of module: 100MN Microwarpdrive I (24 of 24)
+# Variations of module: 10MN Microwarpdrive I (14 of 14)
+# Variations of module: 1MN Microwarpdrive I (15 of 15)
+type = "active"
+runTime = "late"
+def handler(fit, module, context):
+ fit.ship.increaseItemAttr("mass", module.getModifiedItemAttr("massAddition"))
+ speedBoost = module.getModifiedItemAttr("speedFactor")
+ mass = fit.ship.getModifiedItemAttr("mass")
+ thrust = module.getModifiedItemAttr("speedBoostFactor")
+ fit.ship.boostItemAttr("maxVelocity", speedBoost * thrust / mass)
+ fit.ship.boostItemAttr("signatureRadius", module.getModifiedItemAttr("signatureRadiusBonus"), stackingPenalties = True)
diff --git a/eos/effects/squadroncommand.py b/eos/effects/squadroncommand.py
new file mode 100755
index 000000000..5b34372a9
--- /dev/null
+++ b/eos/effects/squadroncommand.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Warfare Link Specialist
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Gang Coordinator",
+ "commandBonus", skill.getModifiedItemAttr("squadronCommandBonus") * skill.level)
diff --git a/eos/effects/squadroncommandhidden.py b/eos/effects/squadroncommandhidden.py
new file mode 100755
index 000000000..3997808de
--- /dev/null
+++ b/eos/effects/squadroncommandhidden.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Warfare Link Specialist
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Gang Coordinator",
+ "commandBonusHidden", skill.getModifiedItemAttr("squadronCommandBonus") * skill.level)
diff --git a/eos/effects/standardmissilesskillboostmissilevelocitybonus.py b/eos/effects/standardmissilesskillboostmissilevelocitybonus.py
new file mode 100755
index 000000000..2bea1184c
--- /dev/null
+++ b/eos/effects/standardmissilesskillboostmissilevelocitybonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Defender Missiles
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Defender Missiles"),
+ "maxVelocity", skill.getModifiedItemAttr("missileVelocityBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/stripminermaxrangebonus.py b/eos/effects/stripminermaxrangebonus.py
new file mode 100755
index 000000000..08f976e0a
--- /dev/null
+++ b/eos/effects/stripminermaxrangebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Low grade Harvest (5 of 6)
+type = "passive"
+def handler(fit, implant, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Strip Miner",
+ "maxRange", implant.getModifiedItemAttr("maxRangeBonus"))
diff --git a/eos/effects/structuralanalysiseffect.py b/eos/effects/structuralanalysiseffect.py
new file mode 100755
index 000000000..29995bc7f
--- /dev/null
+++ b/eos/effects/structuralanalysiseffect.py
@@ -0,0 +1,10 @@
+# Used by:
+# Implants named like: Inherent Implants 'Noble' Repair Proficiency RP (6 of 6)
+# Modules named like: Auxiliary Nano Pump (8 of 8)
+# Modules named like: QA Multiship Module Players (4 of 4)
+# Implant: Imperial Navy Modified 'Noble' Implant
+type = "passive"
+def handler(fit, container, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Repair Systems"),
+ "armorDamageAmount", container.getModifiedItemAttr("repairBonus"),
+ stackingPenalties = "implant" not in context)
diff --git a/eos/effects/structurehpmultiply.py b/eos/effects/structurehpmultiply.py
new file mode 100755
index 000000000..224a44145
--- /dev/null
+++ b/eos/effects/structurehpmultiply.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules from group: Nanofiber Internal Structure (14 of 14)
+# Modules from group: Reinforced Bulkhead (12 of 12)
+# Modules named like: QA Multiship Module Players (4 of 4)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.multiplyItemAttr("hp", module.getModifiedItemAttr("structureHPMultiplier"))
\ No newline at end of file
diff --git a/eos/effects/structurehpmultiplypassive.py b/eos/effects/structurehpmultiplypassive.py
new file mode 100755
index 000000000..867ab8de7
--- /dev/null
+++ b/eos/effects/structurehpmultiplypassive.py
@@ -0,0 +1,5 @@
+# Used by:
+# Modules from group: Expanded Cargohold (13 of 13)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.multiplyItemAttr("hp", module.getModifiedItemAttr("structureHPMultiplier"))
\ No newline at end of file
diff --git a/eos/effects/structurerepair.py b/eos/effects/structurerepair.py
new file mode 100755
index 000000000..d081e15a4
--- /dev/null
+++ b/eos/effects/structurerepair.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules from group: Hull Repair Unit (21 of 21)
+type = "active"
+runTime = "late"
+def handler(fit, module, context):
+ amount = module.getModifiedItemAttr("structureDamageAmount")
+ speed = module.getModifiedItemAttr("duration") / 1000.0
+ fit.extraAttributes.increase("hullRepair", amount / speed)
\ No newline at end of file
diff --git a/eos/effects/structurestealthemitterarraysigdecrease.py b/eos/effects/structurestealthemitterarraysigdecrease.py
new file mode 100755
index 000000000..290f9e3ac
--- /dev/null
+++ b/eos/effects/structurestealthemitterarraysigdecrease.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Halo (10 of 12)
+# Implants named like: X Instinct Booster (4 of 4)
+type = "passive"
+def handler(fit, implant, context):
+ fit.ship.boostItemAttr("signatureRadius", implant.getModifiedItemAttr("signatureRadiusBonus"))
diff --git a/eos/effects/subsystembonusamarrdefensive2remotearmorrepairamount.py b/eos/effects/subsystembonusamarrdefensive2remotearmorrepairamount.py
new file mode 100755
index 000000000..0dad44c93
--- /dev/null
+++ b/eos/effects/subsystembonusamarrdefensive2remotearmorrepairamount.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Legion Defensive - Adaptive Augmenter
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Defensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Projector",
+ "armorDamageAmount", module.getModifiedItemAttr("subsystemBonusAmarrDefensive2") * level)
diff --git a/eos/effects/subsystembonusamarrdefensivearmoredwarfare.py b/eos/effects/subsystembonusamarrdefensivearmoredwarfare.py
new file mode 100755
index 000000000..ea381d324
--- /dev/null
+++ b/eos/effects/subsystembonusamarrdefensivearmoredwarfare.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Legion Defensive - Warfare Processor
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Defensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Warfare Specialist"),
+ "commandBonus", module.getModifiedItemAttr("subsystemBonusAmarrDefensive") * level)
diff --git a/eos/effects/subsystembonusamarrdefensivearmorhp.py b/eos/effects/subsystembonusamarrdefensivearmorhp.py
new file mode 100755
index 000000000..dc603f116
--- /dev/null
+++ b/eos/effects/subsystembonusamarrdefensivearmorhp.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Legion Defensive - Augmented Plating
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Defensive Systems").level
+ fit.ship.boostItemAttr("armorHP", module.getModifiedItemAttr("subsystemBonusAmarrDefensive") * level)
diff --git a/eos/effects/subsystembonusamarrdefensivearmorrepairamount.py b/eos/effects/subsystembonusamarrdefensivearmorrepairamount.py
new file mode 100755
index 000000000..0a0579b49
--- /dev/null
+++ b/eos/effects/subsystembonusamarrdefensivearmorrepairamount.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Legion Defensive - Nanobot Injector
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Defensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Repair Systems"),
+ "armorDamageAmount", module.getModifiedItemAttr("subsystemBonusAmarrDefensive") * level)
diff --git a/eos/effects/subsystembonusamarrdefensivearmorresistance.py b/eos/effects/subsystembonusamarrdefensivearmorresistance.py
new file mode 100755
index 000000000..3cb5f5fcc
--- /dev/null
+++ b/eos/effects/subsystembonusamarrdefensivearmorresistance.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Legion Defensive - Adaptive Augmenter
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Defensive Systems").level
+ for type in ("Em", "Explosive", "Kinetic", "Thermal"):
+ fit.ship.boostItemAttr("armor{0}DamageResonance".format(type), module.getModifiedItemAttr("subsystemBonusAmarrDefensive") * level)
diff --git a/eos/effects/subsystembonusamarrelectronic2maxtargetingrange.py b/eos/effects/subsystembonusamarrelectronic2maxtargetingrange.py
new file mode 100755
index 000000000..f5af08909
--- /dev/null
+++ b/eos/effects/subsystembonusamarrelectronic2maxtargetingrange.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Legion Electronics - Dissolution Sequencer
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Electronic Systems").level
+ fit.ship.boostItemAttr("maxTargetRange", module.getModifiedItemAttr("subsystemBonusAmarrElectronic2") * level)
diff --git a/eos/effects/subsystembonusamarrelectronic2scanresolution.py b/eos/effects/subsystembonusamarrelectronic2scanresolution.py
new file mode 100755
index 000000000..984ea3e73
--- /dev/null
+++ b/eos/effects/subsystembonusamarrelectronic2scanresolution.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Legion Electronics - Tactical Targeting Network
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Electronic Systems").level
+ fit.ship.boostItemAttr("scanResolution", module.getModifiedItemAttr("subsystemBonusAmarrElectronic2") * level)
diff --git a/eos/effects/subsystembonusamarrelectronic2tractorbeamrange.py b/eos/effects/subsystembonusamarrelectronic2tractorbeamrange.py
new file mode 100755
index 000000000..d9fab253e
--- /dev/null
+++ b/eos/effects/subsystembonusamarrelectronic2tractorbeamrange.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Legion Electronics - Emergent Locus Analyzer
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Electronic Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tractor Beam",
+ "maxRange", module.getModifiedItemAttr("subsystemBonusAmarrElectronic2") * level)
diff --git a/eos/effects/subsystembonusamarrelectronic2tractorbeamvelocity.py b/eos/effects/subsystembonusamarrelectronic2tractorbeamvelocity.py
new file mode 100755
index 000000000..ccb6fb0b6
--- /dev/null
+++ b/eos/effects/subsystembonusamarrelectronic2tractorbeamvelocity.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Legion Electronics - Emergent Locus Analyzer
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Electronic Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tractor Beam",
+ "maxTractorVelocity", module.getModifiedItemAttr("subsystemBonusAmarrElectronic2") * level)
diff --git a/eos/effects/subsystembonusamarrelectronicenergydestabilizeramount.py b/eos/effects/subsystembonusamarrelectronicenergydestabilizeramount.py
new file mode 100755
index 000000000..a12a7e451
--- /dev/null
+++ b/eos/effects/subsystembonusamarrelectronicenergydestabilizeramount.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Legion Electronics - Energy Parasitic Complex
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Electronic Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer",
+ "energyDestabilizationAmount", module.getModifiedItemAttr("subsystemBonusAmarrElectronic") * level)
diff --git a/eos/effects/subsystembonusamarrelectronicenergyvampireamount.py b/eos/effects/subsystembonusamarrelectronicenergyvampireamount.py
new file mode 100755
index 000000000..897d8eeb6
--- /dev/null
+++ b/eos/effects/subsystembonusamarrelectronicenergyvampireamount.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Legion Electronics - Energy Parasitic Complex
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Electronic Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire",
+ "powerTransferAmount", module.getModifiedItemAttr("subsystemBonusAmarrElectronic") * level)
diff --git a/eos/effects/subsystembonusamarrelectronicscanprobestrength.py b/eos/effects/subsystembonusamarrelectronicscanprobestrength.py
new file mode 100755
index 000000000..108826dee
--- /dev/null
+++ b/eos/effects/subsystembonusamarrelectronicscanprobestrength.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Legion Electronics - Emergent Locus Analyzer
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Electronic Systems").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.group.name == "Scanner Probe",
+ "baseSensorStrength", module.getModifiedItemAttr("subsystemBonusAmarrElectronic") * level)
diff --git a/eos/effects/subsystembonusamarrelectronicscanstrengthradar.py b/eos/effects/subsystembonusamarrelectronicscanstrengthradar.py
new file mode 100755
index 000000000..0322ddb28
--- /dev/null
+++ b/eos/effects/subsystembonusamarrelectronicscanstrengthradar.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Legion Electronics - Dissolution Sequencer
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Electronic Systems").level
+ fit.ship.boostItemAttr("scanRadarStrength", module.getModifiedItemAttr("subsystemBonusAmarrElectronic") * level)
diff --git a/eos/effects/subsystembonusamarrengineeringcapacitorcapacity.py b/eos/effects/subsystembonusamarrengineeringcapacitorcapacity.py
new file mode 100755
index 000000000..9e88fc584
--- /dev/null
+++ b/eos/effects/subsystembonusamarrengineeringcapacitorcapacity.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Legion Engineering - Augmented Capacitor Reservoir
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Engineering Systems").level
+ fit.ship.boostItemAttr("capacitorCapacity", module.getModifiedItemAttr("subsystemBonusAmarrEngineering") * level)
diff --git a/eos/effects/subsystembonusamarrengineeringcapacitorrecharge.py b/eos/effects/subsystembonusamarrengineeringcapacitorrecharge.py
new file mode 100755
index 000000000..18a603644
--- /dev/null
+++ b/eos/effects/subsystembonusamarrengineeringcapacitorrecharge.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Legion Engineering - Capacitor Regeneration Matrix
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Engineering Systems").level
+ fit.ship.boostItemAttr("rechargeRate", module.getModifiedItemAttr("subsystemBonusAmarrEngineering") * level)
diff --git a/eos/effects/subsystembonusamarrengineeringheatdamagereduction.py b/eos/effects/subsystembonusamarrengineeringheatdamagereduction.py
new file mode 100755
index 000000000..d382b1a8d
--- /dev/null
+++ b/eos/effects/subsystembonusamarrengineeringheatdamagereduction.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Legion Engineering - Supplemental Coolant Injector
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Engineering Systems").level
+ fit.modules.filteredItemBoost(lambda mod: True, "heatDamage",
+ module.getModifiedItemAttr("subsystemBonusAmarrEngineering") * level)
diff --git a/eos/effects/subsystembonusamarrengineeringpoweroutput.py b/eos/effects/subsystembonusamarrengineeringpoweroutput.py
new file mode 100755
index 000000000..dfa19f974
--- /dev/null
+++ b/eos/effects/subsystembonusamarrengineeringpoweroutput.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Legion Engineering - Power Core Multiplier
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Engineering Systems").level
+ fit.ship.boostItemAttr("powerOutput", module.getModifiedItemAttr("subsystemBonusAmarrEngineering") * level)
diff --git a/eos/effects/subsystembonusamarroffensive2energyweaponcapacitorneed.py b/eos/effects/subsystembonusamarroffensive2energyweaponcapacitorneed.py
new file mode 100755
index 000000000..5444f64bc
--- /dev/null
+++ b/eos/effects/subsystembonusamarroffensive2energyweaponcapacitorneed.py
@@ -0,0 +1,8 @@
+# Used by:
+# Subsystem: Legion Offensive - Drone Synthesis Projector
+# Subsystem: Legion Offensive - Liquid Crystal Magnifiers
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Energy Turret"),
+ "capacitorNeed", module.getModifiedItemAttr("subsystemBonusAmarrOffensive2") * level)
diff --git a/eos/effects/subsystembonusamarroffensive2hamemdamage.py b/eos/effects/subsystembonusamarroffensive2hamemdamage.py
new file mode 100755
index 000000000..f7e985048
--- /dev/null
+++ b/eos/effects/subsystembonusamarroffensive2hamemdamage.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Legion Offensive - Assault Optimization
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Offensive Systems").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
+ "emDamage", module.getModifiedItemAttr("subsystemBonusAmarrOffensive2") * level)
diff --git a/eos/effects/subsystembonusamarroffensive2hamexplosivedamage.py b/eos/effects/subsystembonusamarroffensive2hamexplosivedamage.py
new file mode 100755
index 000000000..1fd56f79c
--- /dev/null
+++ b/eos/effects/subsystembonusamarroffensive2hamexplosivedamage.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Legion Offensive - Assault Optimization
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Offensive Systems").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
+ "explosiveDamage", module.getModifiedItemAttr("subsystemBonusAmarrOffensive2") * level)
diff --git a/eos/effects/subsystembonusamarroffensive2hamkineticdamage.py b/eos/effects/subsystembonusamarroffensive2hamkineticdamage.py
new file mode 100755
index 000000000..282e2c3fc
--- /dev/null
+++ b/eos/effects/subsystembonusamarroffensive2hamkineticdamage.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Legion Offensive - Assault Optimization
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Offensive Systems").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
+ "kineticDamage", module.getModifiedItemAttr("subsystemBonusAmarrOffensive2") * level)
diff --git a/eos/effects/subsystembonusamarroffensive2hamthermaldamage.py b/eos/effects/subsystembonusamarroffensive2hamthermaldamage.py
new file mode 100755
index 000000000..9b1be07f5
--- /dev/null
+++ b/eos/effects/subsystembonusamarroffensive2hamthermaldamage.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Legion Offensive - Assault Optimization
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Offensive Systems").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
+ "thermalDamage", module.getModifiedItemAttr("subsystemBonusAmarrOffensive2") * level)
diff --git a/eos/effects/subsystembonusamarroffensive3dronehp.py b/eos/effects/subsystembonusamarroffensive3dronehp.py
new file mode 100755
index 000000000..9833310b2
--- /dev/null
+++ b/eos/effects/subsystembonusamarroffensive3dronehp.py
@@ -0,0 +1,8 @@
+# Used by:
+# Subsystem: Legion Offensive - Drone Synthesis Projector
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Offensive Systems").level
+ for layer in ("shieldCapacity", "armorHP", "hp"):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"), layer,
+ module.getModifiedItemAttr("subsystemBonusAmarrOffensive3") * level)
diff --git a/eos/effects/subsystembonusamarroffensive3energyweaponmaxrange.py b/eos/effects/subsystembonusamarroffensive3energyweaponmaxrange.py
new file mode 100755
index 000000000..fc82b2407
--- /dev/null
+++ b/eos/effects/subsystembonusamarroffensive3energyweaponmaxrange.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Legion Offensive - Liquid Crystal Magnifiers
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Energy Turret"),
+ "maxRange", module.getModifiedItemAttr("subsystemBonusAmarrOffensive3") * level)
diff --git a/eos/effects/subsystembonusamarroffensiveassaultmissilelauncherrof.py b/eos/effects/subsystembonusamarroffensiveassaultmissilelauncherrof.py
new file mode 100755
index 000000000..c87157598
--- /dev/null
+++ b/eos/effects/subsystembonusamarroffensiveassaultmissilelauncherrof.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Legion Offensive - Assault Optimization
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Rapid Light",
+ "speed", module.getModifiedItemAttr("subsystemBonusAmarrOffensive") * level)
diff --git a/eos/effects/subsystembonusamarroffensivedronedamagemultiplier.py b/eos/effects/subsystembonusamarroffensivedronedamagemultiplier.py
new file mode 100755
index 000000000..6cb82f84c
--- /dev/null
+++ b/eos/effects/subsystembonusamarroffensivedronedamagemultiplier.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Legion Offensive - Drone Synthesis Projector
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Offensive Systems").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "damageMultiplier", module.getModifiedItemAttr("subsystemBonusAmarrOffensive") * level)
diff --git a/eos/effects/subsystembonusamarroffensiveenergyweaponcapacitorneed.py b/eos/effects/subsystembonusamarroffensiveenergyweaponcapacitorneed.py
new file mode 100755
index 000000000..7c3dceec9
--- /dev/null
+++ b/eos/effects/subsystembonusamarroffensiveenergyweaponcapacitorneed.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Legion Offensive - Covert Reconfiguration
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Energy Turret"),
+ "capacitorNeed", module.getModifiedItemAttr("subsystemBonusAmarrOffensive") * level)
diff --git a/eos/effects/subsystembonusamarroffensiveenergyweapondamagemultiplier.py b/eos/effects/subsystembonusamarroffensiveenergyweapondamagemultiplier.py
new file mode 100755
index 000000000..a7f909322
--- /dev/null
+++ b/eos/effects/subsystembonusamarroffensiveenergyweapondamagemultiplier.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Legion Offensive - Liquid Crystal Magnifiers
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Energy Turret"),
+ "damageMultiplier", module.getModifiedItemAttr("subsystemBonusAmarrOffensive") * level)
diff --git a/eos/effects/subsystembonusamarroffensiveheavyassaultmissilelauncherrof.py b/eos/effects/subsystembonusamarroffensiveheavyassaultmissilelauncherrof.py
new file mode 100755
index 000000000..06de0c31f
--- /dev/null
+++ b/eos/effects/subsystembonusamarroffensiveheavyassaultmissilelauncherrof.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Legion Offensive - Assault Optimization
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Heavy Assault",
+ "speed", module.getModifiedItemAttr("subsystemBonusAmarrOffensive") * level)
diff --git a/eos/effects/subsystembonusamarroffensiveheavymissilelauncherrof.py b/eos/effects/subsystembonusamarroffensiveheavymissilelauncherrof.py
new file mode 100755
index 000000000..f9db327ea
--- /dev/null
+++ b/eos/effects/subsystembonusamarroffensiveheavymissilelauncherrof.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Legion Offensive - Assault Optimization
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Heavy",
+ "speed", module.getModifiedItemAttr("subsystemBonusAmarrOffensive") * level)
diff --git a/eos/effects/subsystembonusamarrpropulsionafterburnerspeedfactor.py b/eos/effects/subsystembonusamarrpropulsionafterburnerspeedfactor.py
new file mode 100755
index 000000000..5eecc473b
--- /dev/null
+++ b/eos/effects/subsystembonusamarrpropulsionafterburnerspeedfactor.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Legion Propulsion - Fuel Catalyst
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Propulsion Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Afterburner"),
+ "speedFactor", module.getModifiedItemAttr("subsystemBonusAmarrPropulsion") * level)
diff --git a/eos/effects/subsystembonusamarrpropulsionagility.py b/eos/effects/subsystembonusamarrpropulsionagility.py
new file mode 100755
index 000000000..bc0b5b361
--- /dev/null
+++ b/eos/effects/subsystembonusamarrpropulsionagility.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Legion Propulsion - Interdiction Nullifier
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Propulsion Systems").level
+ fit.ship.boostItemAttr("agility", module.getModifiedItemAttr("subsystemBonusAmarrPropulsion") * level)
diff --git a/eos/effects/subsystembonusamarrpropulsionmaxvelocity.py b/eos/effects/subsystembonusamarrpropulsionmaxvelocity.py
new file mode 100755
index 000000000..b2a368d99
--- /dev/null
+++ b/eos/effects/subsystembonusamarrpropulsionmaxvelocity.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Legion Propulsion - Chassis Optimization
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Propulsion Systems").level
+ fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("subsystemBonusAmarrPropulsion") * level)
diff --git a/eos/effects/subsystembonusamarrpropulsionmwdpenalty.py b/eos/effects/subsystembonusamarrpropulsionmwdpenalty.py
new file mode 100755
index 000000000..7e95be243
--- /dev/null
+++ b/eos/effects/subsystembonusamarrpropulsionmwdpenalty.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Legion Propulsion - Wake Limiter
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Amarr Propulsion Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("High Speed Maneuvering"),
+ "signatureRadiusBonus", module.getModifiedItemAttr("subsystemBonusAmarrPropulsion") * level)
diff --git a/eos/effects/subsystembonuscaldaridefensive2remoteshieldtransporteramount.py b/eos/effects/subsystembonuscaldaridefensive2remoteshieldtransporteramount.py
new file mode 100755
index 000000000..99d424e3e
--- /dev/null
+++ b/eos/effects/subsystembonuscaldaridefensive2remoteshieldtransporteramount.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Tengu Defensive - Adaptive Shielding
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Defensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Shield Transporter",
+ "shieldBonus", module.getModifiedItemAttr("subsystemBonusCaldariDefensive2") * level)
diff --git a/eos/effects/subsystembonuscaldaridefensiveshieldboostamount.py b/eos/effects/subsystembonuscaldaridefensiveshieldboostamount.py
new file mode 100755
index 000000000..3e0efcf28
--- /dev/null
+++ b/eos/effects/subsystembonuscaldaridefensiveshieldboostamount.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Tengu Defensive - Amplification Node
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Defensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Operation"),
+ "shieldBonus", module.getModifiedItemAttr("subsystemBonusCaldariDefensive") * level)
diff --git a/eos/effects/subsystembonuscaldaridefensiveshieldhp.py b/eos/effects/subsystembonuscaldaridefensiveshieldhp.py
new file mode 100755
index 000000000..01a570f7d
--- /dev/null
+++ b/eos/effects/subsystembonuscaldaridefensiveshieldhp.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Tengu Defensive - Supplemental Screening
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Defensive Systems").level
+ fit.ship.boostItemAttr("shieldCapacity", module.getModifiedItemAttr("subsystemBonusCaldariDefensive") * level)
diff --git a/eos/effects/subsystembonuscaldaridefensiveshieldresistance.py b/eos/effects/subsystembonuscaldaridefensiveshieldresistance.py
new file mode 100755
index 000000000..ce8808214
--- /dev/null
+++ b/eos/effects/subsystembonuscaldaridefensiveshieldresistance.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Tengu Defensive - Adaptive Shielding
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Defensive Systems").level
+ for type in ("Em", "Explosive", "Kinetic", "Thermal"):
+ fit.ship.boostItemAttr("shield{0}DamageResonance".format(type), module.getModifiedItemAttr("subsystemBonusCaldariDefensive") * level)
diff --git a/eos/effects/subsystembonuscaldaridefensivesiegewarfare.py b/eos/effects/subsystembonuscaldaridefensivesiegewarfare.py
new file mode 100755
index 000000000..36f466bd2
--- /dev/null
+++ b/eos/effects/subsystembonuscaldaridefensivesiegewarfare.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Tengu Defensive - Warfare Processor
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Defensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Siege Warfare Specialist"),
+ "commandBonus", module.getModifiedItemAttr("subsystemBonusCaldariDefensive") * level)
diff --git a/eos/effects/subsystembonuscaldarielectronic2maxtargetingrange.py b/eos/effects/subsystembonuscaldarielectronic2maxtargetingrange.py
new file mode 100755
index 000000000..af7ce1c4e
--- /dev/null
+++ b/eos/effects/subsystembonuscaldarielectronic2maxtargetingrange.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Tengu Electronics - Dissolution Sequencer
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Electronic Systems").level
+ fit.ship.boostItemAttr("maxTargetRange", module.getModifiedItemAttr("subsystemBonusCaldariElectronic2") * level)
diff --git a/eos/effects/subsystembonuscaldarielectronic2tractorbeamrange.py b/eos/effects/subsystembonuscaldarielectronic2tractorbeamrange.py
new file mode 100755
index 000000000..a13ac287a
--- /dev/null
+++ b/eos/effects/subsystembonuscaldarielectronic2tractorbeamrange.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Tengu Electronics - Emergent Locus Analyzer
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Electronic Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tractor Beam",
+ "maxRange", module.getModifiedItemAttr("subsystemBonusCaldariElectronic2") * level)
diff --git a/eos/effects/subsystembonuscaldarielectronic2tractorbeamvelocity.py b/eos/effects/subsystembonuscaldarielectronic2tractorbeamvelocity.py
new file mode 100755
index 000000000..a18559b83
--- /dev/null
+++ b/eos/effects/subsystembonuscaldarielectronic2tractorbeamvelocity.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Tengu Electronics - Emergent Locus Analyzer
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Electronic Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tractor Beam",
+ "maxTractorVelocity", module.getModifiedItemAttr("subsystemBonusCaldariElectronic2") * level)
diff --git a/eos/effects/subsystembonuscaldarielectroniccpu.py b/eos/effects/subsystembonuscaldarielectroniccpu.py
new file mode 100755
index 000000000..6e03ee065
--- /dev/null
+++ b/eos/effects/subsystembonuscaldarielectroniccpu.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Tengu Electronics - CPU Efficiency Gate
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Electronic Systems").level
+ fit.ship.boostItemAttr("cpuOutput", module.getModifiedItemAttr("subsystemBonusCaldariElectronic") * level)
diff --git a/eos/effects/subsystembonuscaldarielectronicecmrange.py b/eos/effects/subsystembonuscaldarielectronicecmrange.py
new file mode 100755
index 000000000..914a4a1ce
--- /dev/null
+++ b/eos/effects/subsystembonuscaldarielectronicecmrange.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Tengu Electronics - Obfuscation Manifold
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Electronic Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
+ "maxRange", module.getModifiedItemAttr("subsystemBonusCaldariElectronic") * level)
diff --git a/eos/effects/subsystembonuscaldarielectronicscanprobestrength.py b/eos/effects/subsystembonuscaldarielectronicscanprobestrength.py
new file mode 100755
index 000000000..20c819c16
--- /dev/null
+++ b/eos/effects/subsystembonuscaldarielectronicscanprobestrength.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Tengu Electronics - Emergent Locus Analyzer
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Electronic Systems").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.group.name == "Scanner Probe",
+ "baseSensorStrength", module.getModifiedItemAttr("subsystemBonusCaldariElectronic") * level)
diff --git a/eos/effects/subsystembonuscaldarielectronicscanstrengthgravimetric.py b/eos/effects/subsystembonuscaldarielectronicscanstrengthgravimetric.py
new file mode 100755
index 000000000..7777bbf6f
--- /dev/null
+++ b/eos/effects/subsystembonuscaldarielectronicscanstrengthgravimetric.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Tengu Electronics - Dissolution Sequencer
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Electronic Systems").level
+ fit.ship.boostItemAttr("scanGravimetricStrength", module.getModifiedItemAttr("subsystemBonusCaldariElectronic") * level)
diff --git a/eos/effects/subsystembonuscaldariengineeringcapacitorcapacity.py b/eos/effects/subsystembonuscaldariengineeringcapacitorcapacity.py
new file mode 100755
index 000000000..d64a063fb
--- /dev/null
+++ b/eos/effects/subsystembonuscaldariengineeringcapacitorcapacity.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Tengu Engineering - Augmented Capacitor Reservoir
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Engineering Systems").level
+ fit.ship.boostItemAttr("capacitorCapacity", module.getModifiedItemAttr("subsystemBonusCaldariEngineering") * level)
diff --git a/eos/effects/subsystembonuscaldariengineeringcapacitorrecharge.py b/eos/effects/subsystembonuscaldariengineeringcapacitorrecharge.py
new file mode 100755
index 000000000..d457738e7
--- /dev/null
+++ b/eos/effects/subsystembonuscaldariengineeringcapacitorrecharge.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Tengu Engineering - Capacitor Regeneration Matrix
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Engineering Systems").level
+ fit.ship.boostItemAttr("rechargeRate", module.getModifiedItemAttr("subsystemBonusCaldariEngineering") * level)
diff --git a/eos/effects/subsystembonuscaldariengineeringheatdamagereduction.py b/eos/effects/subsystembonuscaldariengineeringheatdamagereduction.py
new file mode 100755
index 000000000..33760272d
--- /dev/null
+++ b/eos/effects/subsystembonuscaldariengineeringheatdamagereduction.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Tengu Engineering - Supplemental Coolant Injector
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Engineering Systems").level
+ fit.modules.filteredItemBoost(lambda mod: True, "heatDamage",
+ module.getModifiedItemAttr("subsystemBonusCaldariEngineering") * level)
diff --git a/eos/effects/subsystembonuscaldariengineeringpoweroutput.py b/eos/effects/subsystembonuscaldariengineeringpoweroutput.py
new file mode 100755
index 000000000..2997d4f54
--- /dev/null
+++ b/eos/effects/subsystembonuscaldariengineeringpoweroutput.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Tengu Engineering - Power Core Multiplier
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Engineering Systems").level
+ fit.ship.boostItemAttr("powerOutput", module.getModifiedItemAttr("subsystemBonusCaldariEngineering") * level)
diff --git a/eos/effects/subsystembonuscaldarioffensive2hybridweapondamagemultiplier.py b/eos/effects/subsystembonuscaldarioffensive2hybridweapondamagemultiplier.py
new file mode 100755
index 000000000..8629df5cd
--- /dev/null
+++ b/eos/effects/subsystembonuscaldarioffensive2hybridweapondamagemultiplier.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Tengu Offensive - Magnetic Infusion Basin
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
+ "damageMultiplier", module.getModifiedItemAttr("subsystemBonusCaldariOffensive2") * level)
diff --git a/eos/effects/subsystembonuscaldarioffensive2missilelauncherkineticdamage.py b/eos/effects/subsystembonuscaldarioffensive2missilelauncherkineticdamage.py
new file mode 100755
index 000000000..956fbe47a
--- /dev/null
+++ b/eos/effects/subsystembonuscaldarioffensive2missilelauncherkineticdamage.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Tengu Offensive - Accelerated Ejection Bay
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Offensive Systems").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "kineticDamage", module.getModifiedItemAttr("subsystemBonusCaldariOffensive2") * level)
diff --git a/eos/effects/subsystembonuscaldarioffensive3ewstrengthgrav.py b/eos/effects/subsystembonuscaldarioffensive3ewstrengthgrav.py
new file mode 100755
index 000000000..59f30aad8
--- /dev/null
+++ b/eos/effects/subsystembonuscaldarioffensive3ewstrengthgrav.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Tengu Offensive - Rifling Launcher Pattern
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
+ "scanGravimetricStrengthBonus", module.getModifiedItemAttr("subsystemBonusCaldariOffensive3") * level)
diff --git a/eos/effects/subsystembonuscaldarioffensive3ewstrengthladar.py b/eos/effects/subsystembonuscaldarioffensive3ewstrengthladar.py
new file mode 100755
index 000000000..e497223bd
--- /dev/null
+++ b/eos/effects/subsystembonuscaldarioffensive3ewstrengthladar.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Tengu Offensive - Rifling Launcher Pattern
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
+ "scanLadarStrengthBonus", module.getModifiedItemAttr("subsystemBonusCaldariOffensive3") * level)
diff --git a/eos/effects/subsystembonuscaldarioffensive3ewstrengthmagn.py b/eos/effects/subsystembonuscaldarioffensive3ewstrengthmagn.py
new file mode 100755
index 000000000..30eea2609
--- /dev/null
+++ b/eos/effects/subsystembonuscaldarioffensive3ewstrengthmagn.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Tengu Offensive - Rifling Launcher Pattern
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
+ "scanMagnetometricStrengthBonus", module.getModifiedItemAttr("subsystemBonusCaldariOffensive3") * level)
diff --git a/eos/effects/subsystembonuscaldarioffensive3ewstrengthradar.py b/eos/effects/subsystembonuscaldarioffensive3ewstrengthradar.py
new file mode 100755
index 000000000..43cf8900d
--- /dev/null
+++ b/eos/effects/subsystembonuscaldarioffensive3ewstrengthradar.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Tengu Offensive - Rifling Launcher Pattern
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
+ "scanRadarStrengthBonus", module.getModifiedItemAttr("subsystemBonusCaldariOffensive3") * level)
diff --git a/eos/effects/subsystembonuscaldarioffensive3heavyassaultmissilevelocity.py b/eos/effects/subsystembonuscaldarioffensive3heavyassaultmissilevelocity.py
new file mode 100755
index 000000000..d953cb7a4
--- /dev/null
+++ b/eos/effects/subsystembonuscaldarioffensive3heavyassaultmissilevelocity.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Tengu Offensive - Accelerated Ejection Bay
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Offensive Systems").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
+ "maxVelocity", module.getModifiedItemAttr("subsystemBonusCaldariOffensive3") * level)
diff --git a/eos/effects/subsystembonuscaldarioffensive3heavymissilevelocity.py b/eos/effects/subsystembonuscaldarioffensive3heavymissilevelocity.py
new file mode 100755
index 000000000..ef5cf52fc
--- /dev/null
+++ b/eos/effects/subsystembonuscaldarioffensive3heavymissilevelocity.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Tengu Offensive - Accelerated Ejection Bay
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Offensive Systems").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Missiles"),
+ "maxVelocity", module.getModifiedItemAttr("subsystemBonusCaldariOffensive3") * level)
diff --git a/eos/effects/subsystembonuscaldarioffensiveassaultmissilelauncherrof.py b/eos/effects/subsystembonuscaldarioffensiveassaultmissilelauncherrof.py
new file mode 100755
index 000000000..a4830192c
--- /dev/null
+++ b/eos/effects/subsystembonuscaldarioffensiveassaultmissilelauncherrof.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of subsystem: Tengu Offensive - Accelerated Ejection Bay (3 of 4)
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Rapid Light",
+ "speed", module.getModifiedItemAttr("subsystemBonusCaldariOffensive") * level)
diff --git a/eos/effects/subsystembonuscaldarioffensiveheavyassaultmissilelauncherrof.py b/eos/effects/subsystembonuscaldarioffensiveheavyassaultmissilelauncherrof.py
new file mode 100755
index 000000000..eb531dd91
--- /dev/null
+++ b/eos/effects/subsystembonuscaldarioffensiveheavyassaultmissilelauncherrof.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of subsystem: Tengu Offensive - Accelerated Ejection Bay (3 of 4)
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Heavy Assault",
+ "speed", module.getModifiedItemAttr("subsystemBonusCaldariOffensive") * level)
diff --git a/eos/effects/subsystembonuscaldarioffensiveheavymissilelauncherrof.py b/eos/effects/subsystembonuscaldarioffensiveheavymissilelauncherrof.py
new file mode 100755
index 000000000..d59e600e0
--- /dev/null
+++ b/eos/effects/subsystembonuscaldarioffensiveheavymissilelauncherrof.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of subsystem: Tengu Offensive - Accelerated Ejection Bay (3 of 4)
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Heavy",
+ "speed", module.getModifiedItemAttr("subsystemBonusCaldariOffensive") * level)
diff --git a/eos/effects/subsystembonuscaldarioffensivehybridweaponmaxrange.py b/eos/effects/subsystembonuscaldarioffensivehybridweaponmaxrange.py
new file mode 100755
index 000000000..718d22316
--- /dev/null
+++ b/eos/effects/subsystembonuscaldarioffensivehybridweaponmaxrange.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Tengu Offensive - Magnetic Infusion Basin
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
+ "maxRange", module.getModifiedItemAttr("subsystemBonusCaldariOffensive") * level)
diff --git a/eos/effects/subsystembonuscaldaripropulsion2warpcapacitor2.py b/eos/effects/subsystembonuscaldaripropulsion2warpcapacitor2.py
new file mode 100755
index 000000000..19efe5914
--- /dev/null
+++ b/eos/effects/subsystembonuscaldaripropulsion2warpcapacitor2.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Tengu Propulsion - Gravitational Capacitor
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Propulsion Systems").level
+ fit.ship.boostItemAttr("warpCapacitorNeed", module.getModifiedItemAttr("subsystemBonusCaldariPropulsion2") * level)
diff --git a/eos/effects/subsystembonuscaldaripropulsionafterburnerspeedfactor.py b/eos/effects/subsystembonuscaldaripropulsionafterburnerspeedfactor.py
new file mode 100755
index 000000000..a2fbade75
--- /dev/null
+++ b/eos/effects/subsystembonuscaldaripropulsionafterburnerspeedfactor.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Tengu Propulsion - Fuel Catalyst
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Propulsion Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Afterburner"),
+ "speedFactor", module.getModifiedItemAttr("subsystemBonusCaldariPropulsion") * level)
diff --git a/eos/effects/subsystembonuscaldaripropulsionagility.py b/eos/effects/subsystembonuscaldaripropulsionagility.py
new file mode 100755
index 000000000..35a67b888
--- /dev/null
+++ b/eos/effects/subsystembonuscaldaripropulsionagility.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Tengu Propulsion - Intercalated Nanofibers
+# Subsystem: Tengu Propulsion - Interdiction Nullifier
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Propulsion Systems").level
+ fit.ship.boostItemAttr("agility", module.getModifiedItemAttr("subsystemBonusCaldariPropulsion") * level)
diff --git a/eos/effects/subsystembonuscaldaripropulsionwarpspeed.py b/eos/effects/subsystembonuscaldaripropulsionwarpspeed.py
new file mode 100755
index 000000000..b96209784
--- /dev/null
+++ b/eos/effects/subsystembonuscaldaripropulsionwarpspeed.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Tengu Propulsion - Gravitational Capacitor
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Caldari Propulsion Systems").level
+ fit.ship.boostItemAttr("baseWarpSpeed", module.getModifiedItemAttr("subsystemBonusCaldariPropulsion") * level)
diff --git a/eos/effects/subsystembonusgallentedefensive2remotearmorrepairamount.py b/eos/effects/subsystembonusgallentedefensive2remotearmorrepairamount.py
new file mode 100755
index 000000000..4255cb29c
--- /dev/null
+++ b/eos/effects/subsystembonusgallentedefensive2remotearmorrepairamount.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Proteus Defensive - Adaptive Augmenter
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Defensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Projector",
+ "armorDamageAmount", module.getModifiedItemAttr("subsystemBonusGallenteDefensive2") * level)
diff --git a/eos/effects/subsystembonusgallentedefensivearmorhp.py b/eos/effects/subsystembonusgallentedefensivearmorhp.py
new file mode 100755
index 000000000..c279f8989
--- /dev/null
+++ b/eos/effects/subsystembonusgallentedefensivearmorhp.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Proteus Defensive - Augmented Plating
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Defensive Systems").level
+ fit.ship.boostItemAttr("armorHP", module.getModifiedItemAttr("subsystemBonusGallenteDefensive") * level)
diff --git a/eos/effects/subsystembonusgallentedefensivearmorrepairamount.py b/eos/effects/subsystembonusgallentedefensivearmorrepairamount.py
new file mode 100755
index 000000000..61f489c9d
--- /dev/null
+++ b/eos/effects/subsystembonusgallentedefensivearmorrepairamount.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Proteus Defensive - Nanobot Injector
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Defensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Repair Systems"),
+ "armorDamageAmount", module.getModifiedItemAttr("subsystemBonusGallenteDefensive") * level)
diff --git a/eos/effects/subsystembonusgallentedefensivearmorresistance.py b/eos/effects/subsystembonusgallentedefensivearmorresistance.py
new file mode 100755
index 000000000..27ac5d9ba
--- /dev/null
+++ b/eos/effects/subsystembonusgallentedefensivearmorresistance.py
@@ -0,0 +1,8 @@
+# Used by:
+# Subsystem: Proteus Defensive - Adaptive Augmenter
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Defensive Systems").level
+ for type in ("Em", "Explosive", "Kinetic", "Thermal"):
+ fit.ship.boostItemAttr("armor{0}DamageResonance".format(type),
+ module.getModifiedItemAttr("subsystemBonusGallenteDefensive") * level)
diff --git a/eos/effects/subsystembonusgallentedefensiveinformationwarfare.py b/eos/effects/subsystembonusgallentedefensiveinformationwarfare.py
new file mode 100755
index 000000000..f258bc8cf
--- /dev/null
+++ b/eos/effects/subsystembonusgallentedefensiveinformationwarfare.py
@@ -0,0 +1,9 @@
+# Used by:
+# Subsystem: Proteus Defensive - Warfare Processor
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Defensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Warfare Specialist"),
+ "commandBonus", module.getModifiedItemAttr("subsystemBonusGallenteDefensive") * level)
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Warfare Specialist"),
+ "commandBonusHidden", module.getModifiedItemAttr("subsystemBonusGallenteDefensive") * level)
diff --git a/eos/effects/subsystembonusgallenteelectronic2maxtargetingrange.py b/eos/effects/subsystembonusgallenteelectronic2maxtargetingrange.py
new file mode 100755
index 000000000..f42ba2c38
--- /dev/null
+++ b/eos/effects/subsystembonusgallenteelectronic2maxtargetingrange.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Proteus Electronics - Dissolution Sequencer
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Electronic Systems").level
+ fit.ship.boostItemAttr("maxTargetRange", module.getModifiedItemAttr("subsystemBonusGallenteElectronic2") * level)
diff --git a/eos/effects/subsystembonusgallenteelectronic2tractorbeamrange.py b/eos/effects/subsystembonusgallenteelectronic2tractorbeamrange.py
new file mode 100755
index 000000000..328411035
--- /dev/null
+++ b/eos/effects/subsystembonusgallenteelectronic2tractorbeamrange.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Proteus Electronics - Emergent Locus Analyzer
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Electronic Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tractor Beam",
+ "maxRange", module.getModifiedItemAttr("subsystemBonusGallenteElectronic2") * level)
diff --git a/eos/effects/subsystembonusgallenteelectronic2tractorbeamvelocity.py b/eos/effects/subsystembonusgallenteelectronic2tractorbeamvelocity.py
new file mode 100755
index 000000000..be149ab86
--- /dev/null
+++ b/eos/effects/subsystembonusgallenteelectronic2tractorbeamvelocity.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Proteus Electronics - Emergent Locus Analyzer
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Electronic Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tractor Beam",
+ "maxTractorVelocity", module.getModifiedItemAttr("subsystemBonusGallenteElectronic2") * level)
diff --git a/eos/effects/subsystembonusgallenteelectroniccpu.py b/eos/effects/subsystembonusgallenteelectroniccpu.py
new file mode 100755
index 000000000..ff694176e
--- /dev/null
+++ b/eos/effects/subsystembonusgallenteelectroniccpu.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Proteus Electronics - CPU Efficiency Gate
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Electronic Systems").level
+ fit.ship.boostItemAttr("cpuOutput", module.getModifiedItemAttr("subsystemBonusGallenteElectronic") * level)
diff --git a/eos/effects/subsystembonusgallenteelectronicscanprobestrength.py b/eos/effects/subsystembonusgallenteelectronicscanprobestrength.py
new file mode 100755
index 000000000..5ecd65dae
--- /dev/null
+++ b/eos/effects/subsystembonusgallenteelectronicscanprobestrength.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Proteus Electronics - Emergent Locus Analyzer
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Electronic Systems").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.group.name == "Scanner Probe",
+ "baseSensorStrength", module.getModifiedItemAttr("subsystemBonusGallenteElectronic") * level)
diff --git a/eos/effects/subsystembonusgallenteelectronicscanstrengthmagnetometric.py b/eos/effects/subsystembonusgallenteelectronicscanstrengthmagnetometric.py
new file mode 100755
index 000000000..a259fa30d
--- /dev/null
+++ b/eos/effects/subsystembonusgallenteelectronicscanstrengthmagnetometric.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Proteus Electronics - Dissolution Sequencer
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Electronic Systems").level
+ fit.ship.boostItemAttr("scanMagnetometricStrength", module.getModifiedItemAttr("subsystemBonusGallenteElectronic") * level)
diff --git a/eos/effects/subsystembonusgallenteelectronicwarpscramblerange.py b/eos/effects/subsystembonusgallenteelectronicwarpscramblerange.py
new file mode 100755
index 000000000..377b694aa
--- /dev/null
+++ b/eos/effects/subsystembonusgallenteelectronicwarpscramblerange.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Proteus Electronics - Friction Extension Processor
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Electronic Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Warp Scrambler",
+ "maxRange", module.getModifiedItemAttr("subsystemBonusGallenteElectronic") * level)
diff --git a/eos/effects/subsystembonusgallenteengineering2dronemwd.py b/eos/effects/subsystembonusgallenteengineering2dronemwd.py
new file mode 100755
index 000000000..8caa17dfd
--- /dev/null
+++ b/eos/effects/subsystembonusgallenteengineering2dronemwd.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Proteus Engineering - Augmented Capacitor Reservoir
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Engineering Systems").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"), "maxVelocity",
+ module.getModifiedItemAttr("subsystemBonusGallenteEngineering2") * level)
diff --git a/eos/effects/subsystembonusgallenteengineeringcapacitorrecharge.py b/eos/effects/subsystembonusgallenteengineeringcapacitorrecharge.py
new file mode 100755
index 000000000..16815315d
--- /dev/null
+++ b/eos/effects/subsystembonusgallenteengineeringcapacitorrecharge.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Proteus Engineering - Capacitor Regeneration Matrix
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Engineering Systems").level
+ fit.ship.boostItemAttr("rechargeRate", module.getModifiedItemAttr("subsystemBonusGallenteEngineering") * level)
diff --git a/eos/effects/subsystembonusgallenteengineeringdronehp.py b/eos/effects/subsystembonusgallenteengineeringdronehp.py
new file mode 100755
index 000000000..2bd66a2d1
--- /dev/null
+++ b/eos/effects/subsystembonusgallenteengineeringdronehp.py
@@ -0,0 +1,8 @@
+# Used by:
+# Subsystem: Proteus Engineering - Augmented Capacitor Reservoir
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Engineering Systems").level
+ for layer in ("shieldCapacity", "armorHP", "hp"):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"), layer,
+ module.getModifiedItemAttr("subsystemBonusGallenteEngineering") * level)
diff --git a/eos/effects/subsystembonusgallenteengineeringheatdamagereduction.py b/eos/effects/subsystembonusgallenteengineeringheatdamagereduction.py
new file mode 100755
index 000000000..c08e48315
--- /dev/null
+++ b/eos/effects/subsystembonusgallenteengineeringheatdamagereduction.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Proteus Engineering - Supplemental Coolant Injector
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Engineering Systems").level
+ fit.modules.filteredItemBoost(lambda mod: True, "heatDamage",
+ module.getModifiedItemAttr("subsystemBonusGallenteEngineering") * level)
diff --git a/eos/effects/subsystembonusgallenteengineeringpoweroutput.py b/eos/effects/subsystembonusgallenteengineeringpoweroutput.py
new file mode 100755
index 000000000..2f5bb4390
--- /dev/null
+++ b/eos/effects/subsystembonusgallenteengineeringpoweroutput.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Proteus Engineering - Power Core Multiplier
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Engineering Systems").level
+ fit.ship.boostItemAttr("powerOutput", module.getModifiedItemAttr("subsystemBonusGallenteEngineering") * level)
diff --git a/eos/effects/subsystembonusgallenteoffensive2hybridweapondamagemultiplier.py b/eos/effects/subsystembonusgallenteoffensive2hybridweapondamagemultiplier.py
new file mode 100755
index 000000000..770c3220d
--- /dev/null
+++ b/eos/effects/subsystembonusgallenteoffensive2hybridweapondamagemultiplier.py
@@ -0,0 +1,7 @@
+# Used by:
+# Variations of subsystem: Proteus Offensive - Dissonic Encoding Platform (3 of 4)
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
+ "damageMultiplier", module.getModifiedItemAttr("subsystemBonusGallenteOffensive2") * level)
diff --git a/eos/effects/subsystembonusgallenteoffensive3dronedamagemultiplier.py b/eos/effects/subsystembonusgallenteoffensive3dronedamagemultiplier.py
new file mode 100755
index 000000000..ed31b41bf
--- /dev/null
+++ b/eos/effects/subsystembonusgallenteoffensive3dronedamagemultiplier.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Proteus Offensive - Drone Synthesis Projector
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Offensive Systems").level
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
+ "damageMultiplier", module.getModifiedItemAttr("subsystemBonusGallenteOffensive3") * level)
diff --git a/eos/effects/subsystembonusgallenteoffensive3turrettracking.py b/eos/effects/subsystembonusgallenteoffensive3turrettracking.py
new file mode 100755
index 000000000..76d4c219a
--- /dev/null
+++ b/eos/effects/subsystembonusgallenteoffensive3turrettracking.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Proteus Offensive - Dissonic Encoding Platform
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
+ "trackingSpeed", module.getModifiedItemAttr("subsystemBonusGallenteOffensive3") * level)
diff --git a/eos/effects/subsystembonusgallenteoffensivedronehp.py b/eos/effects/subsystembonusgallenteoffensivedronehp.py
new file mode 100755
index 000000000..29d8cd835
--- /dev/null
+++ b/eos/effects/subsystembonusgallenteoffensivedronehp.py
@@ -0,0 +1,8 @@
+# Used by:
+# Subsystem: Proteus Offensive - Drone Synthesis Projector
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Offensive Systems").level
+ for layer in ("shieldCapacity", "armorHP", "hp"):
+ fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"), layer,
+ module.getModifiedItemAttr("subsystemBonusGallenteOffensive") * level)
diff --git a/eos/effects/subsystembonusgallenteoffensivehybridweapondamagemultiplier.py b/eos/effects/subsystembonusgallenteoffensivehybridweapondamagemultiplier.py
new file mode 100755
index 000000000..26820a9a6
--- /dev/null
+++ b/eos/effects/subsystembonusgallenteoffensivehybridweapondamagemultiplier.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Proteus Offensive - Covert Reconfiguration
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
+ "damageMultiplier", module.getModifiedItemAttr("subsystemBonusGallenteOffensive") * level)
diff --git a/eos/effects/subsystembonusgallenteoffensivehybridweaponfalloff.py b/eos/effects/subsystembonusgallenteoffensivehybridweaponfalloff.py
new file mode 100755
index 000000000..e0af42c21
--- /dev/null
+++ b/eos/effects/subsystembonusgallenteoffensivehybridweaponfalloff.py
@@ -0,0 +1,8 @@
+# Used by:
+# Subsystem: Proteus Offensive - Dissonic Encoding Platform
+# Subsystem: Proteus Offensive - Hybrid Propulsion Armature
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
+ "falloff", module.getModifiedItemAttr("subsystemBonusGallenteOffensive") * level)
diff --git a/eos/effects/subsystembonusgallentepropulsion2warpcapacitor.py b/eos/effects/subsystembonusgallentepropulsion2warpcapacitor.py
new file mode 100755
index 000000000..69df275e2
--- /dev/null
+++ b/eos/effects/subsystembonusgallentepropulsion2warpcapacitor.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Proteus Propulsion - Gravitational Capacitor
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Propulsion Systems").level
+ fit.ship.boostItemAttr("warpCapacitorNeed", module.getModifiedItemAttr("subsystemBonusGallentePropulsion2") * level)
diff --git a/eos/effects/subsystembonusgallentepropulsionabmwdcapneed.py b/eos/effects/subsystembonusgallentepropulsionabmwdcapneed.py
new file mode 100755
index 000000000..13b8a1a5d
--- /dev/null
+++ b/eos/effects/subsystembonusgallentepropulsionabmwdcapneed.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Proteus Propulsion - Localized Injectors
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Propulsion Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Propulsion Module",
+ "capacitorNeed", module.getModifiedItemAttr("subsystemBonusGallentePropulsion") * level)
diff --git a/eos/effects/subsystembonusgallentepropulsionagility.py b/eos/effects/subsystembonusgallentepropulsionagility.py
new file mode 100755
index 000000000..5038b6fde
--- /dev/null
+++ b/eos/effects/subsystembonusgallentepropulsionagility.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Proteus Propulsion - Interdiction Nullifier
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Propulsion Systems").level
+ fit.ship.boostItemAttr("agility", module.getModifiedItemAttr("subsystemBonusGallentePropulsion") * level)
diff --git a/eos/effects/subsystembonusgallentepropulsionmwdpenalty.py b/eos/effects/subsystembonusgallentepropulsionmwdpenalty.py
new file mode 100755
index 000000000..db40cc5fb
--- /dev/null
+++ b/eos/effects/subsystembonusgallentepropulsionmwdpenalty.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Proteus Propulsion - Wake Limiter
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Propulsion Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("High Speed Maneuvering"),
+ "signatureRadiusBonus", module.getModifiedItemAttr("subsystemBonusGallentePropulsion") * level)
diff --git a/eos/effects/subsystembonusgallentepropulsionwarpspeed.py b/eos/effects/subsystembonusgallentepropulsionwarpspeed.py
new file mode 100755
index 000000000..65da0adcc
--- /dev/null
+++ b/eos/effects/subsystembonusgallentepropulsionwarpspeed.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Proteus Propulsion - Gravitational Capacitor
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Gallente Propulsion Systems").level
+ fit.ship.boostItemAttr("baseWarpSpeed", module.getModifiedItemAttr("subsystemBonusGallentePropulsion") * level)
diff --git a/eos/effects/subsystembonusminmatardefensive2remoteshieldtransporteramount.py b/eos/effects/subsystembonusminmatardefensive2remoteshieldtransporteramount.py
new file mode 100755
index 000000000..6a227efdf
--- /dev/null
+++ b/eos/effects/subsystembonusminmatardefensive2remoteshieldtransporteramount.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Loki Defensive - Adaptive Shielding
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Defensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Shield Transporter",
+ "shieldBonus", module.getModifiedItemAttr("subsystemBonusMinmatarDefensive2") * level)
diff --git a/eos/effects/subsystembonusminmatardefensivearmorresistance.py b/eos/effects/subsystembonusminmatardefensivearmorresistance.py
new file mode 100755
index 000000000..16417860a
--- /dev/null
+++ b/eos/effects/subsystembonusminmatardefensivearmorresistance.py
@@ -0,0 +1,8 @@
+# Used by:
+# Subsystem: Loki Defensive - Adaptive Augmenter
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Defensive Systems").level
+ for type in ("Em", "Explosive", "Kinetic", "Thermal"):
+ fit.ship.boostItemAttr("armor{0}DamageResonance".format(type),
+ module.getModifiedItemAttr("subsystemBonusMinmatarDefensive") * level)
diff --git a/eos/effects/subsystembonusminmatardefensiveshieldresistance.py b/eos/effects/subsystembonusminmatardefensiveshieldresistance.py
new file mode 100755
index 000000000..82b27cc3c
--- /dev/null
+++ b/eos/effects/subsystembonusminmatardefensiveshieldresistance.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Loki Defensive - Adaptive Shielding
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Defensive Systems").level
+ for type in ("Em", "Explosive", "Kinetic", "Thermal"):
+ fit.ship.boostItemAttr("shield{0}DamageResonance".format(type), module.getModifiedItemAttr("subsystemBonusMinmatarDefensive") * level)
diff --git a/eos/effects/subsystembonusminmatardefensivesignatureradius.py b/eos/effects/subsystembonusminmatardefensivesignatureradius.py
new file mode 100755
index 000000000..d0a25386d
--- /dev/null
+++ b/eos/effects/subsystembonusminmatardefensivesignatureradius.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Loki Defensive - Amplification Node
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Defensive Systems").level
+ fit.ship.boostItemAttr("signatureRadius", module.getModifiedItemAttr("subsystemBonusMinmatarDefensive") * level)
diff --git a/eos/effects/subsystembonusminmatardefensiveskirmishwarfare.py b/eos/effects/subsystembonusminmatardefensiveskirmishwarfare.py
new file mode 100755
index 000000000..35bbbc33c
--- /dev/null
+++ b/eos/effects/subsystembonusminmatardefensiveskirmishwarfare.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Loki Defensive - Warfare Processor
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Defensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Warfare Specialist"),
+ "commandBonus", module.getModifiedItemAttr("subsystemBonusMinmatarDefensive") * level)
diff --git a/eos/effects/subsystembonusminmatarelectronic2maxtargetingrange.py b/eos/effects/subsystembonusminmatarelectronic2maxtargetingrange.py
new file mode 100755
index 000000000..d9b660804
--- /dev/null
+++ b/eos/effects/subsystembonusminmatarelectronic2maxtargetingrange.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Loki Electronics - Dissolution Sequencer
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Electronic Systems").level
+ fit.ship.boostItemAttr("maxTargetRange", module.getModifiedItemAttr("subsystemBonusMinmatarElectronic2") * level)
diff --git a/eos/effects/subsystembonusminmatarelectronic2scanresolution.py b/eos/effects/subsystembonusminmatarelectronic2scanresolution.py
new file mode 100755
index 000000000..d835d3161
--- /dev/null
+++ b/eos/effects/subsystembonusminmatarelectronic2scanresolution.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Loki Electronics - Tactical Targeting Network
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Electronic Systems").level
+ fit.ship.boostItemAttr("scanResolution", module.getModifiedItemAttr("subsystemBonusMinmatarElectronic2") * level)
diff --git a/eos/effects/subsystembonusminmatarelectronic2tractorbeamrange.py b/eos/effects/subsystembonusminmatarelectronic2tractorbeamrange.py
new file mode 100755
index 000000000..ea2e2872d
--- /dev/null
+++ b/eos/effects/subsystembonusminmatarelectronic2tractorbeamrange.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Loki Electronics - Emergent Locus Analyzer
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Electronic Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tractor Beam",
+ "maxRange", module.getModifiedItemAttr("subsystemBonusMinmatarElectronic2") * level)
diff --git a/eos/effects/subsystembonusminmatarelectronic2tractorbeamvelocity.py b/eos/effects/subsystembonusminmatarelectronic2tractorbeamvelocity.py
new file mode 100755
index 000000000..dbcc3e594
--- /dev/null
+++ b/eos/effects/subsystembonusminmatarelectronic2tractorbeamvelocity.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Loki Electronics - Emergent Locus Analyzer
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Electronic Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tractor Beam",
+ "maxTractorVelocity", module.getModifiedItemAttr("subsystemBonusMinmatarElectronic2") * level)
diff --git a/eos/effects/subsystembonusminmatarelectronicscanprobestrength.py b/eos/effects/subsystembonusminmatarelectronicscanprobestrength.py
new file mode 100755
index 000000000..6d015de9c
--- /dev/null
+++ b/eos/effects/subsystembonusminmatarelectronicscanprobestrength.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Loki Electronics - Emergent Locus Analyzer
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Electronic Systems").level
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.group.name == "Scanner Probe",
+ "baseSensorStrength", module.getModifiedItemAttr("subsystemBonusMinmatarElectronic") * level)
diff --git a/eos/effects/subsystembonusminmatarelectronicscanstrengthladar.py b/eos/effects/subsystembonusminmatarelectronicscanstrengthladar.py
new file mode 100755
index 000000000..004d8ab2c
--- /dev/null
+++ b/eos/effects/subsystembonusminmatarelectronicscanstrengthladar.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Loki Electronics - Dissolution Sequencer
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Electronic Systems").level
+ fit.ship.boostItemAttr("scanLadarStrength", module.getModifiedItemAttr("subsystemBonusMinmatarElectronic") * level)
diff --git a/eos/effects/subsystembonusminmatarelectronicstasiswebifierrange.py b/eos/effects/subsystembonusminmatarelectronicstasiswebifierrange.py
new file mode 100755
index 000000000..140312b72
--- /dev/null
+++ b/eos/effects/subsystembonusminmatarelectronicstasiswebifierrange.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Loki Electronics - Immobility Drivers
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Electronic Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Stasis Web",
+ "maxRange", module.getModifiedItemAttr("subsystemBonusMinmatarElectronic") * level)
diff --git a/eos/effects/subsystembonusminmatarengineeringcapacitorcapacity.py b/eos/effects/subsystembonusminmatarengineeringcapacitorcapacity.py
new file mode 100755
index 000000000..343dea093
--- /dev/null
+++ b/eos/effects/subsystembonusminmatarengineeringcapacitorcapacity.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Loki Engineering - Augmented Capacitor Reservoir
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Engineering Systems").level
+ fit.ship.boostItemAttr("capacitorCapacity", module.getModifiedItemAttr("subsystemBonusMinmatarEngineering") * level)
diff --git a/eos/effects/subsystembonusminmatarengineeringcapacitorrecharge.py b/eos/effects/subsystembonusminmatarengineeringcapacitorrecharge.py
new file mode 100755
index 000000000..d09dc310a
--- /dev/null
+++ b/eos/effects/subsystembonusminmatarengineeringcapacitorrecharge.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Loki Engineering - Capacitor Regeneration Matrix
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Engineering Systems").level
+ fit.ship.boostItemAttr("rechargeRate", module.getModifiedItemAttr("subsystemBonusMinmatarEngineering") * level)
diff --git a/eos/effects/subsystembonusminmatarengineeringheatdamagereduction.py b/eos/effects/subsystembonusminmatarengineeringheatdamagereduction.py
new file mode 100755
index 000000000..e7b9d5d15
--- /dev/null
+++ b/eos/effects/subsystembonusminmatarengineeringheatdamagereduction.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Loki Engineering - Supplemental Coolant Injector
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Engineering Systems").level
+ fit.modules.filteredItemBoost(lambda mod: True, "heatDamage",
+ module.getModifiedItemAttr("subsystemBonusMinmatarEngineering") * level)
diff --git a/eos/effects/subsystembonusminmatarengineeringpoweroutput.py b/eos/effects/subsystembonusminmatarengineeringpoweroutput.py
new file mode 100755
index 000000000..265db72ac
--- /dev/null
+++ b/eos/effects/subsystembonusminmatarengineeringpoweroutput.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Loki Engineering - Power Core Multiplier
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Engineering Systems").level
+ fit.ship.boostItemAttr("powerOutput", module.getModifiedItemAttr("subsystemBonusMinmatarEngineering") * level)
diff --git a/eos/effects/subsystembonusminmataroffensive2projectileweapondamagemultiplier.py b/eos/effects/subsystembonusminmataroffensive2projectileweapondamagemultiplier.py
new file mode 100755
index 000000000..2ea19ca47
--- /dev/null
+++ b/eos/effects/subsystembonusminmataroffensive2projectileweapondamagemultiplier.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Loki Offensive - Turret Concurrence Registry
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
+ "damageMultiplier", module.getModifiedItemAttr("subsystemBonusMinmatarOffensive2") * level)
diff --git a/eos/effects/subsystembonusminmataroffensive2projectileweaponrof.py b/eos/effects/subsystembonusminmataroffensive2projectileweaponrof.py
new file mode 100755
index 000000000..f3a073002
--- /dev/null
+++ b/eos/effects/subsystembonusminmataroffensive2projectileweaponrof.py
@@ -0,0 +1,8 @@
+# Used by:
+# Subsystem: Loki Offensive - Hardpoint Efficiency Configuration
+# Subsystem: Loki Offensive - Projectile Scoping Array
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
+ "speed", module.getModifiedItemAttr("subsystemBonusMinmatarOffensive2") * level)
diff --git a/eos/effects/subsystembonusminmataroffensive3turrettracking.py b/eos/effects/subsystembonusminmataroffensive3turrettracking.py
new file mode 100755
index 000000000..fbc4723c2
--- /dev/null
+++ b/eos/effects/subsystembonusminmataroffensive3turrettracking.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Loki Offensive - Turret Concurrence Registry
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
+ "trackingSpeed", module.getModifiedItemAttr("subsystemBonusMinmatarOffensive3") * level)
diff --git a/eos/effects/subsystembonusminmataroffensiveassaultmissilelauncherrof.py b/eos/effects/subsystembonusminmataroffensiveassaultmissilelauncherrof.py
new file mode 100755
index 000000000..ddccb025d
--- /dev/null
+++ b/eos/effects/subsystembonusminmataroffensiveassaultmissilelauncherrof.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Loki Offensive - Hardpoint Efficiency Configuration
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Rapid Light",
+ "speed", module.getModifiedItemAttr("subsystemBonusMinmatarOffensive") * level)
diff --git a/eos/effects/subsystembonusminmataroffensiveheavyassaultmissilelauncherrof.py b/eos/effects/subsystembonusminmataroffensiveheavyassaultmissilelauncherrof.py
new file mode 100755
index 000000000..77f434015
--- /dev/null
+++ b/eos/effects/subsystembonusminmataroffensiveheavyassaultmissilelauncherrof.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Loki Offensive - Hardpoint Efficiency Configuration
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Heavy Assault",
+ "speed", module.getModifiedItemAttr("subsystemBonusMinmatarOffensive") * level)
diff --git a/eos/effects/subsystembonusminmataroffensiveheavymissilelauncherrof.py b/eos/effects/subsystembonusminmataroffensiveheavymissilelauncherrof.py
new file mode 100755
index 000000000..ad961934c
--- /dev/null
+++ b/eos/effects/subsystembonusminmataroffensiveheavymissilelauncherrof.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Loki Offensive - Hardpoint Efficiency Configuration
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Missile Launcher Heavy",
+ "speed", module.getModifiedItemAttr("subsystemBonusMinmatarOffensive") * level)
diff --git a/eos/effects/subsystembonusminmataroffensiveprojectileweaponfalloff.py b/eos/effects/subsystembonusminmataroffensiveprojectileweaponfalloff.py
new file mode 100755
index 000000000..c29913963
--- /dev/null
+++ b/eos/effects/subsystembonusminmataroffensiveprojectileweaponfalloff.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Loki Offensive - Projectile Scoping Array
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
+ "falloff", module.getModifiedItemAttr("subsystemBonusMinmatarOffensive") * level)
diff --git a/eos/effects/subsystembonusminmataroffensiveprojectileweaponmaxrange.py b/eos/effects/subsystembonusminmataroffensiveprojectileweaponmaxrange.py
new file mode 100755
index 000000000..912a0f770
--- /dev/null
+++ b/eos/effects/subsystembonusminmataroffensiveprojectileweaponmaxrange.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Loki Offensive - Turret Concurrence Registry
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
+ "maxRange", module.getModifiedItemAttr("subsystemBonusMinmatarOffensive") * level)
diff --git a/eos/effects/subsystembonusminmataroffensiveprojectileweaponrof.py b/eos/effects/subsystembonusminmataroffensiveprojectileweaponrof.py
new file mode 100755
index 000000000..2affe6564
--- /dev/null
+++ b/eos/effects/subsystembonusminmataroffensiveprojectileweaponrof.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Loki Offensive - Covert Reconfiguration
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Offensive Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
+ "speed", module.getModifiedItemAttr("subsystemBonusMinmatarOffensive") * level)
diff --git a/eos/effects/subsystembonusminmatarpropulsionafterburnerspeedfactor.py b/eos/effects/subsystembonusminmatarpropulsionafterburnerspeedfactor.py
new file mode 100755
index 000000000..48cac1430
--- /dev/null
+++ b/eos/effects/subsystembonusminmatarpropulsionafterburnerspeedfactor.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Loki Propulsion - Fuel Catalyst
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Propulsion Systems").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Afterburner"),
+ "speedFactor", module.getModifiedItemAttr("subsystemBonusMinmatarPropulsion") * level)
diff --git a/eos/effects/subsystembonusminmatarpropulsionagility.py b/eos/effects/subsystembonusminmatarpropulsionagility.py
new file mode 100755
index 000000000..f44eea2ed
--- /dev/null
+++ b/eos/effects/subsystembonusminmatarpropulsionagility.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystem: Loki Propulsion - Intercalated Nanofibers
+# Subsystem: Loki Propulsion - Interdiction Nullifier
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Propulsion Systems").level
+ fit.ship.boostItemAttr("agility", module.getModifiedItemAttr("subsystemBonusMinmatarPropulsion") * level)
diff --git a/eos/effects/subsystembonusminmatarpropulsionmaxvelocity.py b/eos/effects/subsystembonusminmatarpropulsionmaxvelocity.py
new file mode 100755
index 000000000..459c962f0
--- /dev/null
+++ b/eos/effects/subsystembonusminmatarpropulsionmaxvelocity.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystem: Loki Propulsion - Chassis Optimization
+type = "passive"
+def handler(fit, module, context):
+ level = fit.character.getSkill("Minmatar Propulsion Systems").level
+ fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("subsystemBonusMinmatarPropulsion") * level)
diff --git a/eos/effects/subsystembonusoffensivejumpharmonics.py b/eos/effects/subsystembonusoffensivejumpharmonics.py
new file mode 100755
index 000000000..baf2e360c
--- /dev/null
+++ b/eos/effects/subsystembonusoffensivejumpharmonics.py
@@ -0,0 +1,5 @@
+# Used by:
+# Subsystems named like: Offensive Covert Reconfiguration (4 of 4)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.forceItemAttr("jumpHarmonics", module.getModifiedItemAttr("jumpHarmonicsModifier"))
diff --git a/eos/effects/subsystembonusscanprobelaunchercpu.py b/eos/effects/subsystembonusscanprobelaunchercpu.py
new file mode 100755
index 000000000..7ef5d8341
--- /dev/null
+++ b/eos/effects/subsystembonusscanprobelaunchercpu.py
@@ -0,0 +1,6 @@
+# Used by:
+# Subsystems named like: Electronics Emergent Locus Analyzer (4 of 4)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Scan Probe Launcher",
+ "cpu", module.getModifiedItemAttr("cpuNeedBonus"))
diff --git a/eos/effects/subsystembonuswarpbubbleimmune.py b/eos/effects/subsystembonuswarpbubbleimmune.py
new file mode 100755
index 000000000..e1b9af590
--- /dev/null
+++ b/eos/effects/subsystembonuswarpbubbleimmune.py
@@ -0,0 +1,5 @@
+# Used by:
+# Subsystems named like: Propulsion Interdiction Nullifier (4 of 4)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.forceItemAttr("warpBubbleImmune", module.getModifiedItemAttr("warpBubbleImmuneModifier"))
diff --git a/eos/effects/superweaponamarr.py b/eos/effects/superweaponamarr.py
new file mode 100755
index 000000000..d9e30ccc0
--- /dev/null
+++ b/eos/effects/superweaponamarr.py
@@ -0,0 +1,5 @@
+# Used by:
+# Module: Judgement
+type = 'active'
+def handler(fit, module, context):
+ pass
diff --git a/eos/effects/superweaponcaldari.py b/eos/effects/superweaponcaldari.py
new file mode 100755
index 000000000..398ece95f
--- /dev/null
+++ b/eos/effects/superweaponcaldari.py
@@ -0,0 +1,5 @@
+# Used by:
+# Module: Oblivion
+type = 'active'
+def handler(fit, module, context):
+ pass
diff --git a/eos/effects/superweapongallente.py b/eos/effects/superweapongallente.py
new file mode 100755
index 000000000..13b0c18e4
--- /dev/null
+++ b/eos/effects/superweapongallente.py
@@ -0,0 +1,5 @@
+# Used by:
+# Module: Aurora Ominae
+type = 'active'
+def handler(fit, module, context):
+ pass
diff --git a/eos/effects/superweaponminmatar.py b/eos/effects/superweaponminmatar.py
new file mode 100755
index 000000000..5f5e91eae
--- /dev/null
+++ b/eos/effects/superweaponminmatar.py
@@ -0,0 +1,5 @@
+# Used by:
+# Module: Gjallarhorn
+type = 'active'
+def handler(fit, module, context):
+ pass
diff --git a/eos/effects/surgicalstrikedamagemultiplierbonuspostpercentdamagemultiplierlocationshipgroupenergyweapon.py b/eos/effects/surgicalstrikedamagemultiplierbonuspostpercentdamagemultiplierlocationshipgroupenergyweapon.py
new file mode 100755
index 000000000..13769cafc
--- /dev/null
+++ b/eos/effects/surgicalstrikedamagemultiplierbonuspostpercentdamagemultiplierlocationshipgroupenergyweapon.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Surgical Strike
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Weapon",
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
diff --git a/eos/effects/surgicalstrikedamagemultiplierbonuspostpercentdamagemultiplierlocationshipgrouphybridweapon.py b/eos/effects/surgicalstrikedamagemultiplierbonuspostpercentdamagemultiplierlocationshipgrouphybridweapon.py
new file mode 100755
index 000000000..f17409c31
--- /dev/null
+++ b/eos/effects/surgicalstrikedamagemultiplierbonuspostpercentdamagemultiplierlocationshipgrouphybridweapon.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Surgical Strike
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Hybrid Weapon",
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
diff --git a/eos/effects/surgicalstrikedamagemultiplierbonuspostpercentdamagemultiplierlocationshipgroupprojectileweapon.py b/eos/effects/surgicalstrikedamagemultiplierbonuspostpercentdamagemultiplierlocationshipgroupprojectileweapon.py
new file mode 100755
index 000000000..2d407f04c
--- /dev/null
+++ b/eos/effects/surgicalstrikedamagemultiplierbonuspostpercentdamagemultiplierlocationshipgroupprojectileweapon.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Surgical Strike
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Projectile Weapon",
+ "damageMultiplier", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)
diff --git a/eos/effects/surgicalstrikedamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringgunnery.py b/eos/effects/surgicalstrikedamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringgunnery.py
new file mode 100755
index 000000000..7aa2e92a0
--- /dev/null
+++ b/eos/effects/surgicalstrikedamagemultiplierbonuspostpercentdamagemultiplierlocationshipmodulesrequiringgunnery.py
@@ -0,0 +1,7 @@
+# Used by:
+# Implants named like: Cerebral Accelerator (3 of 3)
+# Implants named like: Eifyr and Co. 'Gunslinger' Surgical Strike SS (6 of 6)
+type = "passive"
+def handler(fit, implant, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
+ "damageMultiplier", implant.getModifiedItemAttr("damageMultiplierBonus"))
diff --git a/eos/effects/surgicalstrikefalloffbonuspostpercentfallofflocationshipmodulesrequiringgunnery.py b/eos/effects/surgicalstrikefalloffbonuspostpercentfallofflocationshipmodulesrequiringgunnery.py
new file mode 100755
index 000000000..3b0e82729
--- /dev/null
+++ b/eos/effects/surgicalstrikefalloffbonuspostpercentfallofflocationshipmodulesrequiringgunnery.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implants named like: Sooth Sayer Booster (4 of 4)
+# Implants named like: Zainou 'Deadeye' Trajectory Analysis TA (6 of 6)
+# Skill: Trajectory Analysis
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
+ "falloff", container.getModifiedItemAttr("falloffBonus") * level)
diff --git a/eos/effects/surveyscanspeedbonuspostpercentdurationlocationshipmodulesrequiringelectronics.py b/eos/effects/surveyscanspeedbonuspostpercentdurationlocationshipmodulesrequiringelectronics.py
new file mode 100755
index 000000000..bf713b7b6
--- /dev/null
+++ b/eos/effects/surveyscanspeedbonuspostpercentdurationlocationshipmodulesrequiringelectronics.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules named like: Signal Focusing Kit (8 of 8)
+# Skill: Survey
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Electronics"),
+ "duration", container.getModifiedItemAttr("scanspeedBonus") * level)
diff --git a/eos/effects/systemagility.py b/eos/effects/systemagility.py
new file mode 100755
index 000000000..a1a1c4baa
--- /dev/null
+++ b/eos/effects/systemagility.py
@@ -0,0 +1,6 @@
+# Used by:
+# Celestials named like: Black Hole Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.ship.multiplyItemAttr("agility", beacon.getModifiedItemAttr("agilityMultiplier"))
diff --git a/eos/effects/systemaoevelocity.py b/eos/effects/systemaoevelocity.py
new file mode 100755
index 000000000..55ba48437
--- /dev/null
+++ b/eos/effects/systemaoevelocity.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Magnetar Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "aoeVelocity", beacon.getModifiedItemAttr("aoeVelocityMultiplier"))
diff --git a/eos/effects/systemarmoremresistance.py b/eos/effects/systemarmoremresistance.py
new file mode 100755
index 000000000..83b8073f8
--- /dev/null
+++ b/eos/effects/systemarmoremresistance.py
@@ -0,0 +1,9 @@
+# Used by:
+# Celestials named like: Incursion Effect (2 of 2)
+# Celestials named like: Pulsar Effect Beacon Class (6 of 6)
+# Celestials named like: Wolf Rayet Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.ship.boostItemAttr("armorEmDamageResonance", beacon.getModifiedItemAttr("armorEmDamageResistanceBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/systemarmorexplosiveresistance.py b/eos/effects/systemarmorexplosiveresistance.py
new file mode 100755
index 000000000..b3e7abc8a
--- /dev/null
+++ b/eos/effects/systemarmorexplosiveresistance.py
@@ -0,0 +1,9 @@
+# Used by:
+# Celestials named like: Incursion Effect (2 of 2)
+# Celestials named like: Pulsar Effect Beacon Class (6 of 6)
+# Celestials named like: Wolf Rayet Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.ship.boostItemAttr("armorExplosiveDamageResonance", beacon.getModifiedItemAttr("armorExplosiveDamageResistanceBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/systemarmorkineticresistance.py b/eos/effects/systemarmorkineticresistance.py
new file mode 100755
index 000000000..850929406
--- /dev/null
+++ b/eos/effects/systemarmorkineticresistance.py
@@ -0,0 +1,9 @@
+# Used by:
+# Celestials named like: Incursion Effect (2 of 2)
+# Celestials named like: Pulsar Effect Beacon Class (6 of 6)
+# Celestials named like: Wolf Rayet Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.ship.boostItemAttr("armorKineticDamageResonance", beacon.getModifiedItemAttr("armorKineticDamageResistanceBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/systemarmorremoterepairamount.py b/eos/effects/systemarmorremoterepairamount.py
new file mode 100755
index 000000000..6f117214f
--- /dev/null
+++ b/eos/effects/systemarmorremoterepairamount.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Cataclysmic Variable Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Armor Repair Projector",
+ "armorDamageAmount", module.getModifiedItemAttr("armorDamageAmountMultiplierRemote"))
diff --git a/eos/effects/systemarmorrepairamount.py b/eos/effects/systemarmorrepairamount.py
new file mode 100755
index 000000000..c549eee20
--- /dev/null
+++ b/eos/effects/systemarmorrepairamount.py
@@ -0,0 +1,8 @@
+# Used by:
+# Celestials named like: Cataclysmic Variable Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Armor Repair Unit",
+ "armorDamageAmount", module.getModifiedItemAttr("armorDamageAmountMultiplier"),
+ stackingPenalties = True)
diff --git a/eos/effects/systemarmorthermalresistance.py b/eos/effects/systemarmorthermalresistance.py
new file mode 100755
index 000000000..bdd602dc1
--- /dev/null
+++ b/eos/effects/systemarmorthermalresistance.py
@@ -0,0 +1,9 @@
+# Used by:
+# Celestials named like: Incursion Effect (2 of 2)
+# Celestials named like: Pulsar Effect Beacon Class (6 of 6)
+# Celestials named like: Wolf Rayet Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.ship.boostItemAttr("armorThermalDamageResonance", beacon.getModifiedItemAttr("armorThermalDamageResistanceBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/systemcapacitorcapacity.py b/eos/effects/systemcapacitorcapacity.py
new file mode 100755
index 000000000..c3660e9b8
--- /dev/null
+++ b/eos/effects/systemcapacitorcapacity.py
@@ -0,0 +1,6 @@
+# Used by:
+# Celestials named like: Cataclysmic Variable Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.ship.multiplyItemAttr("capacitorCapacity", beacon.getModifiedItemAttr("capacitorCapacityMultiplierSystem"))
diff --git a/eos/effects/systemcapacitorrecharge.py b/eos/effects/systemcapacitorrecharge.py
new file mode 100755
index 000000000..91c47942e
--- /dev/null
+++ b/eos/effects/systemcapacitorrecharge.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Cataclysmic Variable Effect Beacon Class (6 of 6)
+# Celestials named like: Pulsar Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.ship.multiplyItemAttr("rechargeRate", beacon.getModifiedItemAttr("rechargeRateMultiplier"))
diff --git a/eos/effects/systemdamagedrones.py b/eos/effects/systemdamagedrones.py
new file mode 100755
index 000000000..e466beeea
--- /dev/null
+++ b/eos/effects/systemdamagedrones.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Magnetar Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.drones.filteredItemMultiply(lambda drone: drone.item.requiresSkill("Drones"),
+ "damageMultiplier", beacon.getModifiedItemAttr("damageMultiplierMultiplier"))
diff --git a/eos/effects/systemdamageemmissiles.py b/eos/effects/systemdamageemmissiles.py
new file mode 100755
index 000000000..913dc9cf5
--- /dev/null
+++ b/eos/effects/systemdamageemmissiles.py
@@ -0,0 +1,8 @@
+# Used by:
+# Celestials named like: Magnetar Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "emDamage", beacon.getModifiedItemAttr("damageMultiplierMultiplier"),
+ stackingPenalties = True)
diff --git a/eos/effects/systemdamageexplosivemissiles.py b/eos/effects/systemdamageexplosivemissiles.py
new file mode 100755
index 000000000..6a58f3b98
--- /dev/null
+++ b/eos/effects/systemdamageexplosivemissiles.py
@@ -0,0 +1,8 @@
+# Used by:
+# Celestials named like: Magnetar Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "explosiveDamage", beacon.getModifiedItemAttr("damageMultiplierMultiplier"),
+ stackingPenalties = True)
diff --git a/eos/effects/systemdamagefighters.py b/eos/effects/systemdamagefighters.py
new file mode 100755
index 000000000..07ef55f1d
--- /dev/null
+++ b/eos/effects/systemdamagefighters.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Magnetar Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.drones.filteredItemMultiply(lambda drone: drone.item.requiresSkill("Fighters"),
+ "damageMultiplier", beacon.getModifiedItemAttr("damageMultiplierMultiplier"))
diff --git a/eos/effects/systemdamagekineticmissiles.py b/eos/effects/systemdamagekineticmissiles.py
new file mode 100755
index 000000000..d72737643
--- /dev/null
+++ b/eos/effects/systemdamagekineticmissiles.py
@@ -0,0 +1,8 @@
+# Used by:
+# Celestials named like: Magnetar Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "kineticDamage", beacon.getModifiedItemAttr("damageMultiplierMultiplier"),
+ stackingPenalties = True)
diff --git a/eos/effects/systemdamagemultipliergunnery.py b/eos/effects/systemdamagemultipliergunnery.py
new file mode 100755
index 000000000..606412de1
--- /dev/null
+++ b/eos/effects/systemdamagemultipliergunnery.py
@@ -0,0 +1,8 @@
+# Used by:
+# Celestials named like: Magnetar Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill("Gunnery"),
+ "damageMultiplier", beacon.getModifiedItemAttr("damageMultiplierMultiplier"),
+ stackingPenalties = True)
diff --git a/eos/effects/systemdamagethermalmissiles.py b/eos/effects/systemdamagethermalmissiles.py
new file mode 100755
index 000000000..84ede14dc
--- /dev/null
+++ b/eos/effects/systemdamagethermalmissiles.py
@@ -0,0 +1,8 @@
+# Used by:
+# Celestials named like: Magnetar Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "thermalDamage", beacon.getModifiedItemAttr("damageMultiplierMultiplier"),
+ stackingPenalties = True)
diff --git a/eos/effects/systemdronecontrolrange.py b/eos/effects/systemdronecontrolrange.py
new file mode 100755
index 000000000..25042b4f8
--- /dev/null
+++ b/eos/effects/systemdronecontrolrange.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Black Hole Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ amount = beacon.getModifiedItemAttr("droneRangeMultiplier")
+ fit.extraAttributes.multiply("droneControlRange", amount)
diff --git a/eos/effects/systemdronespeed.py b/eos/effects/systemdronespeed.py
new file mode 100755
index 000000000..ac8517fde
--- /dev/null
+++ b/eos/effects/systemdronespeed.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Magnetar Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.drones.filteredItemMultiply(lambda drone: True,
+ "maxVelocity", beacon.getModifiedItemAttr("maxDroneVelocityMultiplier"))
diff --git a/eos/effects/systemfalloffrangegunnery.py b/eos/effects/systemfalloffrangegunnery.py
new file mode 100755
index 000000000..dbce30d32
--- /dev/null
+++ b/eos/effects/systemfalloffrangegunnery.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Black Hole Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill("Gunnery"),
+ "falloff", module.getModifiedItemAttr("fallofMultiplier"))
diff --git a/eos/effects/systemheatdamage.py b/eos/effects/systemheatdamage.py
new file mode 100755
index 000000000..e909a370e
--- /dev/null
+++ b/eos/effects/systemheatdamage.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Red Giant Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: "heatDamage" in mod.itemModifiedAttributes,
+ "heatDamage", module.getModifiedItemAttr("heatDamageMultiplier"))
diff --git a/eos/effects/systemmaxvelocity.py b/eos/effects/systemmaxvelocity.py
new file mode 100755
index 000000000..e8c0dda29
--- /dev/null
+++ b/eos/effects/systemmaxvelocity.py
@@ -0,0 +1,6 @@
+# Used by:
+# Celestials named like: Black Hole Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.ship.multiplyItemAttr("maxVelocity", beacon.getModifiedItemAttr("maxVelocityMultiplier"))
diff --git a/eos/effects/systemmissilevelocity.py b/eos/effects/systemmissilevelocity.py
new file mode 100755
index 000000000..af1cc379b
--- /dev/null
+++ b/eos/effects/systemmissilevelocity.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Black Hole Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
+ "maxVelocity", beacon.getModifiedItemAttr("missileVelocityMultiplier"))
diff --git a/eos/effects/systemoptimalrangegunnery.py b/eos/effects/systemoptimalrangegunnery.py
new file mode 100755
index 000000000..43dad5885
--- /dev/null
+++ b/eos/effects/systemoptimalrangegunnery.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Black Hole Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill("Gunnery"),
+ "maxRange", module.getModifiedItemAttr("maxRangeMultiplier"))
diff --git a/eos/effects/systemoverloadarmor.py b/eos/effects/systemoverloadarmor.py
new file mode 100755
index 000000000..f0b3b2a96
--- /dev/null
+++ b/eos/effects/systemoverloadarmor.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Red Giant Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: "overloadArmorDamageAmount" in mod.itemModifiedAttributes,
+ "overloadArmorDamageAmount", module.getModifiedItemAttr("overloadBonusMultiplier"))
diff --git a/eos/effects/systemoverloaddamagemodifier.py b/eos/effects/systemoverloaddamagemodifier.py
new file mode 100755
index 000000000..fd46ecb58
--- /dev/null
+++ b/eos/effects/systemoverloaddamagemodifier.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Red Giant Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: "overloadDamageModifier" in mod.itemModifiedAttributes,
+ "overloadDamageModifier", module.getModifiedItemAttr("overloadBonusMultiplier"))
diff --git a/eos/effects/systemoverloaddurationbonus.py b/eos/effects/systemoverloaddurationbonus.py
new file mode 100755
index 000000000..7bfd2768b
--- /dev/null
+++ b/eos/effects/systemoverloaddurationbonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Red Giant Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: "overloadSelfDurationBonus" in mod.itemModifiedAttributes,
+ "overloadSelfDurationBonus", module.getModifiedItemAttr("overloadBonusMultiplier"))
diff --git a/eos/effects/systemoverloadeccmstrength.py b/eos/effects/systemoverloadeccmstrength.py
new file mode 100755
index 000000000..979cdeb45
--- /dev/null
+++ b/eos/effects/systemoverloadeccmstrength.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Red Giant Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: "overloadECCMStrenghtBonus" in mod.itemModifiedAttributes,
+ "overloadECCMStrenghtBonus", module.getModifiedItemAttr("overloadBonusMultiplier"))
diff --git a/eos/effects/systemoverloadecmstrength.py b/eos/effects/systemoverloadecmstrength.py
new file mode 100755
index 000000000..b78d32757
--- /dev/null
+++ b/eos/effects/systemoverloadecmstrength.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Red Giant Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: "overloadECMStrenghtBonus" in mod.itemModifiedAttributes,
+ "overloadECMStrenghtBonus", module.getModifiedItemAttr("overloadBonusMultiplier"))
diff --git a/eos/effects/systemoverloadhardening.py b/eos/effects/systemoverloadhardening.py
new file mode 100755
index 000000000..348e679c0
--- /dev/null
+++ b/eos/effects/systemoverloadhardening.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Red Giant Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: "overloadHardeningBonus" in mod.itemModifiedAttributes,
+ "overloadHardeningBonus", module.getModifiedItemAttr("overloadBonusMultiplier"))
diff --git a/eos/effects/systemoverloadrange.py b/eos/effects/systemoverloadrange.py
new file mode 100755
index 000000000..6245be9da
--- /dev/null
+++ b/eos/effects/systemoverloadrange.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Red Giant Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: "overloadRangeBonus" in mod.itemModifiedAttributes,
+ "overloadRangeBonus", module.getModifiedItemAttr("overloadBonusMultiplier"))
diff --git a/eos/effects/systemoverloadrof.py b/eos/effects/systemoverloadrof.py
new file mode 100755
index 000000000..757590488
--- /dev/null
+++ b/eos/effects/systemoverloadrof.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Red Giant Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: "overloadRofBonus" in mod.itemModifiedAttributes,
+ "overloadRofBonus", module.getModifiedItemAttr("overloadBonusMultiplier"))
diff --git a/eos/effects/systemoverloadselfduration.py b/eos/effects/systemoverloadselfduration.py
new file mode 100755
index 000000000..7bfd2768b
--- /dev/null
+++ b/eos/effects/systemoverloadselfduration.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Red Giant Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: "overloadSelfDurationBonus" in mod.itemModifiedAttributes,
+ "overloadSelfDurationBonus", module.getModifiedItemAttr("overloadBonusMultiplier"))
diff --git a/eos/effects/systemoverloadshieldbonus.py b/eos/effects/systemoverloadshieldbonus.py
new file mode 100755
index 000000000..b88dee809
--- /dev/null
+++ b/eos/effects/systemoverloadshieldbonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Red Giant Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: "overloadShieldBonus" in mod.itemModifiedAttributes,
+ "overloadShieldBonus", module.getModifiedItemAttr("overloadBonusMultiplier"))
diff --git a/eos/effects/systemoverloadspeedfactor.py b/eos/effects/systemoverloadspeedfactor.py
new file mode 100755
index 000000000..aaf53e831
--- /dev/null
+++ b/eos/effects/systemoverloadspeedfactor.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Red Giant Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: "overloadSpeedFactorBonus" in mod.itemModifiedAttributes,
+ "overloadSpeedFactorBonus", module.getModifiedItemAttr("overloadBonusMultiplier"))
diff --git a/eos/effects/systemrocketemdamage.py b/eos/effects/systemrocketemdamage.py
new file mode 100755
index 000000000..39cfa352b
--- /dev/null
+++ b/eos/effects/systemrocketemdamage.py
@@ -0,0 +1,8 @@
+# Used by:
+# Celestials named like: Wolf Rayet Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"),
+ "emDamage", beacon.getModifiedItemAttr("smallWeaponDamageMultiplier"),
+ stackingPenalties = True)
diff --git a/eos/effects/systemrocketexplosivedamage.py b/eos/effects/systemrocketexplosivedamage.py
new file mode 100755
index 000000000..53440959c
--- /dev/null
+++ b/eos/effects/systemrocketexplosivedamage.py
@@ -0,0 +1,8 @@
+# Used by:
+# Celestials named like: Wolf Rayet Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill("Rockets"),
+ "explosiveDamage", beacon.getModifiedItemAttr("smallWeaponDamageMultiplier"),
+ stackingPenalties = True)
diff --git a/eos/effects/systemrocketkineticdamage.py b/eos/effects/systemrocketkineticdamage.py
new file mode 100755
index 000000000..1e64e6355
--- /dev/null
+++ b/eos/effects/systemrocketkineticdamage.py
@@ -0,0 +1,8 @@
+# Used by:
+# Celestials named like: Wolf Rayet Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill("Rockets"),
+ "kineticDamage", beacon.getModifiedItemAttr("smallWeaponDamageMultiplier"),
+ stackingPenalties = True)
diff --git a/eos/effects/systemrocketthermaldamage.py b/eos/effects/systemrocketthermaldamage.py
new file mode 100755
index 000000000..5590f3995
--- /dev/null
+++ b/eos/effects/systemrocketthermaldamage.py
@@ -0,0 +1,8 @@
+# Used by:
+# Celestials named like: Wolf Rayet Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill("Rockets"),
+ "thermalDamage", beacon.getModifiedItemAttr("smallWeaponDamageMultiplier"),
+ stackingPenalties = True)
diff --git a/eos/effects/systemscandurationmodulemodifier.py b/eos/effects/systemscandurationmodulemodifier.py
new file mode 100644
index 000000000..ab4d7c5c7
--- /dev/null
+++ b/eos/effects/systemscandurationmodulemodifier.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules from group: Scanning Upgrade Time (2 of 2)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Astrometrics"),
+ "duration", module.getModifiedItemAttr("scanDurationBonus"))
diff --git a/eos/effects/systemscandurationskillastrometrics.py b/eos/effects/systemscandurationskillastrometrics.py
new file mode 100644
index 000000000..c2ef318e4
--- /dev/null
+++ b/eos/effects/systemscandurationskillastrometrics.py
@@ -0,0 +1,9 @@
+# Used by:
+# Implants named like: Poteque 'Prospector' Astrometric Acquisition AQ (3 of 3)
+# Skill: Astrometric Acquisition
+# Skill: Astrometrics
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Astrometrics"),
+ "duration", container.getModifiedItemAttr("durationBonus") * level)
diff --git a/eos/effects/systemshieldemresistance.py b/eos/effects/systemshieldemresistance.py
new file mode 100755
index 000000000..4b25d168d
--- /dev/null
+++ b/eos/effects/systemshieldemresistance.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Wolf Rayet Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.ship.boostItemAttr("shieldEmDamageResonance", beacon.getModifiedItemAttr("shieldEmDamageResistanceBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/systemshieldexplosiveresistance.py b/eos/effects/systemshieldexplosiveresistance.py
new file mode 100755
index 000000000..a9c51dbb1
--- /dev/null
+++ b/eos/effects/systemshieldexplosiveresistance.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Wolf Rayet Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.ship.boostItemAttr("shieldExplosiveDamageResonance", beacon.getModifiedItemAttr("shieldExplosiveDamageResistanceBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/systemshieldhp.py b/eos/effects/systemshieldhp.py
new file mode 100755
index 000000000..34dcc73d6
--- /dev/null
+++ b/eos/effects/systemshieldhp.py
@@ -0,0 +1,6 @@
+# Used by:
+# Celestials named like: Pulsar Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.ship.multiplyItemAttr("shieldCapacity", beacon.getModifiedItemAttr("shieldCapacityMultiplier"))
diff --git a/eos/effects/systemshieldkineticresistance.py b/eos/effects/systemshieldkineticresistance.py
new file mode 100755
index 000000000..5661a9bff
--- /dev/null
+++ b/eos/effects/systemshieldkineticresistance.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Wolf Rayet Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.ship.boostItemAttr("shieldKineticDamageResonance", beacon.getModifiedItemAttr("shieldKineticDamageResistanceBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/systemshieldremoterepairamount.py b/eos/effects/systemshieldremoterepairamount.py
new file mode 100755
index 000000000..77a4a420f
--- /dev/null
+++ b/eos/effects/systemshieldremoterepairamount.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Cataclysmic Variable Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Shield Transporter",
+ "shieldBonus", module.getModifiedItemAttr("shieldBonusMultiplierRemote"))
diff --git a/eos/effects/systemshieldthermalresistance.py b/eos/effects/systemshieldthermalresistance.py
new file mode 100755
index 000000000..4d9febe86
--- /dev/null
+++ b/eos/effects/systemshieldthermalresistance.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Wolf Rayet Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.ship.boostItemAttr("shieldThermalDamageResonance", beacon.getModifiedItemAttr("shieldThermalDamageResistanceBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/systemsignatureradius.py b/eos/effects/systemsignatureradius.py
new file mode 100755
index 000000000..14f8e4ae5
--- /dev/null
+++ b/eos/effects/systemsignatureradius.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Pulsar Effect Beacon Class (6 of 6)
+# Celestials named like: Wolf Rayet Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.ship.multiplyItemAttr("signatureRadius", beacon.getModifiedItemAttr("signatureRadiusMultiplier"))
diff --git a/eos/effects/systemsmallenergydamage.py b/eos/effects/systemsmallenergydamage.py
new file mode 100755
index 000000000..203e77640
--- /dev/null
+++ b/eos/effects/systemsmallenergydamage.py
@@ -0,0 +1,8 @@
+# Used by:
+# Celestials named like: Wolf Rayet Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill("Small Energy Turret"),
+ "damageMultiplier", module.getModifiedItemAttr("smallWeaponDamageMultiplier"),
+ stackingPenalties = True)
diff --git a/eos/effects/systemsmallhybriddamage.py b/eos/effects/systemsmallhybriddamage.py
new file mode 100755
index 000000000..21ce24ec9
--- /dev/null
+++ b/eos/effects/systemsmallhybriddamage.py
@@ -0,0 +1,8 @@
+# Used by:
+# Celestials named like: Wolf Rayet Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill("Small Hybrid Turret"),
+ "damageMultiplier", module.getModifiedItemAttr("smallWeaponDamageMultiplier"),
+ stackingPenalties = True)
diff --git a/eos/effects/systemsmallprojectiledamage.py b/eos/effects/systemsmallprojectiledamage.py
new file mode 100755
index 000000000..11632a7c0
--- /dev/null
+++ b/eos/effects/systemsmallprojectiledamage.py
@@ -0,0 +1,8 @@
+# Used by:
+# Celestials named like: Wolf Rayet Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill("Small Projectile Turret"),
+ "damageMultiplier", module.getModifiedItemAttr("smallWeaponDamageMultiplier"),
+ stackingPenalties = True)
diff --git a/eos/effects/systemsmartbombemdamage.py b/eos/effects/systemsmartbombemdamage.py
new file mode 100755
index 000000000..81ee6e8e7
--- /dev/null
+++ b/eos/effects/systemsmartbombemdamage.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Red Giant Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Smart Bomb",
+ "emDamage", module.getModifiedItemAttr("smartbombDamageMultiplier"))
diff --git a/eos/effects/systemsmartbombexplosivedamage.py b/eos/effects/systemsmartbombexplosivedamage.py
new file mode 100755
index 000000000..b998ec2a8
--- /dev/null
+++ b/eos/effects/systemsmartbombexplosivedamage.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Red Giant Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Smart Bomb",
+ "explosiveDamage", module.getModifiedItemAttr("smartbombDamageMultiplier"))
diff --git a/eos/effects/systemsmartbombkineticdamage.py b/eos/effects/systemsmartbombkineticdamage.py
new file mode 100755
index 000000000..4ba13d3ef
--- /dev/null
+++ b/eos/effects/systemsmartbombkineticdamage.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Red Giant Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Smart Bomb",
+ "kineticDamage", module.getModifiedItemAttr("smartbombDamageMultiplier"))
diff --git a/eos/effects/systemsmartbombrange.py b/eos/effects/systemsmartbombrange.py
new file mode 100755
index 000000000..9b2d52e79
--- /dev/null
+++ b/eos/effects/systemsmartbombrange.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Red Giant Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Smart Bomb",
+ "empFieldRange", module.getModifiedItemAttr("empFieldRangeMultiplier"))
diff --git a/eos/effects/systemsmartbombthermaldamage.py b/eos/effects/systemsmartbombthermaldamage.py
new file mode 100755
index 000000000..5ecfbbabf
--- /dev/null
+++ b/eos/effects/systemsmartbombthermaldamage.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Red Giant Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Smart Bomb",
+ "thermalDamage", module.getModifiedItemAttr("smartbombDamageMultiplier"))
diff --git a/eos/effects/systemstandardmissileemdamage.py b/eos/effects/systemstandardmissileemdamage.py
new file mode 100755
index 000000000..8466e9ff6
--- /dev/null
+++ b/eos/effects/systemstandardmissileemdamage.py
@@ -0,0 +1,8 @@
+# Used by:
+# Celestials named like: Wolf Rayet Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill("Light Missiles"),
+ "emDamage", beacon.getModifiedItemAttr("smallWeaponDamageMultiplier"),
+ stackingPenalties = True)
diff --git a/eos/effects/systemstandardmissileexplosivedamage.py b/eos/effects/systemstandardmissileexplosivedamage.py
new file mode 100755
index 000000000..f5aaa26bd
--- /dev/null
+++ b/eos/effects/systemstandardmissileexplosivedamage.py
@@ -0,0 +1,8 @@
+# Used by:
+# Celestials named like: Wolf Rayet Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill("Light Missiles"),
+ "explosiveDamage", beacon.getModifiedItemAttr("smallWeaponDamageMultiplier"),
+ stackingPenalties = True)
diff --git a/eos/effects/systemstandardmissilekineticdamage.py b/eos/effects/systemstandardmissilekineticdamage.py
new file mode 100755
index 000000000..708895b0f
--- /dev/null
+++ b/eos/effects/systemstandardmissilekineticdamage.py
@@ -0,0 +1,8 @@
+# Used by:
+# Celestials named like: Wolf Rayet Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill("Light Missiles"),
+ "kineticDamage", beacon.getModifiedItemAttr("smallWeaponDamageMultiplier"),
+ stackingPenalties = True)
diff --git a/eos/effects/systemstandardmissilethermaldamage.py b/eos/effects/systemstandardmissilethermaldamage.py
new file mode 100755
index 000000000..e1ce06e11
--- /dev/null
+++ b/eos/effects/systemstandardmissilethermaldamage.py
@@ -0,0 +1,8 @@
+# Used by:
+# Celestials named like: Wolf Rayet Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill("Light Missiles"),
+ "thermalDamage", beacon.getModifiedItemAttr("smallWeaponDamageMultiplier"),
+ stackingPenalties = True)
diff --git a/eos/effects/systemtargetingrange.py b/eos/effects/systemtargetingrange.py
new file mode 100755
index 000000000..3d3269d47
--- /dev/null
+++ b/eos/effects/systemtargetingrange.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Magnetar Effect Beacon Class (6 of 6)
+# Celestials named like: Pulsar Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, beacon, context):
+ fit.ship.multiplyItemAttr("maxTargetRange", beacon.getModifiedItemAttr("maxTargetRangeMultiplier"))
diff --git a/eos/effects/systemtracking.py b/eos/effects/systemtracking.py
new file mode 100755
index 000000000..7e4422747
--- /dev/null
+++ b/eos/effects/systemtracking.py
@@ -0,0 +1,7 @@
+# Used by:
+# Celestials named like: Magnetar Effect Beacon Class (6 of 6)
+runTime = "early"
+type = ("projected", "offline")
+def handler(fit, module, context):
+ fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill("Gunnery"),
+ "trackingSpeed", module.getModifiedItemAttr("trackingSpeedMultiplier"))
diff --git a/eos/effects/tacticalshieldmanipulationskillboostuniformitybonus.py b/eos/effects/tacticalshieldmanipulationskillboostuniformitybonus.py
new file mode 100755
index 000000000..7e9c27cd4
--- /dev/null
+++ b/eos/effects/tacticalshieldmanipulationskillboostuniformitybonus.py
@@ -0,0 +1,5 @@
+# Used by:
+# Skill: Tactical Shield Manipulation
+type = "passive"
+def handler(fit, skill, context):
+ fit.ship.increaseItemAttr("shieldUniformity", skill.getModifiedItemAttr("uniformityBonus") * skill.level)
diff --git a/eos/effects/targetarmorrepair.py b/eos/effects/targetarmorrepair.py
new file mode 100755
index 000000000..87fe5921a
--- /dev/null
+++ b/eos/effects/targetarmorrepair.py
@@ -0,0 +1,10 @@
+# Used by:
+# Modules from group: Armor Repair Projector (38 of 38)
+# Drones named like: Armor Maintenance Bot (6 of 6)
+# Module: QA Remote Armor Repair System - 5 Players
+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/targetattack.py b/eos/effects/targetattack.py
new file mode 100755
index 000000000..054e11c20
--- /dev/null
+++ b/eos/effects/targetattack.py
@@ -0,0 +1,8 @@
+# Used by:
+# Drones from group: Combat Drone (73 of 73)
+# Drones from group: Fighter Drone (4 of 4)
+# Modules from group: Energy Weapon (183 of 183)
+type = 'active'
+def handler(fit, module, context):
+ # Set reload time to 1 second
+ module.reloadTime = 1000
diff --git a/eos/effects/targetbreaker.py b/eos/effects/targetbreaker.py
new file mode 100755
index 000000000..40fd3299b
--- /dev/null
+++ b/eos/effects/targetbreaker.py
@@ -0,0 +1,5 @@
+# Used by:
+# Module: Target Spectrum Breaker
+type = "active"
+def handler(fit, module, context):
+ pass
diff --git a/eos/effects/targetgunnerymaxrangeandtrackingspeedandfalloffbonushostile.py b/eos/effects/targetgunnerymaxrangeandtrackingspeedandfalloffbonushostile.py
new file mode 100755
index 000000000..e45539d27
--- /dev/null
+++ b/eos/effects/targetgunnerymaxrangeandtrackingspeedandfalloffbonushostile.py
@@ -0,0 +1,14 @@
+# Used by:
+# Modules from group: Tracking Disruptor (10 of 10)
+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)
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
+ "maxRange", module.getModifiedItemAttr("maxRangeBonus"),
+ stackingPenalties = True)
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
+ "falloff", module.getModifiedItemAttr("falloffBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/targetgunnerymaxrangefallofftrackingspeedbonusassistance.py b/eos/effects/targetgunnerymaxrangefallofftrackingspeedbonusassistance.py
new file mode 100755
index 000000000..d62d05969
--- /dev/null
+++ b/eos/effects/targetgunnerymaxrangefallofftrackingspeedbonusassistance.py
@@ -0,0 +1,14 @@
+# Used by:
+# Modules from group: Tracking Link (10 of 10)
+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)
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
+ "maxRange", module.getModifiedItemAttr("maxRangeBonus"),
+ stackingPenalties = True)
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
+ "falloff", module.getModifiedItemAttr("falloffBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/targethostiles.py b/eos/effects/targethostiles.py
new file mode 100755
index 000000000..083c4c17e
--- /dev/null
+++ b/eos/effects/targethostiles.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules from group: Automated Targeting System (6 of 6)
+type = "active"
+def handler(fit, module, context):
+ # This effect enables the ACTIVE state for auto targeting systems.
+ pass
diff --git a/eos/effects/targetingmaxtargetbonusmodaddmaxlockedtargetslocationchar.py b/eos/effects/targetingmaxtargetbonusmodaddmaxlockedtargetslocationchar.py
new file mode 100755
index 000000000..5d5ed1a2a
--- /dev/null
+++ b/eos/effects/targetingmaxtargetbonusmodaddmaxlockedtargetslocationchar.py
@@ -0,0 +1,7 @@
+# Used by:
+# Skill: Multitasking
+# Skill: Targeting
+type = "passive"
+def handler(fit, skill, context):
+ amount = skill.getModifiedItemAttr("maxTargetBonus") * skill.level
+ fit.extraAttributes.increase("maxTargetsLockedFromSkills", amount)
diff --git a/eos/effects/targetmaxtargetrangeandscanresolutionbonusassistance.py b/eos/effects/targetmaxtargetrangeandscanresolutionbonusassistance.py
new file mode 100755
index 000000000..b0633ded2
--- /dev/null
+++ b/eos/effects/targetmaxtargetrangeandscanresolutionbonusassistance.py
@@ -0,0 +1,11 @@
+# Used by:
+# Modules from group: Remote Sensor Booster (8 of 8)
+type= "projected", "active"
+def handler(fit, module, context):
+ if "projected" not in context:
+ return
+
+ fit.ship.boostItemAttr("maxTargetRange", module.getModifiedItemAttr("maxTargetRangeBonus"),
+ stackingPenalties = True)
+ fit.ship.boostItemAttr("scanResolution", module.getModifiedItemAttr("scanResolutionBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/targetmaxtargetrangeandscanresolutionbonushostile.py b/eos/effects/targetmaxtargetrangeandscanresolutionbonushostile.py
new file mode 100755
index 000000000..014ffc2d6
--- /dev/null
+++ b/eos/effects/targetmaxtargetrangeandscanresolutionbonushostile.py
@@ -0,0 +1,10 @@
+# Used by:
+# Modules from group: Remote Sensor Damper (9 of 9)
+type= "projected", "active"
+def handler(fit, module, context):
+ if "projected" not in context:
+ return
+ fit.ship.boostItemAttr("maxTargetRange", module.getModifiedItemAttr("maxTargetRangeBonus"),
+ stackingPenalties = True)
+ fit.ship.boostItemAttr("scanResolution", module.getModifiedItemAttr("scanResolutionBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/thermalshieldcompensationhardeningbonusgroupshieldamp.py b/eos/effects/thermalshieldcompensationhardeningbonusgroupshieldamp.py
new file mode 100755
index 000000000..73481cb03
--- /dev/null
+++ b/eos/effects/thermalshieldcompensationhardeningbonusgroupshieldamp.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Thermic Shield Compensation
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Shield Amplifier",
+ "thermalDamageResistanceBonus", skill.getModifiedItemAttr("hardeningBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/thermicarmorcompensationhardeningbonusgrouparmorcoating.py b/eos/effects/thermicarmorcompensationhardeningbonusgrouparmorcoating.py
new file mode 100755
index 000000000..35ce10630
--- /dev/null
+++ b/eos/effects/thermicarmorcompensationhardeningbonusgrouparmorcoating.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Thermic Armor Compensation
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Coating",
+ "thermalDamageResistanceBonus", skill.getModifiedItemAttr("hardeningBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/thermicarmorcompensationhardeningbonusgroupenergized.py b/eos/effects/thermicarmorcompensationhardeningbonusgroupenergized.py
new file mode 100755
index 000000000..15e07f424
--- /dev/null
+++ b/eos/effects/thermicarmorcompensationhardeningbonusgroupenergized.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Thermic Armor Compensation
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Plating Energized",
+ "thermalDamageResistanceBonus", skill.getModifiedItemAttr("hardeningBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/thermodynamicsskilldamagebonus.py b/eos/effects/thermodynamicsskilldamagebonus.py
new file mode 100755
index 000000000..7cf179aea
--- /dev/null
+++ b/eos/effects/thermodynamicsskilldamagebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Thermodynamics
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: True, "heatDamage",
+ skill.getModifiedItemAttr("thermodynamicsHeatDamage") * skill.level)
diff --git a/eos/effects/titanamarrgangcaprecharge2.py b/eos/effects/titanamarrgangcaprecharge2.py
new file mode 100755
index 000000000..83f90b02b
--- /dev/null
+++ b/eos/effects/titanamarrgangcaprecharge2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Avatar
+type = "gang"
+gangBoost = "rechargeRate"
+gangBonus = "titanAmarrBonus2"
+def handler(fit, ship, context):
+ fit.ship.boostItemAttr(gangBoost, ship.getModifiedItemAttr(gangBonus))
diff --git a/eos/effects/titanamarrlaserdmg3.py b/eos/effects/titanamarrlaserdmg3.py
new file mode 100755
index 000000000..48fb7a976
--- /dev/null
+++ b/eos/effects/titanamarrlaserdmg3.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Avatar
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Titan").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Energy Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("titanAmarrBonus3") * level)
diff --git a/eos/effects/titanamarrleadershipmoduleamount4.py b/eos/effects/titanamarrleadershipmoduleamount4.py
new file mode 100755
index 000000000..13d423ac5
--- /dev/null
+++ b/eos/effects/titanamarrleadershipmoduleamount4.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Avatar
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Amarr Titan").level
+ fit.modules.filteredItemIncrease(lambda mod: mod.item.group.name == "Gang Coordinator",
+ "maxGroupActive", ship.getModifiedItemAttr("titanAmarrBonus4") * level)
diff --git a/eos/effects/titanamarrskilllevel2.py b/eos/effects/titanamarrskilllevel2.py
new file mode 100755
index 000000000..65e6f750d
--- /dev/null
+++ b/eos/effects/titanamarrskilllevel2.py
@@ -0,0 +1,5 @@
+# Used by:
+# Skill: Amarr Titan
+type = "passive"
+def handler(fit, skill, context):
+ fit.ship.multiplyItemAttr("titanAmarrBonus2", skill.level)
diff --git a/eos/effects/titancaldarigangshieldhp2.py b/eos/effects/titancaldarigangshieldhp2.py
new file mode 100755
index 000000000..6cd07b33b
--- /dev/null
+++ b/eos/effects/titancaldarigangshieldhp2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Leviathan
+type = "gang"
+gangBoost = "shieldCapacity"
+gangBonus = "shipBonusCT2"
+def handler(fit, ship, context):
+ fit.ship.boostItemAttr(gangBoost, ship.getModifiedItemAttr(gangBonus))
diff --git a/eos/effects/titancaldarileadershipmoduleamount4.py b/eos/effects/titancaldarileadershipmoduleamount4.py
new file mode 100755
index 000000000..8c72e06a0
--- /dev/null
+++ b/eos/effects/titancaldarileadershipmoduleamount4.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Leviathan
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Titan").level
+ fit.modules.filteredItemIncrease(lambda mod: mod.item.group.name == "Gang Coordinator",
+ "maxGroupActive", ship.getModifiedItemAttr("titanCaldariBonus4") * level)
diff --git a/eos/effects/titancaldarimissilekineticdmg2.py b/eos/effects/titancaldarimissilekineticdmg2.py
new file mode 100755
index 000000000..b07d08482
--- /dev/null
+++ b/eos/effects/titancaldarimissilekineticdmg2.py
@@ -0,0 +1,8 @@
+# Used by:
+# Ship: Leviathan
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Caldari Titan").level
+ groups = ("Citadel Torpedo", "Citadel Cruise")
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.group.name in groups,
+ "kineticDamage", ship.getModifiedItemAttr("shipBonusCT1") * level)
diff --git a/eos/effects/titancaldariskilllevel2.py b/eos/effects/titancaldariskilllevel2.py
new file mode 100755
index 000000000..0424f531c
--- /dev/null
+++ b/eos/effects/titancaldariskilllevel2.py
@@ -0,0 +1,5 @@
+# Used by:
+# Skill: Caldari Titan
+type = "passive"
+def handler(fit, skill, context):
+ fit.ship.multiplyItemAttr("shipBonusCT2", skill.level)
diff --git a/eos/effects/titangallentegangarmorhp2.py b/eos/effects/titangallentegangarmorhp2.py
new file mode 100755
index 000000000..55a7f1ccd
--- /dev/null
+++ b/eos/effects/titangallentegangarmorhp2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Erebus
+type = "gang"
+gangBoost = "armorHP"
+gangBonus = "titanGallenteBonus2"
+def handler(fit, ship, context):
+ fit.ship.boostItemAttr(gangBoost, ship.getModifiedItemAttr(gangBonus))
diff --git a/eos/effects/titangallentehybriddamage1.py b/eos/effects/titangallentehybriddamage1.py
new file mode 100755
index 000000000..ba5b3d7e5
--- /dev/null
+++ b/eos/effects/titangallentehybriddamage1.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Erebus
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Titan").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Hybrid Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("titanGallenteBonus1") * level)
diff --git a/eos/effects/titangallenteleadershipmoduleamount4.py b/eos/effects/titangallenteleadershipmoduleamount4.py
new file mode 100755
index 000000000..e4ac4b8e2
--- /dev/null
+++ b/eos/effects/titangallenteleadershipmoduleamount4.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Erebus
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Gallente Titan").level
+ fit.modules.filteredItemIncrease(lambda mod: mod.item.group.name == "Gang Coordinator",
+ "maxGroupActive", ship.getModifiedItemAttr("titanGallenteBonus4") * level)
diff --git a/eos/effects/titangallenteskilllevel2.py b/eos/effects/titangallenteskilllevel2.py
new file mode 100755
index 000000000..02a5992df
--- /dev/null
+++ b/eos/effects/titangallenteskilllevel2.py
@@ -0,0 +1,5 @@
+# Used by:
+# Skill: Gallente Titan
+type = "passive"
+def handler(fit, skill, context):
+ fit.ship.multiplyItemAttr("titanGallenteBonus2", skill.level)
diff --git a/eos/effects/titanminmatargangsigradius2.py b/eos/effects/titanminmatargangsigradius2.py
new file mode 100755
index 000000000..d9359db82
--- /dev/null
+++ b/eos/effects/titanminmatargangsigradius2.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Ragnarok
+type = "gang"
+gangBoost = "signatureRadius"
+gangBonus = "titanMinmatarBonus2"
+def handler(fit, ship, context):
+ fit.ship.boostItemAttr(gangBoost, ship.getModifiedItemAttr(gangBonus))
diff --git a/eos/effects/titanminmatarleadershipmoduleamount4.py b/eos/effects/titanminmatarleadershipmoduleamount4.py
new file mode 100755
index 000000000..5309edcd3
--- /dev/null
+++ b/eos/effects/titanminmatarleadershipmoduleamount4.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Ragnarok
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Titan").level
+ fit.modules.filteredItemIncrease(lambda mod: mod.item.group.name == "Gang Coordinator",
+ "maxGroupActive", ship.getModifiedItemAttr("titanMinmatarBonus4") * level)
diff --git a/eos/effects/titanminmatarprojectiledmg3.py b/eos/effects/titanminmatarprojectiledmg3.py
new file mode 100755
index 000000000..d364534dd
--- /dev/null
+++ b/eos/effects/titanminmatarprojectiledmg3.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Ragnarok
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Minmatar Titan").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Projectile Turret"),
+ "damageMultiplier", ship.getModifiedItemAttr("titanMinmatarBonus3") * level)
diff --git a/eos/effects/titanminmatarskilllevel2.py b/eos/effects/titanminmatarskilllevel2.py
new file mode 100755
index 000000000..3b62e77da
--- /dev/null
+++ b/eos/effects/titanminmatarskilllevel2.py
@@ -0,0 +1,5 @@
+# Used by:
+# Skill: Minmatar Titan
+type = "passive"
+def handler(fit, skill, context):
+ fit.ship.multiplyItemAttr("titanMinmatarBonus2", skill.level)
diff --git a/eos/effects/titanturretdamagescaling.py b/eos/effects/titanturretdamagescaling.py
new file mode 100755
index 000000000..47b0fd99b
--- /dev/null
+++ b/eos/effects/titanturretdamagescaling.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ships from group: Titan (4 of 4)
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill("Gunnery"),
+ "turretDamageScalingRadius", ship.getModifiedItemAttr("titanBonusScalingRadius"))
diff --git a/eos/effects/trackingspeedbonuseffecthybrids.py b/eos/effects/trackingspeedbonuseffecthybrids.py
new file mode 100755
index 000000000..16db38c78
--- /dev/null
+++ b/eos/effects/trackingspeedbonuseffecthybrids.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules named like: Hybrid Metastasis Adjuster (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Hybrid Weapon",
+ "trackingSpeed", module.getModifiedItemAttr("trackingSpeedBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/trackingspeedbonuseffectlasers.py b/eos/effects/trackingspeedbonuseffectlasers.py
new file mode 100755
index 000000000..50b721401
--- /dev/null
+++ b/eos/effects/trackingspeedbonuseffectlasers.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules named like: Energy Metastasis Adjuster (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Weapon",
+ "trackingSpeed", module.getModifiedItemAttr("trackingSpeedBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/trackingspeedbonuseffectprojectiles.py b/eos/effects/trackingspeedbonuseffectprojectiles.py
new file mode 100755
index 000000000..06db8d14e
--- /dev/null
+++ b/eos/effects/trackingspeedbonuseffectprojectiles.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules named like: Projectile Metastasis Adjuster (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Projectile Weapon",
+ "trackingSpeed", module.getModifiedItemAttr("trackingSpeedBonus"),
+ stackingPenalties = True)
diff --git a/eos/effects/trackingspeedbonuspassiverequiringgunnerytrackingspeedbonus.py b/eos/effects/trackingspeedbonuspassiverequiringgunnerytrackingspeedbonus.py
new file mode 100755
index 000000000..6baee36c8
--- /dev/null
+++ b/eos/effects/trackingspeedbonuspassiverequiringgunnerytrackingspeedbonus.py
@@ -0,0 +1,10 @@
+# Used by:
+# Implants named like: Drop Booster (4 of 4)
+# Implants named like: Eifyr and Co. 'Gunslinger' Motion Prediction MR (6 of 6)
+# Implant: Ogdin's Eye Coordination Enhancer
+# Skill: Motion Prediction
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
+ "trackingSpeed", container.getModifiedItemAttr("trackingSpeedBonus") * level)
diff --git a/eos/effects/tractorbeamcan.py b/eos/effects/tractorbeamcan.py
new file mode 100755
index 000000000..01b9aa53b
--- /dev/null
+++ b/eos/effects/tractorbeamcan.py
@@ -0,0 +1,5 @@
+# Used by:
+# Modules from group: Tractor Beam (4 of 4)
+type = "active"
+def handler(fit, module, context):
+ pass
\ No newline at end of file
diff --git a/eos/effects/triagemodeeffect3.py b/eos/effects/triagemodeeffect3.py
new file mode 100755
index 000000000..0ea65e025
--- /dev/null
+++ b/eos/effects/triagemodeeffect3.py
@@ -0,0 +1,58 @@
+# Used by:
+# Module: Triage Module I
+type = "active"
+def handler(fit, module, context):
+ # Remote armor reps
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Armor Repair Systems"),
+ "duration", module.getModifiedItemAttr("remoteArmorDamageDurationBonus"))
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Armor Repair Systems"),
+ "armorDamageAmount", module.getModifiedItemAttr("remoteArmorDamageAmountBonus"))
+
+ # Remote hull reppers
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Hull Repair Systems"),
+ "structureDamageAmount", module.getModifiedItemAttr("remoteHullDamageAmountBonus"))
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Hull Repair Systems"),
+ "duration", module.getModifiedItemAttr("remoteHullDamageDurationBonus"))
+
+ # Shield Transporters
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"),
+ "shieldBonus", module.getModifiedItemAttr("shieldTransportAmountBonus"))
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"),
+ "duration", module.getModifiedItemAttr("shieldTransportDurationBonus"))
+
+ # Energy Transfer Arrays
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Energy Emission Systems"),
+ "powerTransferAmount", module.getModifiedItemAttr("powerTransferAmountBonus"))
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Energy Emission Systems"),
+ "duration", module.getModifiedItemAttr("powerTransferDurationBonus"))
+
+ # Shield boosters
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Operation"),
+ "shieldBonus", module.getModifiedItemAttr("shieldBoostMultiplier"))
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Operation"),
+ "duration", module.getModifiedItemAttr("shieldBonusDurationBonus"))
+
+ # Armor reps
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Unit",
+ "armorDamageAmount", module.getModifiedItemAttr("armorDamageAmountBonus"))
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Unit",
+ "duration", module.getModifiedItemAttr("armorDamageDurationBonus"))
+
+ # Speed bonus
+ fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("speedFactor"))
+
+ # Scan resolution multiplier
+ fit.ship.multiplyItemAttr("scanResolution", module.getModifiedItemAttr("scanResolutionMultiplier"))
+
+ # Mass multiplier
+ fit.ship.multiplyItemAttr("mass", module.getModifiedItemAttr("massMultiplier"))
+
+ # Lock range
+ fit.ship.multiplyItemAttr("maxTargetRange", module.getModifiedItemAttr("maxTargetRangeMultiplier"))
+
+ # Max locked targets
+ fit.ship.increaseItemAttr("maxLockedTargets", module.getModifiedItemAttr("maxLockedTargetsBonus"))
+
+ # Block EWAR & projected effects
+ fit.ship.forceItemAttr("disallowOffensiveModifiers", module.getModifiedItemAttr("disallowOffensiveModifiers"))
+ fit.ship.forceItemAttr("disallowAssistance", module.getModifiedItemAttr("disallowAssistance"))
diff --git a/eos/effects/triagemodeeffect7.py b/eos/effects/triagemodeeffect7.py
new file mode 100755
index 000000000..7c34b5cd5
--- /dev/null
+++ b/eos/effects/triagemodeeffect7.py
@@ -0,0 +1,66 @@
+# Used by:
+# Module: Triage Module II
+type = "active"
+def handler(fit, module, context):
+ # Remote armor reps
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Armor Repair Systems"),
+ "duration", module.getModifiedItemAttr("remoteArmorDamageDurationBonus"))
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Armor Repair Systems"),
+ "armorDamageAmount", module.getModifiedItemAttr("remoteArmorDamageAmountBonus"))
+
+ # Remote hull reppers
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Hull Repair Systems"),
+ "structureDamageAmount", module.getModifiedItemAttr("remoteHullDamageAmountBonus"))
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Hull Repair Systems"),
+ "duration", module.getModifiedItemAttr("remoteHullDamageDurationBonus"))
+
+ # Shield Transporters
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"),
+ "shieldBonus", module.getModifiedItemAttr("shieldTransportAmountBonus"))
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"),
+ "duration", module.getModifiedItemAttr("shieldTransportDurationBonus"))
+
+ # Energy Transfer Arrays
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Energy Emission Systems"),
+ "powerTransferAmount", module.getModifiedItemAttr("powerTransferAmountBonus"))
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Energy Emission Systems"),
+ "duration", module.getModifiedItemAttr("powerTransferDurationBonus"))
+
+ # Shield boosters
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Operation"),
+ "shieldBonus", module.getModifiedItemAttr("shieldBoostMultiplier"))
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Operation"),
+ "duration", module.getModifiedItemAttr("shieldBonusDurationBonus"))
+
+ # Armor reps
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Unit",
+ "armorDamageAmount", module.getModifiedItemAttr("armorDamageAmountBonus"))
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Unit",
+ "duration", module.getModifiedItemAttr("armorDamageDurationBonus"))
+
+ # Speed bonus
+ fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("speedFactor"))
+
+ # Scan resolution multiplier
+ fit.ship.multiplyItemAttr("scanResolution", module.getModifiedItemAttr("scanResolutionMultiplier"))
+
+ # Mass multiplier
+ fit.ship.multiplyItemAttr("mass", module.getModifiedItemAttr("massMultiplier"))
+
+ # Lock range
+ fit.ship.multiplyItemAttr("maxTargetRange", module.getModifiedItemAttr("maxTargetRangeMultiplier"))
+
+ # Max locked targets
+ fit.ship.increaseItemAttr("maxLockedTargets", module.getModifiedItemAttr("maxLockedTargetsBonus"))
+
+ # Block EWAR & projected effects
+ fit.ship.forceItemAttr("disallowOffensiveModifiers", module.getModifiedItemAttr("disallowOffensiveModifiers"))
+ fit.ship.forceItemAttr("disallowAssistance", module.getModifiedItemAttr("disallowAssistance"))
+
+ # RR cap consumption
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Armor Repair Systems"),
+ "capacitorNeed", module.getModifiedItemAttr("triageRemoteModuleCapNeed"))
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Hull Repair Systems"),
+ "capacitorNeed", module.getModifiedItemAttr("triageRemoteModuleCapNeed"))
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"),
+ "capacitorNeed", module.getModifiedItemAttr("triageRemoteModuleCapNeed"))
diff --git a/eos/effects/usemissiles.py b/eos/effects/usemissiles.py
new file mode 100755
index 000000000..c8effa0a0
--- /dev/null
+++ b/eos/effects/usemissiles.py
@@ -0,0 +1,9 @@
+# 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 (14 of 14)
+# Modules named like: Launcher (117 of 117)
+type = 'active'
+def handler(fit, module, context):
+ # Set reload time to 10 seconds
+ module.reloadTime = 10000
diff --git a/eos/effects/velocitybonusonline.py b/eos/effects/velocitybonusonline.py
new file mode 100755
index 000000000..b4abd63d6
--- /dev/null
+++ b/eos/effects/velocitybonusonline.py
@@ -0,0 +1,7 @@
+# Used by:
+# Modules from group: Nanofiber Internal Structure (14 of 14)
+# Modules from group: Overdrive Injector System (14 of 14)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("implantBonusVelocity"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/velocitybonuspassive.py b/eos/effects/velocitybonuspassive.py
new file mode 100755
index 000000000..fe5d1d757
--- /dev/null
+++ b/eos/effects/velocitybonuspassive.py
@@ -0,0 +1,6 @@
+# Used by:
+# Modules named like: Polycarbon Engine Housing (8 of 8)
+type = "passive"
+def handler(fit, module, context):
+ fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("implantBonusVelocity"),
+ stackingPenalties = True)
\ No newline at end of file
diff --git a/eos/effects/warfarelinkcpuaddition.py b/eos/effects/warfarelinkcpuaddition.py
new file mode 100644
index 000000000..d1415ee95
--- /dev/null
+++ b/eos/effects/warfarelinkcpuaddition.py
@@ -0,0 +1,5 @@
+# Used by:
+# Modules from group: Gang Coordinator (30 of 31)
+type = "passive"
+def handler(fit, module, context):
+ module.increaseItemAttr("cpu", module.getModifiedItemAttr("warfareLinkCPUAdd") or 0)
diff --git a/eos/effects/warfarelinkcpupenalty.py b/eos/effects/warfarelinkcpupenalty.py
new file mode 100755
index 000000000..ac36347b3
--- /dev/null
+++ b/eos/effects/warfarelinkcpupenalty.py
@@ -0,0 +1,7 @@
+# Used by:
+# Subsystems from group: Defensive Systems (12 of 16)
+type = "passive"
+def handler(fit, module, context):
+ fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill("Leadership"),
+ "warfareLinkCPUAdd", module.getModifiedItemAttr("warfareLinkCPUPenalty"))
+
diff --git a/eos/effects/warpdisruptsphere.py b/eos/effects/warpdisruptsphere.py
new file mode 100755
index 000000000..5ecaab99a
--- /dev/null
+++ b/eos/effects/warpdisruptsphere.py
@@ -0,0 +1,12 @@
+# Used by:
+# Modules from group: Warp Disrupt Field Generator (2 of 2)
+type = "active"
+runTime = "early"
+def handler(fit, module, context):
+ fit.ship.boostItemAttr("mass", module.getModifiedItemAttr("massBonusPercentage"))
+ fit.ship.boostItemAttr("signatureRadius", module.getModifiedItemAttr("signatureRadiusBonus"))
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Propulsion Module",
+ "speedBoostFactor", module.getModifiedItemAttr("speedBoostFactorBonus"))
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Propulsion Module",
+ "speedFactor", module.getModifiedItemAttr("speedFactorBonus"))
+ fit.ship.forceItemAttr("disallowAssistance", 1)
diff --git a/eos/effects/warpdriveoperationwarpcapacitorneedbonuspostpercentwarpcapacitorneedlocationship.py b/eos/effects/warpdriveoperationwarpcapacitorneedbonuspostpercentwarpcapacitorneedlocationship.py
new file mode 100755
index 000000000..4e2103834
--- /dev/null
+++ b/eos/effects/warpdriveoperationwarpcapacitorneedbonuspostpercentwarpcapacitorneedlocationship.py
@@ -0,0 +1,5 @@
+# Used by:
+# Implants named like: Eifyr and Co. 'Rogue' Warp Drive Operation WD (6 of 6)
+type = "passive"
+def handler(fit, implant, context):
+ fit.ship.boostItemAttr("warpCapacitorNeed", implant.getModifiedItemAttr("warpCapacitorNeedBonus"))
diff --git a/eos/effects/warpdriveoperationwarpcapacitorneedbonuspostpercentwarpcapacitorneedlocationshipgrouppropulsion.py b/eos/effects/warpdriveoperationwarpcapacitorneedbonuspostpercentwarpcapacitorneedlocationshipgrouppropulsion.py
new file mode 100755
index 000000000..23c0728d5
--- /dev/null
+++ b/eos/effects/warpdriveoperationwarpcapacitorneedbonuspostpercentwarpcapacitorneedlocationshipgrouppropulsion.py
@@ -0,0 +1,8 @@
+# Used by:
+# Modules named like: Warp Core Optimizer (8 of 8)
+# Skill: Warp Drive Operation
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.ship.boostItemAttr("warpCapacitorNeed", container.getModifiedItemAttr("warpCapacitorNeedBonus") * level,
+ stackingPenalties = "skill" not in context)
diff --git a/eos/effects/warpscramble.py b/eos/effects/warpscramble.py
new file mode 100755
index 000000000..8553084fd
--- /dev/null
+++ b/eos/effects/warpscramble.py
@@ -0,0 +1,6 @@
+# Used by:
+# Variations of module: Warp Disruptor I (19 of 19)
+# Module: Civilian Warp Disruptor
+type = "projected", "active"
+def handler(fit, module, context):
+ fit.ship.increaseItemAttr("warpScrambleStatus", module.getModifiedItemAttr("warpScrambleStrength"))
\ No newline at end of file
diff --git a/eos/effects/warpscrambletargetmwdblockactivation.py b/eos/effects/warpscrambletargetmwdblockactivation.py
new file mode 100755
index 000000000..57f4146be
--- /dev/null
+++ b/eos/effects/warpscrambletargetmwdblockactivation.py
@@ -0,0 +1,9 @@
+# Used by:
+# Variations of module: Warp Scrambler I (19 of 19)
+runTime = "early"
+type = "projected", "active"
+def handler(fit, module, context):
+ if "projected" not in context:
+ return
+
+ fit.ship.increaseItemAttr("warpScrambleStatus", module.getModifiedItemAttr("warpScrambleStrength"))
diff --git a/eos/effects/warpskillspeed.py b/eos/effects/warpskillspeed.py
new file mode 100755
index 000000000..ff6d75891
--- /dev/null
+++ b/eos/effects/warpskillspeed.py
@@ -0,0 +1,6 @@
+# Used by:
+# Implants named like: Eifyr and Co. 'Rogue' Warp Drive Speed WS (6 of 6)
+# Modules named like: Hyperspatial Velocity Optimizer (8 of 8)
+type = "passive"
+def handler(fit, container, context):
+ fit.ship.boostItemAttr("baseWarpSpeed", container.getModifiedItemAttr("WarpSBonus"))
diff --git a/eos/effects/weaponupgradescpuneedbonuspostpercentcpulocationshipmodulesrequiringbomblauncher.py b/eos/effects/weaponupgradescpuneedbonuspostpercentcpulocationshipmodulesrequiringbomblauncher.py
new file mode 100755
index 000000000..69064230a
--- /dev/null
+++ b/eos/effects/weaponupgradescpuneedbonuspostpercentcpulocationshipmodulesrequiringbomblauncher.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Weapon Upgrades
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Bomb Deployment"),
+ "cpu", skill.getModifiedItemAttr("cpuNeedBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/weaponupgradescpuneedbonuspostpercentcpulocationshipmodulesrequiringenergypulseweapons.py b/eos/effects/weaponupgradescpuneedbonuspostpercentcpulocationshipmodulesrequiringenergypulseweapons.py
new file mode 100755
index 000000000..4f40e120b
--- /dev/null
+++ b/eos/effects/weaponupgradescpuneedbonuspostpercentcpulocationshipmodulesrequiringenergypulseweapons.py
@@ -0,0 +1,6 @@
+# Used by:
+# Skill: Weapon Upgrades
+type = "passive"
+def handler(fit, skill, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Energy Pulse Weapons"),
+ "cpu", skill.getModifiedItemAttr("cpuNeedBonus") * skill.level)
\ No newline at end of file
diff --git a/eos/effects/weaponupgradescpuneedbonuspostpercentcpulocationshipmodulesrequiringgunnery.py b/eos/effects/weaponupgradescpuneedbonuspostpercentcpulocationshipmodulesrequiringgunnery.py
new file mode 100755
index 000000000..2dbf14d62
--- /dev/null
+++ b/eos/effects/weaponupgradescpuneedbonuspostpercentcpulocationshipmodulesrequiringgunnery.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Zainou 'Gnome' Weapon Upgrades WU (6 of 6)
+# Skill: Weapon Upgrades
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
+ "cpu", container.getModifiedItemAttr("cpuNeedBonus") * level)
diff --git a/eos/effects/weaponupgradescpuneedbonuspostpercentcpulocationshipmodulesrequiringmissilelauncheroperation.py b/eos/effects/weaponupgradescpuneedbonuspostpercentcpulocationshipmodulesrequiringmissilelauncheroperation.py
new file mode 100755
index 000000000..3528fb52d
--- /dev/null
+++ b/eos/effects/weaponupgradescpuneedbonuspostpercentcpulocationshipmodulesrequiringmissilelauncheroperation.py
@@ -0,0 +1,8 @@
+# Used by:
+# Implants named like: Zainou 'Gnome' Launcher CPU Efficiency LE (6 of 6)
+# Skill: Weapon Upgrades
+type = "passive"
+def handler(fit, container, context):
+ level = container.level if "skill" in context else 1
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Missile Launcher Operation"),
+ "cpu", container.getModifiedItemAttr("cpuNeedBonus") * level)
diff --git a/eos/effects/zcolinarmorhpperlvl.py b/eos/effects/zcolinarmorhpperlvl.py
new file mode 100755
index 000000000..c82ab25b7
--- /dev/null
+++ b/eos/effects/zcolinarmorhpperlvl.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Impel
+# Ship: Occator
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Transport Ships").level
+ fit.ship.boostItemAttr("armorHP", ship.getModifiedItemAttr("shipBonusHPExtender1") * level)
diff --git a/eos/effects/zcolinorcacargobonus.py b/eos/effects/zcolinorcacargobonus.py
new file mode 100755
index 000000000..5961efcc6
--- /dev/null
+++ b/eos/effects/zcolinorcacargobonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Orca
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Industrial Command Ships").level
+ fit.ship.boostItemAttr("capacity", ship.getModifiedItemAttr("shipOrcaCargoBonusOrca1") * level)
diff --git a/eos/effects/zcolinorcaforemanmodbonus.py b/eos/effects/zcolinorcaforemanmodbonus.py
new file mode 100755
index 000000000..2b7c89e79
--- /dev/null
+++ b/eos/effects/zcolinorcaforemanmodbonus.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Orca
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Industrial Command Ships").level
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Director"),
+ "commandBonus", ship.getModifiedItemAttr("shipOrcaForemanBonus") * level)
diff --git a/eos/effects/zcolinorcasurveyscannerbonus.py b/eos/effects/zcolinorcasurveyscannerbonus.py
new file mode 100755
index 000000000..418fa7244
--- /dev/null
+++ b/eos/effects/zcolinorcasurveyscannerbonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Orca
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Survey Scanner",
+ "surveyScanRange", ship.getModifiedItemAttr("shipOrcaSurveyScannerBonus"))
diff --git a/eos/effects/zcolinorcatractorrangebonus.py b/eos/effects/zcolinorcatractorrangebonus.py
new file mode 100755
index 000000000..a6a4091dc
--- /dev/null
+++ b/eos/effects/zcolinorcatractorrangebonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Orca
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tractor Beam",
+ "maxRange", ship.getModifiedItemAttr("shipOrcaTractorBeamRangeBonus1"))
diff --git a/eos/effects/zcolinorcatractorvelocitybonus.py b/eos/effects/zcolinorcatractorvelocitybonus.py
new file mode 100755
index 000000000..499065489
--- /dev/null
+++ b/eos/effects/zcolinorcatractorvelocitybonus.py
@@ -0,0 +1,6 @@
+# Used by:
+# Ship: Orca
+type = "passive"
+def handler(fit, ship, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tractor Beam",
+ "maxTractorVelocity", ship.getModifiedItemAttr("shipOrcaTractorBeamVelocityBonus2"))
diff --git a/eos/effects/zcolinshieldhpperlvl.py b/eos/effects/zcolinshieldhpperlvl.py
new file mode 100755
index 000000000..ca50d7618
--- /dev/null
+++ b/eos/effects/zcolinshieldhpperlvl.py
@@ -0,0 +1,7 @@
+# Used by:
+# Ship: Bustard
+# Ship: Mastodon
+type = "passive"
+def handler(fit, ship, context):
+ level = fit.character.getSkill("Transport Ships").level
+ fit.ship.boostItemAttr("shieldCapacity", ship.getModifiedItemAttr("shipBonusHPExtender1") * level)
diff --git a/eos/enum.py b/eos/enum.py
new file mode 100755
index 000000000..e105d014c
--- /dev/null
+++ b/eos/enum.py
@@ -0,0 +1,20 @@
+class Enum():
+ @classmethod
+ def getTypes(cls):
+ for stuff in cls.__dict__:
+ if stuff.upper() == stuff:
+ yield stuff
+
+ @classmethod
+ def getName(cls, v):
+ map = getattr(cls, "_map", None)
+ if map is None:
+ map = cls._map = {}
+ for type in cls.getTypes():
+ map[cls.getValue(type)] = type
+
+ return map.get(v)
+
+ @classmethod
+ def getValue(cls, type):
+ return cls.__dict__[type]
diff --git a/eos/eqBase.py b/eos/eqBase.py
new file mode 100755
index 000000000..072436642
--- /dev/null
+++ b/eos/eqBase.py
@@ -0,0 +1,28 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+class EqBase(object):
+ def __eq__(self, other):
+ return type(self) == type(other) and self.ID == other.ID
+
+ def __ne__(self, other):
+ return type(self) != type(other) or self.ID != other.ID
+
+ def __hash__(self):
+ return id(type(self)) + self.ID
\ No newline at end of file
diff --git a/eos/eveapi.py b/eos/eveapi.py
new file mode 100755
index 000000000..db0888c10
--- /dev/null
+++ b/eos/eveapi.py
@@ -0,0 +1,884 @@
+#-----------------------------------------------------------------------------
+# eveapi - EVE Online API access
+#
+# Copyright (c)2007 Jamie "Entity" van den Berge
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation
+# files (the "Software"), to deal in the Software without
+# restriction, including without limitation the rights to use,
+# copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following
+# conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE
+#
+#-----------------------------------------------------------------------------
+# Version: 1.1.9-2 - 30 September 2011
+# - merge workaround provided by Entity to make it work with http proxies
+# Version: 1.1.9 - 2 September 2011
+# - added workaround for row tags with attributes that were not defined
+# in their rowset (this should fix AssetList)
+#
+# Version: 1.1.8 - 1 September 2011
+# - fix for inconsistent columns attribute in rowsets.
+#
+# Version: 1.1.7 - 1 September 2011
+# - auth() method updated to work with the new authentication scheme.
+#
+# Version: 1.1.6 - 27 May 2011
+# - Now supports composite keys for IndexRowsets.
+# - Fixed calls not working if a path was specified in the root url.
+#
+# Version: 1.1.5 - 27 Januari 2011
+# - Now supports (and defaults to) HTTPS. Non-SSL proxies will still work by
+# explicitly specifying http:// in the url.
+#
+# Version: 1.1.4 - 1 December 2010
+# - Empty explicit CDATA tags are now properly handled.
+# - _autocast now receives the name of the variable it's trying to typecast,
+# enabling custom/future casting functions to make smarter decisions.
+#
+# Version: 1.1.3 - 6 November 2010
+# - Added support for anonymous CDATA inside row tags. This makes the body of
+# mails in the rows of char/MailBodies available through the .data attribute.
+#
+# Version: 1.1.2 - 2 July 2010
+# - Fixed __str__ on row objects to work properly with unicode strings.
+#
+# Version: 1.1.1 - 10 Januari 2010
+# - Fixed bug that causes nested tags to not appear in rows of rowsets created
+# from normal Elements. This should fix the corp.MemberSecurity method,
+# which now returns all data for members. [jehed]
+#
+# Version: 1.1.0 - 15 Januari 2009
+# - Added Select() method to Rowset class. Using it avoids the creation of
+# temporary row instances, speeding up iteration considerably.
+# - Added ParseXML() function, which can be passed arbitrary API XML file or
+# string objects.
+# - Added support for proxy servers. A proxy can be specified globally or
+# per api connection instance. [suggestion by graalman]
+# - Some minor refactoring.
+# - Fixed deprecation warning when using Python 2.6.
+#
+# Version: 1.0.7 - 14 November 2008
+# - Added workaround for rowsets that are missing the (required!) columns
+# attribute. If missing, it will use the columns found in the first row.
+# Note that this is will still break when expecting columns, if the rowset
+# is empty. [Flux/Entity]
+#
+# Version: 1.0.6 - 18 July 2008
+# - Enabled expat text buffering to avoid content breaking up. [BigWhale]
+#
+# Version: 1.0.5 - 03 February 2008
+# - Added workaround to make broken XML responses (like the "row:name" bug in
+# eve/CharacterID) work as intended.
+# - Bogus datestamps before the epoch in XML responses are now set to 0 to
+# avoid breaking certain date/time functions. [Anathema Matou]
+#
+# Version: 1.0.4 - 23 December 2007
+# - Changed _autocast() to use timegm() instead of mktime(). [Invisible Hand]
+# - Fixed missing attributes of elements inside rows. [Elandra Tenari]
+#
+# Version: 1.0.3 - 13 December 2007
+# - Fixed keyless columns bugging out the parser (in CorporationSheet for ex.)
+#
+# Version: 1.0.2 - 12 December 2007
+# - Fixed parser not working with indented XML.
+#
+# Version: 1.0.1
+# - Some micro optimizations
+#
+# Version: 1.0
+# - Initial release
+#
+# Requirements:
+# Python 2.4+
+#
+#-----------------------------------------------------------------------------
+
+import httplib
+import urlparse
+import urllib
+import copy
+
+from xml.parsers import expat
+from time import strptime
+from calendar import timegm
+
+proxy = None
+
+#-----------------------------------------------------------------------------
+
+class Error(StandardError):
+ def __init__(self, code, message):
+ self.code = code
+ self.args = (message.rstrip("."),)
+
+
+def EVEAPIConnection(url="api.eveonline.com", cacheHandler=None, proxy=None):
+ # Creates an API object through which you can call remote functions.
+ #
+ # The following optional arguments may be provided:
+ #
+ # url - root location of the EVEAPI server
+ #
+ # proxy - (host,port) specifying a proxy server through which to request
+ # the API pages. Specifying a proxy overrides default proxy.
+ #
+ # cacheHandler - an object which must support the following interface:
+ #
+ # retrieve(host, path, params)
+ #
+ # Called when eveapi wants to fetch a document.
+ # host is the address of the server, path is the full path to
+ # the requested document, and params is a dict containing the
+ # parameters passed to this api call (keyID, vCode, etc).
+ # The method MUST return one of the following types:
+ #
+ # None - if your cache did not contain this entry
+ # str/unicode - eveapi will parse this as XML
+ # Element - previously stored object as provided to store()
+ # file-like object - eveapi will read() XML from the stream.
+ #
+ # store(host, path, params, doc, obj)
+ #
+ # Called when eveapi wants you to cache this item.
+ # You can use obj to get the info about the object (cachedUntil
+ # and currentTime, etc) doc is the XML document the object
+ # was generated from. It's generally best to cache the XML, not
+ # the object, unless you pickle the object. Note that this method
+ # will only be called if you returned None in the retrieve() for
+ # this object.
+ #
+
+ if not url.startswith("http"):
+ url = "https://" + url
+ p = urlparse.urlparse(url, "https")
+ if p.path and p.path[-1] == "/":
+ p.path = p.path[:-1]
+ ctx = _RootContext(None, p.path, {}, {})
+ ctx._handler = cacheHandler
+ ctx._scheme = p.scheme
+ ctx._host = p.netloc
+ ctx._proxy = proxy or globals()["proxy"]
+ return ctx
+
+
+def ParseXML(file_or_string):
+ try:
+ return _ParseXML(file_or_string, False, None)
+ except TypeError:
+ raise TypeError("XML data must be provided as string or file-like object")
+
+
+def _ParseXML(response, fromContext, storeFunc):
+ # pre/post-process XML or Element data
+
+ if fromContext and isinstance(response, Element):
+ obj = response
+ elif type(response) in (str, unicode):
+ obj = _Parser().Parse(response, False)
+ elif hasattr(response, "read"):
+ obj = _Parser().Parse(response, True)
+ else:
+ raise TypeError("retrieve method must return None, string, file-like object or an Element instance")
+
+ error = getattr(obj, "error", False)
+ if error:
+ raise Error(error.code, error.data)
+
+ result = getattr(obj, "result", False)
+ if not result:
+ raise RuntimeError("API object does not contain result")
+
+ if fromContext and storeFunc:
+ # call the cache handler to store this object
+ storeFunc(obj)
+
+ # make metadata available to caller somehow
+ result._meta = obj
+
+ return result
+
+
+
+
+
+#-----------------------------------------------------------------------------
+# API Classes
+#-----------------------------------------------------------------------------
+
+_listtypes = (list, tuple, dict)
+_unspecified = []
+
+class _Context(object):
+
+ def __init__(self, root, path, parentDict, newKeywords=None):
+ self._root = root or self
+ self._path = path
+ if newKeywords:
+ if parentDict:
+ self.parameters = parentDict.copy()
+ else:
+ self.parameters = {}
+ self.parameters.update(newKeywords)
+ else:
+ self.parameters = parentDict or {}
+
+ def context(self, *args, **kw):
+ if kw or args:
+ path = self._path
+ if args:
+ path += "/" + "/".join(args)
+ return self.__class__(self._root, path, self.parameters, kw)
+ else:
+ return self
+
+ def __getattr__(self, this):
+ # perform arcane attribute majick trick
+ return _Context(self._root, self._path + "/" + this, self.parameters)
+
+ def __call__(self, **kw):
+ if kw:
+ # specified keywords override contextual ones
+ for k, v in self.parameters.iteritems():
+ if k not in kw:
+ kw[k] = v
+ else:
+ # no keywords provided, just update with contextual ones.
+ kw.update(self.parameters)
+
+ # now let the root context handle it further
+ return self._root(self._path, **kw)
+
+
+class _AuthContext(_Context):
+
+ def character(self, characterID):
+ # returns a copy of this connection object but for every call made
+ # through it, it will add the folder "/char" to the url, and the
+ # characterID to the parameters passed.
+ return _Context(self._root, self._path + "/char", self.parameters, {"characterID":characterID})
+
+ def corporation(self, characterID):
+ # same as character except for the folder "/corp"
+ return _Context(self._root, self._path + "/corp", self.parameters, {"characterID":characterID})
+
+
+class _RootContext(_Context):
+
+ def auth(self, **kw):
+ if len(kw) == 2 and (("keyID" in kw and "vCode" in kw) or ("userID" in kw and "apiKey" in kw)):
+ return _AuthContext(self._root, self._path, self.parameters, kw)
+ raise ValueError("Must specify keyID and vCode")
+
+ def setcachehandler(self, handler):
+ self._root._handler = handler
+
+ def __call__(self, path, **kw):
+ # convert list type arguments to something the API likes
+ for k, v in kw.iteritems():
+ if isinstance(v, _listtypes):
+ kw[k] = ','.join(map(str, list(v)))
+
+ cache = self._root._handler
+
+ # now send the request
+ path += ".xml.aspx"
+
+ if cache:
+ response = cache.retrieve(self._host, path, kw)
+ else:
+ response = None
+
+ if response is None:
+ if self._scheme == "https":
+ connectionclass = httplib.HTTPSConnection
+ else:
+ connectionclass = httplib.HTTPConnection
+
+ if self._proxy is None:
+ if self._scheme == "https":
+ connectionclass = httplib.HTTPSConnection
+ else:
+ connectionclass = httplib.HTTPConnection
+
+ http = connectionclass(self._host)
+ if kw:
+ http.request("POST", path, urllib.urlencode(kw), {"Content-type": "application/x-www-form-urlencoded"})
+ else:
+ http.request("GET", path)
+ else:
+ connectionclass = httplib.HTTPConnection
+ http = connectionclass(*self._proxy)
+ if kw:
+ http.request("POST", self._scheme+'://'+self._host+path, urllib.urlencode(kw), {"Content-type": "application/x-www-form-urlencoded"})
+ else:
+ http.request("GET", self._scheme+'://'+self._host+path)
+
+ response = http.getresponse()
+ if response.status != 200:
+ if response.status == httplib.NOT_FOUND:
+ raise AttributeError("'%s' not available on API server (404 Not Found)" % path)
+ else:
+ raise RuntimeError("'%s' request failed (%d %s)" % (path, response.status, response.reason))
+
+ if cache:
+ store = True
+ response = response.read()
+ else:
+ store = False
+ else:
+ store = False
+
+ retrieve_fallback = cache and getattr(cache, "retrieve_fallback", False)
+ if retrieve_fallback:
+ # implementor is handling fallbacks...
+ try:
+ return _ParseXML(response, True, store and (lambda obj: cache.store(self._host, path, kw, response, obj)))
+ except Error, reason:
+ response = retrieve_fallback(self._host, path, kw, reason=e)
+ if response is not None:
+ return response
+ raise
+ else:
+ # implementor is not handling fallbacks...
+ return _ParseXML(response, True, store and (lambda obj: cache.store(self._host, path, kw, response, obj)))
+
+#-----------------------------------------------------------------------------
+# XML Parser
+#-----------------------------------------------------------------------------
+
+def _autocast(key, value):
+ # attempts to cast an XML string to the most probable type.
+ try:
+ if value.strip("-").isdigit():
+ return int(value)
+ except ValueError:
+ pass
+
+ try:
+ return float(value)
+ except ValueError:
+ pass
+
+ if len(value) == 19 and value[10] == ' ':
+ # it could be a date string
+ try:
+ return max(0, int(timegm(strptime(value, "%Y-%m-%d %H:%M:%S"))))
+ except OverflowError:
+ pass
+ except ValueError:
+ pass
+
+ # couldn't cast. return string unchanged.
+ return value
+
+
+
+class _Parser(object):
+
+ def Parse(self, data, isStream=False):
+ self.container = self.root = None
+ self._cdata = False
+ p = expat.ParserCreate()
+ p.StartElementHandler = self.tag_start
+ p.CharacterDataHandler = self.tag_cdata
+ p.StartCdataSectionHandler = self.tag_cdatasection_enter
+ p.EndCdataSectionHandler = self.tag_cdatasection_exit
+ p.EndElementHandler = self.tag_end
+ p.ordered_attributes = True
+ p.buffer_text = True
+
+ if isStream:
+ p.ParseFile(data)
+ else:
+ p.Parse(data, True)
+ return self.root
+
+
+ def tag_cdatasection_enter(self):
+ # encountered an explicit CDATA tag.
+ self._cdata = True
+
+ def tag_cdatasection_exit(self):
+ if self._cdata:
+ # explicit CDATA without actual data. expat doesn't seem
+ # to trigger an event for this case, so do it manually.
+ # (_cdata is set False by this call)
+ self.tag_cdata("")
+ else:
+ self._cdata = False
+
+ def tag_start(self, name, attributes):
+ #
+ # If there's a colon in the tag name, cut off the name from the colon
+ # onward. This is a workaround to make certain bugged XML responses
+ # (such as eve/CharacterID.xml.aspx) work.
+ if ":" in name:
+ name = name[:name.index(":")]
+ #
+
+ if name == "rowset":
+ # for rowsets, use the given name
+ try:
+ columns = attributes[attributes.index('columns')+1].replace(" ", "").split(",")
+ except ValueError:
+ # rowset did not have columns tag set (this is a bug in API)
+ # columns will be extracted from first row instead.
+ columns = []
+
+ try:
+ priKey = attributes[attributes.index('key')+1]
+ this = IndexRowset(cols=columns, key=priKey)
+ except ValueError:
+ this = Rowset(cols=columns)
+
+
+ this._name = attributes[attributes.index('name')+1]
+ this.__catch = "row" # tag to auto-add to rowset.
+ else:
+ this = Element()
+ this._name = name
+
+ this.__parent = self.container
+
+ if self.root is None:
+ # We're at the root. The first tag has to be "eveapi" or we can't
+ # really assume the rest of the xml is going to be what we expect.
+ if name != "eveapi":
+ raise RuntimeError("Invalid API response")
+ self.root = this
+
+ if isinstance(self.container, Rowset) and (self.container.__catch == this._name):
+ #
+ # - check for missing columns attribute (see above)
+ # - check for extra attributes that were not defined in the rowset,
+ # such as rawQuantity in the assets lists.
+ # In either case the tag is assumed to be correct and the rowset's
+ # columns are overwritten with the tag's version.
+ if not self.container._cols or (len(attributes)/2 > len(self.container._cols)):
+ self.container._cols = attributes[0::2]
+ #
+
+ self.container.append([_autocast(attributes[i], attributes[i+1]) for i in xrange(0, len(attributes), 2)])
+ this._isrow = True
+ this._attributes = this._attributes2 = None
+ else:
+ this._isrow = False
+ this._attributes = attributes
+ this._attributes2 = []
+
+ self.container = this
+
+
+ def tag_cdata(self, data):
+ if self._cdata:
+ # unset cdata flag to indicate it's been handled.
+ self._cdata = False
+ else:
+ if data in ("\r\n", "\n") or data.strip() != data:
+ return
+
+ this = self.container
+ data = _autocast(this._name, data)
+
+ if this._isrow:
+ # sigh. anonymous data inside rows makes Entity cry.
+ # for the love of Jove, CCP, learn how to use rowsets.
+ parent = this.__parent
+ _row = parent._rows[-1]
+ _row.append(data)
+ if len(parent._cols) < len(_row):
+ parent._cols.append("data")
+
+ elif this._attributes:
+ # this tag has attributes, so we can't simply assign the cdata
+ # as an attribute to the parent tag, as we'll lose the current
+ # tag's attributes then. instead, we'll assign the data as
+ # attribute of this tag.
+ this.data = data
+ else:
+ # this was a simple data without attributes.
+ # we won't be doing anything with this actual tag so we can just
+ # bind it to its parent (done by __tag_end)
+ setattr(this.__parent, this._name, data)
+
+ def tag_end(self, name):
+ this = self.container
+ if this is self.root:
+ del this._attributes
+ #this.__dict__.pop("_attributes", None)
+ return
+
+ # we're done with current tag, so we can pop it off. This means that
+ # self.container will now point to the container of element 'this'.
+ self.container = this.__parent
+ del this.__parent
+
+ attributes = this.__dict__.pop("_attributes")
+ attributes2 = this.__dict__.pop("_attributes2")
+ if attributes is None:
+ # already processed this tag's closure early, in tag_start()
+ return
+
+ if self.container._isrow:
+ # Special case here. tags inside a row! Such tags have to be
+ # added as attributes of the row.
+ parent = self.container.__parent
+
+ # get the row line for this element from its parent rowset
+ _row = parent._rows[-1]
+
+ # add this tag's value to the end of the row
+ _row.append(getattr(self.container, this._name, this))
+
+ # fix columns if neccessary.
+ if len(parent._cols) < len(_row):
+ parent._cols.append(this._name)
+ else:
+ # see if there's already an attribute with this name (this shouldn't
+ # really happen, but it doesn't hurt to handle this case!
+ sibling = getattr(self.container, this._name, None)
+ if sibling is None:
+ self.container._attributes2.append(this._name)
+ setattr(self.container, this._name, this)
+ # Note: there aren't supposed to be any NON-rowset tags containing
+ # multiples of some tag or attribute. Code below handles this case.
+ elif isinstance(sibling, Rowset):
+ # its doppelganger is a rowset, append this as a row to that.
+ row = [_autocast(attributes[i], attributes[i+1]) for i in xrange(0, len(attributes), 2)]
+ row.extend([getattr(this, col) for col in attributes2])
+ sibling.append(row)
+ elif isinstance(sibling, Element):
+ # parent attribute is an element. This means we're dealing
+ # with multiple of the same sub-tag. Change the attribute
+ # into a Rowset, adding the sibling element and this one.
+ rs = Rowset()
+ rs.__catch = rs._name = this._name
+ row = [_autocast(attributes[i], attributes[i+1]) for i in xrange(0, len(attributes), 2)]+[getattr(this, col) for col in attributes2]
+ rs.append(row)
+ row = [getattr(sibling, attributes[i]) for i in xrange(0, len(attributes), 2)]+[getattr(sibling, col) for col in attributes2]
+ rs.append(row)
+ rs._cols = [attributes[i] for i in xrange(0, len(attributes), 2)]+[col for col in attributes2]
+ setattr(self.container, this._name, rs)
+ else:
+ # something else must have set this attribute already.
+ # (typically the data case in tag_data())
+ pass
+
+ # Now fix up the attributes and be done with it.
+ for i in xrange(0, len(attributes), 2):
+ this.__dict__[attributes[i]] = _autocast(attributes[i], attributes[i+1])
+
+ return
+
+
+
+
+#-----------------------------------------------------------------------------
+# XML Data Containers
+#-----------------------------------------------------------------------------
+# The following classes are the various container types the XML data is
+# unpacked into.
+#
+# Note that objects returned by API calls are to be treated as read-only. This
+# is not enforced, but you have been warned.
+#-----------------------------------------------------------------------------
+
+class Element(object):
+ # Element is a namespace for attributes and nested tags
+ def __str__(self):
+ return "" % self._name
+
+_fmt = u"%s:%s".__mod__
+class Row(object):
+ # A Row is a single database record associated with a Rowset.
+ # The fields in the record are accessed as attributes by their respective
+ # column name.
+ #
+ # To conserve resources, Row objects are only created on-demand. This is
+ # typically done by Rowsets (e.g. when iterating over the rowset).
+
+ def __init__(self, cols=None, row=None):
+ self._cols = cols or []
+ self._row = row or []
+
+ def __nonzero__(self):
+ return True
+
+ def __ne__(self, other):
+ return self.__cmp__(other)
+
+ def __eq__(self, other):
+ return self.__cmp__(other) == 0
+
+ def __cmp__(self, other):
+ if type(other) != type(self):
+ raise TypeError("Incompatible comparison type")
+ return cmp(self._cols, other._cols) or cmp(self._row, other._row)
+
+ def __getattr__(self, this):
+ try:
+ return self._row[self._cols.index(this)]
+ except:
+ raise AttributeError, this
+
+ def __getitem__(self, this):
+ return self._row[self._cols.index(this)]
+
+ def __str__(self):
+ return "Row(" + ','.join(map(_fmt, zip(self._cols, self._row))) + ")"
+
+
+class Rowset(object):
+ # Rowsets are collections of Row objects.
+ #
+ # Rowsets support most of the list interface:
+ # iteration, indexing and slicing
+ #
+ # As well as the following methods:
+ #
+ # IndexedBy(column)
+ # Returns an IndexRowset keyed on given column. Requires the column to
+ # be usable as primary key.
+ #
+ # GroupedBy(column)
+ # Returns a FilterRowset keyed on given column. FilterRowset objects
+ # can be accessed like dicts. See FilterRowset class below.
+ #
+ # SortBy(column, reverse=True)
+ # Sorts rowset in-place on given column. for a descending sort,
+ # specify reversed=True.
+ #
+ # SortedBy(column, reverse=True)
+ # Same as SortBy, except this returns a new rowset object instead of
+ # sorting in-place.
+ #
+ # Select(columns, row=False)
+ # Yields a column values tuple (value, ...) for each row in the rowset.
+ # If only one column is requested, then just the column value is
+ # provided instead of the values tuple.
+ # When row=True, each result will be decorated with the entire row.
+ #
+
+ def IndexedBy(self, column):
+ return IndexRowset(self._cols, self._rows, column)
+
+ def GroupedBy(self, column):
+ return FilterRowset(self._cols, self._rows, column)
+
+ def SortBy(self, column, reverse=False):
+ ix = self._cols.index(column)
+ self.sort(key=lambda e: e[ix], reverse=reverse)
+
+ def SortedBy(self, column, reverse=False):
+ rs = self[:]
+ rs.SortBy(column, reverse)
+ return rs
+
+ def Select(self, *columns, **options):
+ if len(columns) == 1:
+ i = self._cols.index(columns[0])
+ if options.get("row", False):
+ for line in self._rows:
+ yield (line, line[i])
+ else:
+ for line in self._rows:
+ yield line[i]
+ else:
+ i = map(self._cols.index, columns)
+ if options.get("row", False):
+ for line in self._rows:
+ yield line, [line[x] for x in i]
+ else:
+ for line in self._rows:
+ yield [line[x] for x in i]
+
+
+ # -------------
+
+ def __init__(self, cols=None, rows=None):
+ self._cols = cols or []
+ self._rows = rows or []
+
+ def append(self, row):
+ if isinstance(row, list):
+ self._rows.append(row)
+ elif isinstance(row, Row) and len(row._cols) == len(self._cols):
+ self._rows.append(row._row)
+ else:
+ raise TypeError("incompatible row type")
+
+ def __add__(self, other):
+ if isinstance(other, Rowset):
+ if len(other._cols) == len(self._cols):
+ self._rows += other._rows
+ raise TypeError("rowset instance expected")
+
+ def __nonzero__(self):
+ return not not self._rows
+
+ def __len__(self):
+ return len(self._rows)
+
+ def copy(self):
+ return self[:]
+
+ def __getitem__(self, ix):
+ if type(ix) is slice:
+ return Rowset(self._cols, self._rows[ix])
+ return Row(self._cols, self._rows[ix])
+
+ def sort(self, *args, **kw):
+ self._rows.sort(*args, **kw)
+
+ def __str__(self):
+ return ("Rowset(columns=[%s], rows=%d)" % (','.join(self._cols), len(self)))
+
+ def __getstate__(self):
+ return (self._cols, self._rows)
+
+ def __setstate__(self, state):
+ self._cols, self._rows = state
+
+
+
+class IndexRowset(Rowset):
+ # An IndexRowset is a Rowset that keeps an index on a column.
+ #
+ # The interface is the same as Rowset, but provides an additional method:
+ #
+ # Get(key [, default])
+ # Returns the Row mapped to provided key in the index. If there is no
+ # such key in the index, KeyError is raised unless a default value was
+ # specified.
+ #
+
+ def Get(self, key, *default):
+ row = self._items.get(key, None)
+ if row is None:
+ if default:
+ return default[0]
+ raise KeyError, key
+ return Row(self._cols, row)
+
+ # -------------
+
+ def __init__(self, cols=None, rows=None, key=None):
+ try:
+ if "," in key:
+ self._ki = ki = [cols.index(k) for k in key.split(",")]
+ self.composite = True
+ else:
+ self._ki = ki = cols.index(key)
+ self.composite = False
+ except IndexError:
+ raise ValueError("Rowset has no column %s" % key)
+
+ Rowset.__init__(self, cols, rows)
+ self._key = key
+
+ if self.composite:
+ self._items = dict((tuple([row[k] for k in ki]), row) for row in self._rows)
+ else:
+ self._items = dict((row[ki], row) for row in self._rows)
+
+ def __getitem__(self, ix):
+ if type(ix) is slice:
+ return IndexRowset(self._cols, self._rows[ix], self._key)
+ return Rowset.__getitem__(self, ix)
+
+ def append(self, row):
+ Rowset.append(self, row)
+ if self.composite:
+ self._items[tuple([row[k] for k in self._ki])] = row
+ else:
+ self._items[row[self._ki]] = row
+
+ def __getstate__(self):
+ return (Rowset.__getstate__(self), self._items, self._ki)
+
+ def __setstate__(self, state):
+ state, self._items, self._ki = state
+ Rowset.__setstate__(self, state)
+
+
+class FilterRowset(object):
+ # A FilterRowset works much like an IndexRowset, with the following
+ # differences:
+ # - FilterRowsets are accessed much like dicts
+ # - Each key maps to a Rowset, containing only the rows where the value
+ # of the column this FilterRowset was made on matches the key.
+
+ def __init__(self, cols=None, rows=None, key=None, key2=None, dict=None):
+ if dict is not None:
+ self._items = items = dict
+ elif cols is not None:
+ self._items = items = {}
+
+ idfield = cols.index(key)
+ if not key2:
+ for row in rows:
+ id = row[idfield]
+ if id in items:
+ items[id].append(row)
+ else:
+ items[id] = [row]
+ else:
+ idfield2 = cols.index(key2)
+ for row in rows:
+ id = row[idfield]
+ if id in items:
+ items[id][row[idfield2]] = row
+ else:
+ items[id] = {row[idfield2]:row}
+
+ self._cols = cols
+ self.key = key
+ self.key2 = key2
+ self._bind()
+
+ def _bind(self):
+ items = self._items
+ self.keys = items.keys
+ self.iterkeys = items.iterkeys
+ self.__contains__ = items.__contains__
+ self.has_key = items.has_key
+ self.__len__ = items.__len__
+ self.__iter__ = items.__iter__
+
+ def copy(self):
+ return FilterRowset(self._cols[:], None, self.key, self.key2, dict=copy.deepcopy(self._items))
+
+ def get(self, key, default=_unspecified):
+ try:
+ return self[key]
+ except KeyError:
+ if default is _unspecified:
+ raise
+ return default
+
+ def __getitem__(self, i):
+ if self.key2:
+ return IndexRowset(self._cols, None, self.key2, self._items.get(i, {}))
+ return Rowset(self._cols, self._items[i])
+
+ def __getstate__(self):
+ return (self._cols, self._rows, self._items, self.key, self.key2)
+
+ def __setstate__(self, state):
+ self._cols, self._rows, self._items, self.key, self.key2 = state
+ self._bind()
diff --git a/eos/gamedata.py b/eos/gamedata.py
new file mode 100755
index 000000000..52ded6160
--- /dev/null
+++ b/eos/gamedata.py
@@ -0,0 +1,360 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+import re
+
+from sqlalchemy.orm import reconstructor
+
+from eqBase import EqBase
+
+import traceback
+
+try:
+ from collections import OrderedDict
+except ImportError:
+ from gui.utils.compat import OrderedDict
+
+class Effect(EqBase):
+ '''
+ The effect handling class, it is used to proxy and load effect handler code,
+ as well as a container for extra information regarding effects coming
+ from the gamedata db.
+
+ @ivar ID: the ID of this effect
+ @ivar name: The name of this effect
+ @ivar description: The description of this effect, this is usualy pretty useless
+ @ivar published: Wether this effect is published or not, unpublished effects are typicaly unused.
+ '''
+ #Filter to change names of effects to valid python method names
+ nameFilter = re.compile("[^A-Za-z0-9]")
+
+ @reconstructor
+ def init(self):
+ '''
+ Reconstructor, composes the object as we grab it from the database
+ '''
+ self.__generated = False
+ self.handlerName = re.sub(self.nameFilter, "", self.name).lower()
+
+ @property
+ def handler(self):
+ '''
+ The handler for the effect,
+ It is automaticly fetched from effects/.py if the file exists
+ the first time this property is accessed.
+ '''
+ if not self.__generated:
+ self.__generateHandler()
+
+ return self.__handler
+
+ @property
+ def runTime(self):
+ '''
+ The runTime that this effect should be run at.
+ This property is also automaticly fetched from effects/.py if the file exists.
+ the possible values are:
+ None, "early", "normal", "late"
+ None and "normal" are equivalent, and are also the default.
+
+ effects with an early runTime will be ran first when things are calculated,
+ followed by effects with a normal runTime and as last effects with a late runTime are ran.
+ '''
+ if not self.__generated:
+ self.__generateHandler()
+
+ return self.__runTime
+
+ @property
+ def type(self):
+ '''
+ The type of the effect, automaticly fetched from effects/.py if the file exists.
+
+ Valid values are:
+ "passive", "active", "projected", "gang"
+
+ Each gives valuable information to eos about what type the module having
+ the effect is. passive vs active gives eos clues about wether to module
+ is activatable or not (duh!) and projected and gang each tell eos that the
+ module can be projected onto other fits, or used as a gang booster module respectivly
+ '''
+ if not self.__generated:
+ self.__generateHandler()
+
+ return self.__type
+
+ @property
+ def isImplemented(self):
+ '''
+ Wether this effect is implemented in code or not,
+ unimplemented effects simply do nothing at all when run
+ '''
+ return self.handler != effectDummy
+
+ def isType(self, type):
+ '''
+ Check if this effect is of the passed type
+ '''
+ return self.type is not None and type in self.type
+
+ def __generateHandler(self):
+ '''
+ Grab the handler, type and runTime from the effect code if it exists,
+ if it doesn't, set dummy values and add a dummy handler
+ '''
+ try:
+ self.__effectModule = effectModule = __import__('eos.effects.' + self.handlerName, fromlist=True)
+ self.__handler = getattr(effectModule, "handler")
+ try:
+ self.__runTime = getattr(effectModule, "runTime") or "normal"
+ except AttributeError:
+ self.__runTime = "normal"
+
+ try:
+ t = getattr(effectModule, "type")
+ except AttributeError:
+ t = None
+
+ t = t if isinstance(t, tuple) or t is None else (t,)
+ self.__type = t
+ except ImportError as e:
+ self.__handler = effectDummy
+ self.__runTime = "normal"
+ self.__type = None
+ except Exception as e:
+ traceback.print_exc(e)
+
+ self.__generated = True
+
+ def getattr(self, key):
+ if not self.__generated:
+ self.__generateHandler()
+
+ return getattr(self.__effectModule, key, None)
+
+def effectDummy(*args, **kwargs):
+ pass
+
+class Item(EqBase):
+ MOVE_ATTRS = (4, # Mass
+ 38, # Capacity
+ 161) # Volume
+
+ MOVE_ATTR_INFO = None
+
+ @classmethod
+ def getMoveAttrInfo(cls):
+ info = getattr(cls, "MOVE_ATTR_INFO", None)
+ if info is None:
+ cls.MOVE_ATTR_INFO = info = []
+ import eos.db
+ for id in cls.MOVE_ATTRS:
+ info.append(eos.db.getAttributeInfo(id))
+
+ return info
+
+ def moveAttrs(self):
+ self.__moved = True
+ for info in self.getMoveAttrInfo():
+ val = getattr(self, info.name, 0)
+ if val != 0:
+ attr = Attribute()
+ attr.info = info
+ attr.value = val
+ self.__attributes[info.name] = attr
+
+ @reconstructor
+ def init(self):
+ self.__race = None
+ self.__requiredSkills = None
+ self.__moved = False
+ self.__offensive = None
+ self.__assistive = None
+
+ @property
+ def attributes(self):
+ if not self.__moved:
+ self.moveAttrs()
+
+ return self.__attributes
+
+ def getAttribute(self, key):
+ if key in self.attributes:
+ return self.attributes[key].value
+
+ def isType(self, type):
+ for effect in self.effects.itervalues():
+ if effect.isType(type):
+ return True
+
+ return False
+
+ @property
+ def requiredSkills(self):
+ if self.__requiredSkills is None:
+ # This import should be here to make sure it's fully initialized
+ from eos import db
+ requiredSkills = OrderedDict()
+ self.__requiredSkills = requiredSkills
+ # Map containing attribute IDs we may need for required skills
+ # { requiredSkillX : requiredSkillXLevel }
+ srqIDMap = {182: 277, 183: 278, 184: 279, 1285: 1286, 1289: 1287, 1290: 1288}
+ combinedAttrIDs = set(srqIDMap.iterkeys()).union(set(srqIDMap.itervalues()))
+ # Map containing result of the request
+ # { attributeID : attributeValue }
+ skillAttrs = {}
+ # Get relevant attribute values from db (required skill IDs and levels) for our item
+ for attrInfo in db.directAttributeRequest((self.ID,), tuple(combinedAttrIDs)):
+ attrID = attrInfo[1]
+ attrVal = attrInfo[2]
+ skillAttrs[attrID] = attrVal
+ # Go through all attributeID pairs
+ for srqIDAtrr, srqLvlAttr in srqIDMap.iteritems():
+ # Check if we have both in returned result
+ if srqIDAtrr in skillAttrs and srqLvlAttr in skillAttrs:
+ skillID = int(skillAttrs[srqIDAtrr])
+ skillLvl = skillAttrs[srqLvlAttr]
+ # Fetch item from database and fill map
+ item = db.getItem(skillID)
+ requiredSkills[item] = skillLvl
+ return self.__requiredSkills
+
+ @property
+ def race(self):
+ if self.__race is None:
+ # Define race map
+ map = {1: "caldari",
+ 2: "minmatar",
+ 4: "amarr",
+ 5: "sansha", # Caldari + Amarr
+ 6: "blood", # Minmatar + Amarr
+ 8: "gallente",
+ 9: "guristas", # Caldari + Gallente
+ 10: "angelserp", # Minmatar + Gallente, final race depends on the order of skills
+ 16: "jove",
+ 32: "sansha"} # Incrusion Sansha
+ # Race is None by default
+ race = None
+ # Check if we're dealing with ORE ship first, using market group data
+ if self.marketGroup and self.marketGroup.name == "ORE":
+ race = "ore"
+ # Check primary and secondary required skills' races
+ if race is None:
+ skills = self.requiredSkills.keys()
+ skillPrimaryRace = (skills[0].raceID if len(skills) >= 1 else 0) or 0
+ skillSecondaryRace = (skills[1].raceID if len(skills) >= 2 else 0) or 0
+ skillRaces = (skillPrimaryRace, skillSecondaryRace)
+ if sum(skillRaces) in map:
+ race = map[sum(skillRaces)]
+ if race == "angelserp":
+ if skillRaces == (2, 8):
+ race = "angel"
+ else:
+ race = "serpentis"
+
+ # Rely on item's own raceID as last resort
+ if race is None:
+ race = map.get(self.raceID, None)
+
+ # Store our final value
+ self.__race = race
+ return self.__race
+
+ @property
+ def assistive(self):
+ """Detects if item can be used as assistance"""
+ # Make sure we cache results
+ if self.__assistive is None:
+ assistive = False
+ # Go through all effects and find first assistive
+ for effect in self.effects.itervalues():
+ if effect.info.isAssistance is True:
+ # If we find one, stop and mark item as assistive
+ assistive = True
+ break
+ self.__assistive = assistive
+ return self.__assistive
+
+ @property
+ def offensive(self):
+ """Detects if item can be used as something offensive"""
+ # Make sure we cache results
+ if self.__offensive is None:
+ offensive = False
+ # Go through all effects and find first offensive
+ for effect in self.effects.itervalues():
+ if effect.info.isOffensive is True:
+ # If we find one, stop and mark item as offensive
+ offensive = True
+ break
+ self.__offensive = offensive
+ return self.__offensive
+
+ def requiresSkill(self, skill, level=None):
+ for s, l in self.requiredSkills.iteritems():
+ if isinstance(skill, basestring):
+ if s.name == skill and (level is None or l == level):
+ return True
+
+ elif isinstance(skill, int) and (level is None or l == level):
+ if s.ID == skill:
+ return True
+
+ elif skill == s and (level is None or l == level):
+ return True
+
+ elif hasattr(skill, "item") and skill.item == s and (level is None or l == level):
+ return True
+
+ return False
+
+class MetaData(EqBase):
+ def __init__(self, name, val=None):
+ self.fieldName = name
+ self.fieldValue = val
+
+class EffectInfo(EqBase):
+ pass
+
+class AttributeInfo(EqBase):
+ pass
+
+class Attribute(EqBase):
+ pass
+
+class Category(EqBase):
+ pass
+
+class Group(EqBase):
+ pass
+
+class Icon(EqBase):
+ pass
+
+class MarketGroup(EqBase):
+ pass
+
+class MetaGroup(EqBase):
+ pass
+
+class MetaType(EqBase):
+ pass
+
+class Unit(EqBase):
+ pass
diff --git a/eos/graph/__init__.py b/eos/graph/__init__.py
new file mode 100755
index 000000000..d4f2d2b3b
--- /dev/null
+++ b/eos/graph/__init__.py
@@ -0,0 +1,116 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+import itertools
+
+class Graph(object):
+ def __init__(self, fit, function, data = None):
+ self.fit = fit
+ self.data = {}
+ if data is not None:
+ for name, d in data.iteritems():
+ self.setData(Data(name, d))
+
+ self.function = function
+
+ def clearData(self):
+ self.data.clear()
+
+ def setData(self, data):
+ self.data[data.name] = data
+
+ def getIterator(self):
+ pointNames = []
+ pointIterators = []
+ for data in self.data.itervalues():
+ pointNames.append(data.name)
+ pointIterators.append(data)
+
+ return self._iterator(pointNames, pointIterators)
+
+ def _iterator(self, pointNames, pointIterators):
+ for pointValues in itertools.product(*pointIterators):
+ point = {}
+ for i in xrange(len(pointValues)):
+ point[pointNames[i]] = pointValues[i]
+
+ yield point, self.function(point)
+
+
+class Data(object):
+ def __init__(self, name, dataString, step=None):
+ self.name = name
+ self.step = step
+ self.data = self.parseString(dataString)
+
+ def parseString(self, dataString):
+ if not isinstance(dataString, basestring):
+ return (Constant(dataString),)
+
+ dataList = []
+ for data in dataString.split(";"):
+ if isinstance(data, basestring) and "-" in data:
+ #Dealing with a range
+ dataList.append(Range(data, self.step))
+ else:
+ dataList.append(Constant(data))
+
+ return dataList
+
+ def __iter__(self):
+ for data in self.data:
+ for value in data:
+ yield value
+
+ def isConstant(self):
+ return len(self.data) == 1 and self.data[0].isConstant()
+
+
+class Constant(object):
+ def __init__(self, const):
+ if isinstance(const, basestring):
+ self.value = None if const == "" else float(const)
+ else:
+ self.value = const
+
+ def __iter__(self):
+ yield self.value
+
+ def isConstant(self):
+ return True
+
+class Range(object):
+ def __init__(self, string, step):
+ start, end = string.split("-")
+ self.start = float(start)
+ self.end = float(end)
+ self.step = step
+
+ def __iter__(self):
+ current = start = self.start
+ end = self.end
+ step = self.step or (end - start) / 50.0
+ i = 1
+ while current < end:
+ current = start + i * step
+ i += 1
+ yield current
+
+ def isConstant(self):
+ return False
diff --git a/eos/graph/fitDps.py b/eos/graph/fitDps.py
new file mode 100755
index 000000000..ae4f4153f
--- /dev/null
+++ b/eos/graph/fitDps.py
@@ -0,0 +1,98 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from eos.graph import Graph, Data
+from eos.types import Hardpoint, State
+from math import log, sin, radians
+
+class FitDpsGraph(Graph):
+ defaults = {"angle": 0,
+ "distance": 0,
+ "signatureRadius": None,
+ "velocity": 0}
+
+ def __init__(self, fit, data=None):
+ Graph.__init__(self, fit, self.calcDps, data if data is not None else self.defaults)
+ self.fit = fit
+
+ def calcDps(self, data):
+ fit = self.fit
+ total = 0
+ distance = data["distance"] * 1000
+ for mod in fit.modules:
+ if mod.hardpoint == Hardpoint.TURRET:
+ if mod.state >= State.ACTIVE:
+ total += mod.dps * self.calculateTurretMultiplier(mod, data)
+
+ elif mod.hardpoint == Hardpoint.MISSILE:
+ if mod.state >= State.ACTIVE and mod.maxRange >= distance:
+ total += mod.dps * self.calculateMissileMultiplier(mod, data)
+
+ if distance <= fit.extraAttributes["droneControlRange"]:
+ for drone in fit.drones:
+ multiplier = 1 if drone.getModifiedItemAttr("maxVelocity") > 0 else self.calculateTurretMultiplier(drone, data)
+ total += drone.dps * multiplier
+
+ return total
+
+ def calculateMissileMultiplier(self, mod, data):
+ targetSigRad = data["signatureRadius"]
+ targetVelocity = data["velocity"]
+ explosionRadius = mod.getModifiedChargeAttr("aoeCloudSize")
+ targetSigRad = explosionRadius if targetSigRad is None else targetSigRad
+ explosionVelocity = mod.getModifiedChargeAttr("aoeVelocity")
+ damageReductionFactor = mod.getModifiedChargeAttr("aoeDamageReductionFactor")
+ damageReductionSensitivity = mod.getModifiedChargeAttr("aoeDamageReductionSensitivity")
+
+ sigRadiusFactor = targetSigRad / explosionRadius
+ if targetVelocity:
+ velocityFactor = (explosionVelocity / explosionRadius * targetSigRad / targetVelocity) ** (log(damageReductionFactor) / log(damageReductionSensitivity))
+ else:
+ velocityFactor = 1
+ return min(sigRadiusFactor, velocityFactor, 1)
+
+ def calculateTurretMultiplier(self, mod, data):
+ #Source for most of turret calculation info: http://wiki.eveonline.com/en/wiki/Falloff
+ chanceToHit = self.calculateTurretChanceToHit(mod, data)
+ if chanceToHit > 0.01:
+ #AvgDPS = Base Damage * [ ( ChanceToHit^2 + ChanceToHit + 0.0499 ) / 2 ]
+ multiplier = (chanceToHit ** 2 + chanceToHit + 0.0499) / 2
+ else:
+ #All hits are wreckings
+ multiplier = chanceToHit * 3
+ dmgScaling = mod.getModifiedItemAttr("turretDamageScalingRadius")
+ if dmgScaling:
+ targetSigRad = data["signatureRadius"]
+ multiplier = min(1, (float(targetSigRad) / dmgScaling) ** 2)
+ return multiplier
+
+ def calculateTurretChanceToHit(self, mod, data):
+ distance = data["distance"] * 1000
+ tracking = mod.getModifiedItemAttr("trackingSpeed")
+ turretOptimal = mod.maxRange
+ turretFalloff = mod.falloff
+ turretSigRes = mod.getModifiedItemAttr("optimalSigRadius")
+ targetSigRad = data["signatureRadius"]
+ targetSigRad = turretSigRes if targetSigRad is None else targetSigRad
+ transversal = sin(radians(data["angle"])) * data["velocity"]
+ trackingEq = (((transversal / (distance * tracking)) *
+ (turretSigRes / targetSigRad)) ** 2)
+ rangeEq = ((max(0, distance - turretOptimal)) / turretFalloff) ** 2
+
+ return 0.5 ** (trackingEq + rangeEq)
diff --git a/eos/lgpl.txt b/eos/lgpl.txt
new file mode 100755
index 000000000..67cd97bbc
--- /dev/null
+++ b/eos/lgpl.txt
@@ -0,0 +1,503 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ , 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
diff --git a/eos/mathUtils.py b/eos/mathUtils.py
new file mode 100755
index 000000000..c56e88cf3
--- /dev/null
+++ b/eos/mathUtils.py
@@ -0,0 +1,30 @@
+#===============================================================================
+# Copyright (C) 2010 Anton Vorobyov
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+import decimal
+
+def floorFloat(value):
+ """Round float down to integer"""
+ # We have to convert float to str to keep compatibility with
+ # decimal module in python 2.6
+ value = str(value)
+ # Do the conversions for proper rounding down, avoiding float
+ # representation errors
+ result = int(decimal.Decimal(value).to_integral_value(rounding=decimal.ROUND_DOWN))
+ return result
diff --git a/eos/modifiedAttributeDict.py b/eos/modifiedAttributeDict.py
new file mode 100755
index 000000000..324d83b69
--- /dev/null
+++ b/eos/modifiedAttributeDict.py
@@ -0,0 +1,267 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from math import exp
+import collections
+
+defaultValuesCache = {}
+
+class ItemAttrShortcut(object):
+ def getModifiedItemAttr(self, key):
+ if key in self.itemModifiedAttributes:
+ return self.itemModifiedAttributes[key]
+ else:
+ return None
+
+class ChargeAttrShortcut(object):
+ def getModifiedChargeAttr(self, key):
+ if key in self.chargeModifiedAttributes:
+ return self.chargeModifiedAttributes[key]
+ else:
+ return None
+
+class ModifiedAttributeDict(collections.MutableMapping):
+ class CalculationPlaceholder():
+ pass
+
+ def __init__(self, fit = None):
+ self.fit = fit
+ # Stores original values of the entity
+ self.__original = None
+ # Modified values during calculations
+ self.__intermediary = {}
+ # Final modified values
+ self.__modified = {}
+ # Affected by entities
+ self.__affectedBy = {}
+ # Dictionaries for various value modification types
+ self.__forced = {}
+ self.__preAssigns = {}
+ self.__preIncreases = {}
+ self.__multipliers = {}
+ self.__penalizedMultipliers = {}
+ self.__postIncreases = {}
+
+ def clear(self):
+ self.__intermediary.clear()
+ self.__modified.clear()
+ self.__affectedBy.clear()
+ self.__forced.clear()
+ self.__preAssigns.clear()
+ self.__preIncreases.clear()
+ self.__multipliers.clear()
+ self.__penalizedMultipliers.clear()
+ self.__postIncreases.clear()
+
+ @property
+ def original(self):
+ return self.__original
+
+ @original.setter
+ def original(self, val):
+ self.__original = val
+ self.__modified.clear()
+
+ def __getitem__(self, key):
+ # Check if we have final calculated value
+ if key in self.__modified:
+ if self.__modified[key] == self.CalculationPlaceholder:
+ self.__modified[key] = self.__calculateValue(key)
+ return self.__modified[key]
+ # Then in values which are not yet calculated
+ elif key in self.__intermediary:
+ return self.__intermediary[key]
+ # Original value is the least priority
+ else:
+ return self.getOriginal(key)
+
+ def __delitem__(self, key):
+ if key in self.__modified:
+ del self.__modified[key]
+ if key in self.__intermediary:
+ del self.__intermediary[key]
+
+ def getOriginal(self, key):
+ val = self.__original.get(key)
+ if val is None:
+ return None
+
+ return val.value if hasattr(val, "value") else val
+
+ def __setitem__(self, key, val):
+ self.__intermediary[key] = val
+
+ def __iter__(self):
+ all = dict(self.__original, **self.__modified)
+ return (key for key in all)
+
+ def __contains__(self, key):
+ return (self.__original is not None and key in self.__original) or key in self.__modified or key in self.__intermediary
+
+ def __placehold(self, key):
+ """Create calculation placeholder in item's modified attribute dict"""
+ self.__modified[key] = self.CalculationPlaceholder
+
+ def __len__(self):
+ keys = set()
+ keys.update(self.__original.iterkeys())
+ keys.update(self.__modified.iterkeys())
+ keys.update(self.__intermediary.iterkeys())
+ return len(keys)
+
+ def __calculateValue(self, key):
+ # If value is forced, we don't have to calculate anything,
+ # just return forced value instead
+ force = self.__forced[key] if key in self.__forced else None
+ if force is not None:
+ return force
+ # Grab our values if they're there, otherwise we'll take default values
+ preIncrease = self.__preIncreases[key] if key in self.__preIncreases else 0
+ multiplier = self.__multipliers[key] if key in self.__multipliers else 1
+ penalizedMultiplierGroups = self.__penalizedMultipliers[key] if key in self.__penalizedMultipliers else {}
+ postIncrease = self.__postIncreases[key] if key in self.__postIncreases else 0
+
+ # Grab initial value, priorities are:
+ # Results of ongoing calculation > preAssign > original > 0
+ try:
+ default = defaultValuesCache[key]
+ except KeyError:
+ from eos.db.gamedata.queries import getAttributeInfo
+ attrInfo = getAttributeInfo(key)
+ if attrInfo is None:
+ default = defaultValuesCache[key] = 0.0
+ else:
+ dv = attrInfo.defaultValue
+ default = defaultValuesCache[key] = dv if dv is not None else 0.0
+ val = self.__intermediary[key] if key in self.__intermediary else self.__preAssigns[key] if key in self.__preAssigns else self.getOriginal(key) if key in self.__original else default
+
+ # We'll do stuff in the following order:
+ # preIncrease > multiplier > stacking penalized multipliers > postIncrease
+ val += preIncrease
+ val *= multiplier
+ # Each group is penalized independently
+ # Things in different groups will not be stack penalized between each other
+ for penalizedMultipliers in penalizedMultiplierGroups.itervalues():
+ # A quick explanation of how this works:
+ # 1: Bonuses and penalties are calculated seperately, so we'll have to filter each of them
+ l1 = filter(lambda val: val > 1, penalizedMultipliers)
+ l2 = filter(lambda val: val < 1, penalizedMultipliers)
+ # 2: The most significant bonuses take the smallest penalty,
+ # This means we'll have to sort
+ abssort = lambda val: -abs(val - 1)
+ l1.sort(key=abssort)
+ l2.sort(key=abssort)
+ # 3: The first module doesn't get penalized at all
+ # Any module after the first takes penalties according to:
+ # 1 + (multiplier - 1) * math.exp(- math.pow(i, 2) / 7.1289)
+ for l in (l1, l2):
+ for i in xrange(len(l)):
+ bonus = l[i]
+ val *= 1 + (bonus - 1) * exp(- i ** 2 / 7.1289)
+ val += postIncrease
+
+ return val
+
+ def getAfflictions(self, key):
+ return self.__affectedBy[key] if key in self.__affectedBy else {}
+
+ def iterAfflictions(self):
+ return self.__affectedBy.__iter__()
+
+ def __afflict(self, attributeName, operation, bonus):
+ """Add modifier to list of things affecting current item"""
+ # Do nothing if no fit is assigned
+ if self.fit is None:
+ return
+ # Create dictionary for given attribute and give it alias
+ if attributeName not in self.__affectedBy:
+ self.__affectedBy[attributeName] = {}
+ affs = self.__affectedBy[attributeName]
+ # If there's no set for current fit in dictionary, create it
+ if self.fit not in affs:
+ affs[self.fit] = set()
+ # Reassign alias to set
+ affs = affs[self.fit]
+ # Get modifier which helps to compose 'Affected by' map
+ modifier = self.fit.getModifier()
+ # Add current affliction to set
+ affs.add((modifier, operation, bonus))
+
+ def preAssign(self, attributeName, value):
+ """Overwrites original value of the entity with given one, allowing further modification"""
+ self.__preAssigns[attributeName] = value
+ self.__placehold(attributeName)
+ # Add to afflictions only if preassigned value differs from original
+ if value != self.getOriginal(attributeName):
+ self.__afflict(attributeName, "=", value)
+
+ def increase(self, attributeName, increase, position="pre"):
+ """Increase value of given attribute by given number"""
+ # Increases applied before multiplications and after them are
+ # written in separate maps
+ if position == "pre":
+ tbl = self.__preIncreases
+ elif position == "post":
+ tbl = self.__postIncreases
+ else:
+ raise ValueError("position should be either pre or post")
+ if not attributeName in tbl:
+ tbl[attributeName] = 0
+ tbl[attributeName] += increase
+ self.__placehold(attributeName)
+ # Add to list of afflictions only if we actually modify value
+ if increase != 0:
+ self.__afflict(attributeName, "+", increase)
+
+ def multiply(self, attributeName, multiplier, stackingPenalties=False, penaltyGroup="default"):
+ """Multiply value of given attribute by given factor"""
+ # If we're asked to do stacking penalized multiplication, append values
+ # to per penalty group lists
+ if stackingPenalties:
+ if not attributeName in self.__penalizedMultipliers:
+ self.__penalizedMultipliers[attributeName] = {}
+ if not penaltyGroup in self.__penalizedMultipliers[attributeName]:
+ self.__penalizedMultipliers[attributeName][penaltyGroup] = []
+ tbl = self.__penalizedMultipliers[attributeName][penaltyGroup]
+ tbl.append(multiplier)
+ # Non-penalized multiplication factors go to the single list
+ else:
+ if not attributeName in self.__multipliers:
+ self.__multipliers[attributeName] = 1
+ self.__multipliers[attributeName] *= multiplier
+ self.__placehold(attributeName)
+ # Add to list of afflictions only if we actually modify value
+ if multiplier != 1:
+ self.__afflict(attributeName, "%s*" % ("s" if stackingPenalties else ""), multiplier)
+
+ def boost(self, attributeName, boostFactor, *args, **kwargs):
+ """Boost value by some percentage"""
+ # We just transform percentage boost into multiplication factor
+ self.multiply(attributeName, 1 + boostFactor / 100.0, *args, **kwargs)
+
+ def force(self, attributeName, value):
+ """Force value to attribute and prohibit any changes to it"""
+ self.__forced[attributeName] = value
+ self.__placehold(attributeName)
+ self.__afflict(attributeName, u"\u2263", value)
+
+class Affliction():
+ def __init__(self, type, amount):
+ self.type = type
+ self.amount = amount
diff --git a/eos/saveddata/__init__.py b/eos/saveddata/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/saveddata/booster.py b/eos/saveddata/booster.py
new file mode 100755
index 000000000..001a163de
--- /dev/null
+++ b/eos/saveddata/booster.py
@@ -0,0 +1,160 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from eos.modifiedAttributeDict import ModifiedAttributeDict, ItemAttrShortcut
+from eos.effectHandlerHelpers import HandledItem
+from sqlalchemy.orm import reconstructor, validates
+
+class Booster(HandledItem, ItemAttrShortcut):
+ def __init__(self, item):
+ self.__slot = self.__calculateSlot(item)
+ self.itemID = item.ID
+ self.__item = item
+ self.active = True
+ self.build()
+
+ @reconstructor
+ def init(self):
+ self.__item = None
+
+ def build(self):
+ self.__itemModifiedAttributes = ModifiedAttributeDict()
+ self.__itemModifiedAttributes.original = self.__item.attributes
+ self.__sideEffects = []
+ for effect in self.item.effects.itervalues():
+ if effect.isType("boosterSideEffect"):
+ s = SideEffect(self)
+ s.effect = effect
+ s.active = effect.ID in self.__activeSideEffectIDs
+ self.__sideEffects.append(s)
+
+ def __fetchItemInfo(self):
+ import eos.db
+ self.__item = eos.db.getItem(self.itemID)
+ self.__slot = self.__calculateSlot(self.__item)
+ self.build()
+
+ def iterSideEffects(self):
+ return self.__sideEffects.__iter__()
+
+ def getSideEffect(self, name):
+ for sideEffect in self.iterSideEffects():
+ if sideEffect.effect.name == name:
+ return sideEffect
+
+ raise KeyError("SideEffect with %s as name not found" % name)
+
+ @property
+ def itemModifiedAttributes(self):
+ if self.__item is None:
+ self.__fetchItemInfo()
+
+ return self.__itemModifiedAttributes
+
+ @property
+ def slot(self):
+ if self.__item is None:
+ self.__fetchItemInfo()
+
+ return self.__slot
+
+ @property
+ def item(self):
+ if self.__item is None:
+ self.__fetchItemInfo()
+
+ return self.__item
+
+ def __calculateSlot(self, item):
+ if not "boosterness" in item.attributes:
+ raise ValueError("Passed item is not a booster")
+
+ return int(item.attributes["boosterness"].value)
+
+ def clear(self):
+ self.itemModifiedAttributes.clear()
+
+ def calculateModifiedAttributes(self, fit, runTime, forceProjected = False):
+ if forceProjected: return
+ if self.active == False: return
+ for effect in self.item.effects.itervalues():
+ if effect.runTime == runTime and effect.isType("passive"):
+ effect.handler(fit, self, ("booster",))
+
+ for sideEffect in self.iterSideEffects():
+ if sideEffect.active and sideEffect.effect.runTime == runTime:
+ sideEffect.effect.handler(fit, self, ("boosterSideEffect",))
+
+ @validates("ID", "itemID", "ammoID", "active")
+ def validator(self, key, val):
+ map = {"ID": lambda val: isinstance(val, int),
+ "itemID" : lambda val: isinstance(val, int),
+ "ammoID" : lambda val: isinstance(val, int),
+ "active" : lambda val: isinstance(val, bool),
+ "slot" : lambda val: isinstance(val, int) and val >= 1 and val <= 3}
+
+ if map[key](val) == False: raise ValueError(str(val) + " is not a valid value for " + key)
+ else: return val
+
+ def __deepcopy__(self, memo):
+ copy = Booster(self.item)
+ copy.active = self.active
+ origSideEffects = list(self.iterSideEffects())
+ copySideEffects = list(copy.iterSideEffects())
+ i = 0
+ while i < len(origSideEffects):
+ copySideEffects[i].active = origSideEffects[i].active
+ i += 1
+
+ return copy
+
+
+class SideEffect(object):
+ def __init__(self, owner):
+ self.__owner = owner
+ self.__active = False
+ self.__effect = None
+
+ @property
+ def active(self):
+ return self.__active
+
+ @active.setter
+ def active(self, active):
+ if not isinstance(active, bool):
+ raise TypeError("Expecting a bool, not a " + type(active))
+
+ if active != self.__active:
+ if active:
+ self.__owner._Booster__activeSideEffectIDs.append(self.effect.ID)
+ else:
+ self.__owner._Booster__activeSideEffectIDs.remove(self.effect.ID)
+
+ self.__active = active
+
+ @property
+ def effect(self):
+ return self.__effect
+
+ @effect.setter
+ def effect(self, effect):
+ if not hasattr(effect, "handler"):
+ raise TypeError("Need an effect with a handler")
+
+ self.__effect = effect
diff --git a/eos/saveddata/character.py b/eos/saveddata/character.py
new file mode 100755
index 000000000..f7ebb1ec4
--- /dev/null
+++ b/eos/saveddata/character.py
@@ -0,0 +1,313 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+
+import urllib2
+
+from eos.effectHandlerHelpers import HandledItem
+from sqlalchemy.orm import validates, reconstructor
+import sqlalchemy.orm.exc as exc
+from eos import eveapi
+import eos
+
+class Character(object):
+ __all5 = None
+ __all0 = None
+ __itemList = None
+ __itemIDMap = None
+ __itemNameMap = None
+
+ @classmethod
+ def getSkillList(cls):
+ if cls.__itemList is None:
+ import eos.db
+ cls.__itemList = eos.db.getItemsByCategory("Skill")
+
+ return cls.__itemList
+
+ @classmethod
+ def setSkillList(cls, list):
+ cls.__itemList = list
+
+ @classmethod
+ def getSkillIDMap(cls):
+ if cls.__itemIDMap is None:
+ map = {}
+ for skill in cls.getSkillList():
+ map[skill.ID] = skill
+
+ cls.__itemIDMap = map
+
+ return cls.__itemIDMap
+
+ @classmethod
+ def getSkillNameMap(cls):
+ if cls.__itemNameMap is None:
+ map = {}
+ for skill in cls.getSkillList():
+ map[skill.name] = skill
+
+ cls.__itemNameMap = map
+
+ return cls.__itemNameMap
+
+ @classmethod
+ def getAll5(cls):
+ if cls.__all5 is None:
+ import eos.db
+ all5 = eos.db.getCharacter("All 5")
+ if all5 is None:
+ all5 = Character("All 5")
+ all5.defaultLevel = 5
+ eos.db.add(all5)
+
+ cls.__all5 = all5
+ return cls.__all5
+
+ @classmethod
+ def getAll0(cls):
+ if cls.__all0 is None:
+ import eos.db
+ all0 = eos.db.getCharacter("All 0")
+ if all0 is None:
+ all0 = Character("All 0")
+ eos.db.add(all0)
+
+ cls.__all0 = all0
+ return cls.__all0
+
+ def __init__(self, name):
+ self.name = name
+ self.__owner = None
+ self.defaultLevel = None
+ self.__skills = []
+ self.__skillIdMap = {}
+ self.__implants = eos.saveddata.fit.HandledImplantBoosterList()
+ self.apiKey = None
+
+ @reconstructor
+ def init(self):
+ self.__skillIdMap = {}
+ for skill in self.__skills:
+ self.__skillIdMap[skill.itemID] = skill
+
+ def apiCharList(self, proxy=None):
+ api = eveapi.EVEAPIConnection(proxy=proxy)
+ auth = api.auth(keyID=self.apiID, vCode=self.apiKey)
+ apiResult = auth.account.Characters()
+ return map(lambda c: unicode(c.name), apiResult.characters)
+
+ def apiFetch(self, charName, proxy=None):
+ api = eveapi.EVEAPIConnection(proxy=proxy)
+ auth = api.auth(keyID=self.apiID, vCode=self.apiKey)
+ apiResult = auth.account.Characters()
+ charID = None
+ for char in apiResult.characters:
+ if char.name == charName:
+ charID = char.characterID
+
+ if charID == None:
+ return
+
+ sheet = auth.character(charID).CharacterSheet()
+ del self.__skills[:]
+ self.__skillIdMap.clear()
+ for skillRow in sheet.skills:
+ self.addSkill(Skill(skillRow["typeID"], skillRow["level"]))
+
+ @property
+ def owner(self):
+ return self.__owner
+
+ @owner.setter
+ def owner(self, owner):
+ self.__owner = owner
+
+ def addSkill(self, skill):
+ self.__skills.append(skill)
+ self.__skillIdMap[skill.itemID] = skill
+
+ def removeSkill(self, skill):
+ self.__skills.remove(skill)
+ del self.__skillIdMap[skill.itemID]
+
+ def getSkill(self, item):
+ if isinstance(item, basestring):
+ item = self.getSkillNameMap()[item]
+ elif isinstance(item, int):
+ item = self.getSkillIDMap()[item]
+
+ skill = self.__skillIdMap.get(item.ID)
+
+ if skill is None:
+ if self.defaultLevel is None:
+ skill = Skill(item, 0, False, False)
+ else:
+ skill = Skill(item, self.defaultLevel, False, True)
+
+ self.addSkill(skill)
+
+ return skill
+
+ @property
+ def implants(self):
+ return self.__implants
+
+ def iterSkills(self):
+ if self.defaultLevel is not None:
+ return self.iterDefaultLevel()
+ else:
+ return self.__skills.__iter__()
+
+ def iterDefaultLevel(self):
+ for item in self.getSkillList():
+ yield self.getSkill(item)
+
+ def filteredSkillIncrease(self, filter, *args, **kwargs):
+ for element in self.iterSkills():
+ if filter(element):
+ element.increaseItemAttr(*args, **kwargs)
+
+ def filteredSkillMultiply(self, filter, *args, **kwargs):
+ for element in self.iterSkills():
+ if filter(element):
+ element.multiplyItemAttr(*args, **kwargs)
+
+ def filteredSkillBoost(self, filter, *args, **kwargs):
+ for element in self.iterSkills():
+ if filter(element):
+ element.boostItemAttr(*args, **kwargs)
+
+ def calculateModifiedAttributes(self, fit, runTime, forceProjected = False):
+ if forceProjected: return
+ for skill in self.iterSkills():
+ fit.register(skill)
+ skill.calculateModifiedAttributes(fit, runTime)
+
+ def clear(self):
+ for skill in self.iterSkills():
+ skill.clear()
+
+ def __deepcopy__(self, memo):
+ copy = Character("%s copy" % self.name)
+ copy.apiKey = self.apiKey
+ copy.apiID = self.apiID
+ for skill in self.iterSkills():
+ copy.addSkill(Skill(skill.itemID, skill.level, False, skill.learned))
+
+ return copy
+
+ @validates("ID", "name", "apiKey", "ownerID")
+ def validator(self, key, val):
+ map = {"ID": lambda val: isinstance(val, int),
+ "name" : lambda val: True,
+ "apiKey" : lambda val: val is None or (isinstance(val, basestring) and len(val) > 0),
+ "ownerID" : lambda val: isinstance(val, int)}
+
+ if map[key](val) == False: raise ValueError(str(val) + " is not a valid value for " + key)
+ else: return val
+
+class Skill(HandledItem):
+ def __init__(self, item, level = 0, ro = False, learned = True):
+ self.__item = item if not isinstance(item, int) else None
+ self.itemID = item.ID if not isinstance(item, int) else item
+ self.__level = level if learned else None
+ self.commandBonus = 0
+ self.learned = learned
+ self.build(ro)
+
+ @reconstructor
+ def init(self):
+ self.build(False)
+ self.learned = self.__level is not None
+ self.__item = None
+
+ def build(self, ro):
+ self.__ro = ro
+ self.__suppressed = False
+
+ @property
+ def level(self):
+ if not self.learned: return 0
+ else: return self.__level or 0
+
+ @level.setter
+ def level(self, level):
+ if (level < 0 or level > 5) and level is not None:
+ raise ValueError(str(level) + " is not a valid value for level")
+
+ if hasattr(self, "_Skill__ro") and self.__ro == True:
+ raise ReadOnlyException()
+
+ self.__level = level
+ self.learned = True
+
+ @property
+ def item(self):
+ if self.__item is None:
+ self.__item = item = Character.getSkillIDMap().get(self.itemID)
+ if item is None:
+ #This skill is no longer in the database and thus invalid it, get rid of it.
+ self.character.removeSkill(self)
+
+ return self.__item
+
+ def getModifiedItemAttr(self, key):
+ return self.item.attributes[key].value
+
+ def calculateModifiedAttributes(self, fit, runTime):
+ if self.__suppressed or not self.learned: return
+ item = self.item
+ if item is None:
+ return
+
+ for effect in item.effects.itervalues():
+ if effect.runTime == runTime and effect.isType("passive"):
+ try:
+ effect.handler(fit, self, ("skill",))
+ except AttributeError:
+ continue
+
+ def clear(self):
+ self.__suppressed = False
+ self.commandBonus = 0
+
+ def suppress(self):
+ self.__suppressed = True
+
+ def isSuppressed(self):
+ return self.__suppressed
+
+ @validates("characterID", "skillID", "level")
+ def validator(self, key, val):
+ if hasattr(self, "_Skill__ro") and self.__ro == True and key != "characterID":
+ raise ReadOnlyException()
+
+ map = {"characterID": lambda val: isinstance(val, int),
+ "skillID" : lambda val: isinstance(val, int)}
+
+ if map[key](val) == False: raise ValueError(str(val) + " is not a valid value for " + key)
+ else: return val
+
+ def __deepcopy__(self, memo):
+ copy = Skill(self.item, self.level, self.__ro)
+ return copy
+
+class ReadOnlyException(Exception):
+ pass
diff --git a/eos/saveddata/damagePattern.py b/eos/saveddata/damagePattern.py
new file mode 100755
index 000000000..d2d35be50
--- /dev/null
+++ b/eos/saveddata/damagePattern.py
@@ -0,0 +1,100 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+import re
+
+class DamagePattern(object):
+ DAMAGE_TYPES = ("em", "thermal", "kinetic", "explosive")
+
+ def __init__(self, emAmount = 25, thermalAmount = 25, kineticAmount = 25, explosiveAmount = 25):
+ self.emAmount = emAmount
+ self.thermalAmount = thermalAmount
+ self.kineticAmount = kineticAmount
+ self.explosiveAmount = explosiveAmount
+
+ def calculateEhp(self, fit):
+ ehp = {}
+ for (type, attr) in (('shield', 'shieldCapacity'), ('armor', 'armorHP'), ('hull', 'hp')):
+ rawCapacity = fit.ship.getModifiedItemAttr(attr)
+ ehp[type] = self.effectivify(fit, rawCapacity, type)
+
+ return ehp
+
+ def calculateEffectiveTank(self, fit, tankInfo):
+ ehps = {}
+ passiveShield = fit.calculateShieldRecharge()
+ ehps["passiveShield"] = self.effectivify(fit, passiveShield, "shield")
+ for type in ("shield", "armor", "hull"):
+ ehps["%sRepair" % type] = self.effectivify(fit, tankInfo["%sRepair" % type], type)
+
+ return ehps
+
+ def effectivify(self, fit, amount, type):
+ type = type if type != "hull" else ""
+ totalDamage = sum((self.emAmount, self.thermalAmount, self.kineticAmount, self.explosiveAmount))
+ specificDivider = 0
+ for damageType in self.DAMAGE_TYPES:
+ #Compose an attribute name, then make sure the first letter is NOT capitalized
+ attrName = "%s%sDamageResonance" % (type, damageType.capitalize())
+ attrName = attrName[0].lower() + attrName[1:]
+
+ resonance = fit.ship.getModifiedItemAttr(attrName)
+ damage = getattr(self, "%sAmount" % damageType)
+
+ specificDivider += damage / float(totalDamage or 1) * resonance
+
+ return amount / (specificDivider or 1)
+
+ importMap = {"em": "em",
+ "therm": "thermal",
+ "kin": "kinetic",
+ "exp": "explosive"}
+ @classmethod
+ def importPatterns(cls, text):
+ lines = re.split('[\n\r]+', text)
+ patterns = []
+ for line in lines:
+ line = line.split('#',1)[0] # allows for comments
+ name, data = line.rsplit('=',1)
+ name, data = name.strip(), ''.join(data.split()) # whitespace
+
+ fields = {}
+ for entry in data.split(','):
+ key, val = entry.split(':')
+ fields["%sAmount" % cls.importMap[key.lower()]] = float(val)
+
+ pattern = DamagePattern(**fields)
+ pattern.name = name
+ patterns.append(pattern)
+
+ return patterns
+
+ EXPORT_FORMAT = "%s = EM:%d, Therm:%d, Kin:%d, Exp:%d\n"
+ @classmethod
+ def exportPatterns(cls, *patterns):
+ out = ""
+ for dp in patterns:
+ out += cls.EXPORT_FORMAT % (dp.name, dp.emAmount, dp.thermalAmount, dp.kineticAmount, dp.explosiveAmount)
+
+ return out.strip()
+
+ def __deepcopy__(self, memo):
+ p = DamagePattern(self.emAmount, self.thermalAmount, self.kineticAmount, self.explosiveAmount)
+ p.name = "%s copy" % self.name
+ return p
diff --git a/eos/saveddata/drone.py b/eos/saveddata/drone.py
new file mode 100755
index 000000000..8a064a719
--- /dev/null
+++ b/eos/saveddata/drone.py
@@ -0,0 +1,211 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from eos.modifiedAttributeDict import ModifiedAttributeDict, ItemAttrShortcut, ChargeAttrShortcut
+from eos.effectHandlerHelpers import HandledItem, HandledCharge
+from sqlalchemy.orm import validates, reconstructor
+
+class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
+ DAMAGE_ATTRIBUTES = ("emDamage", "kineticDamage", "explosiveDamage", "thermalDamage")
+
+ def __init__(self, item):
+ if item.category.name != "Drone":
+ raise ValueError("Passed item is not a drone")
+
+ self.__item = item
+ self.__charge = None
+ self.itemID = item.ID
+ self.amount = 0
+ self.amountActive = 0
+ self.__dps = None
+ self.projected = False
+ self.__itemModifiedAttributes = ModifiedAttributeDict()
+ self.itemModifiedAttributes.original = self.item.attributes
+
+ @reconstructor
+ def init(self):
+ self.__dps = None
+ self.__item = None
+ self.__charge = None
+
+ def __fetchItemInfo(self):
+ import eos.db
+ self.__item = eos.db.getItem(self.itemID)
+ self.__charge = None
+ self.__itemModifiedAttributes = ModifiedAttributeDict()
+ self.__itemModifiedAttributes.original = self.item.attributes
+
+ def __fetchChargeInfo(self):
+ chargeID = self.getModifiedItemAttr("entityMissileTypeID")
+ self.__chargeModifiedAttributes = ModifiedAttributeDict()
+ if chargeID is not None:
+ import eos.db
+ charge = eos.db.getItem(int(chargeID))
+ self.__charge = charge
+
+ self.chargeModifiedAttributes.original = charge.attributes
+ else:
+ self.__charge = 0
+
+ @property
+ def itemModifiedAttributes(self):
+ if self.__item is None:
+ self.__fetchItemInfo()
+
+ return self.__itemModifiedAttributes
+
+ @property
+ def chargeModifiedAttributes(self):
+ if self.__charge is None:
+ self.__fetchChargeInfo()
+
+ return self.__chargeModifiedAttributes
+
+ @property
+ def item(self):
+ if self.__item is None:
+ self.__fetchItemInfo()
+
+ return self.__item
+
+ @property
+ def charge(self):
+ if self.__charge is None:
+ self.__fetchChargeInfo()
+
+ return self.__charge if self.__charge != 0 else None
+
+ @property
+ def dealsDamage(self):
+ for attr in ("emDamage", "kineticDamage", "explosiveDamage", "thermalDamage"):
+ if attr in self.itemModifiedAttributes or attr in self.chargeModifiedAttributes:
+ return True
+
+ @property
+ def hasAmmo(self):
+ return self.charge is not None
+
+ @property
+ def dps(self):
+ if self.__dps == None:
+ if self.dealsDamage is True and self.amountActive > 0:
+ if self.hasAmmo:
+ attr = "missileLaunchDuration"
+ getter = self.getModifiedChargeAttr
+ else:
+ attr = "speed"
+ getter = self.getModifiedItemAttr
+
+ cycleTime = self.getModifiedItemAttr(attr)
+ volley = sum(map(lambda d: getter(d), self.DAMAGE_ATTRIBUTES)) * self.amountActive
+ volley *= self.getModifiedItemAttr("damageMultiplier") or 1
+ self.__dps = volley / (cycleTime / 1000.0)
+ else:
+ self.__dps = 0
+
+ return self.__dps
+
+ @property
+ def maxRange(self):
+ attrs = ("shieldTransferRange", "powerTransferRange",
+ "energyDestabilizationRange", "empFieldRange",
+ "ecmBurstRange", "maxRange")
+ for attr in attrs:
+ maxRange = self.getModifiedItemAttr(attr)
+ if maxRange is not None: return maxRange
+ if self.charge is not None:
+ delay = self.getModifiedChargeAttr("explosionDelay")
+ speed = self.getModifiedChargeAttr("maxVelocity")
+ if delay is not None and speed is not None:
+ return delay / 1000.0 * speed
+
+ # Had to add this to match the falloff property in modules.py
+ # Fscking ship scanners. If you find any other falloff attributes,
+ # Put them in the attrs tuple.
+ @property
+ def falloff(self):
+ attrs = ("falloff",)
+ for attr in attrs:
+ falloff = self.getModifiedItemAttr(attr)
+ if falloff is not None: return falloff
+
+ @validates("ID", "itemID", "chargeID", "amount", "amountActive")
+ def validator(self, key, val):
+ map = {"ID": lambda val: isinstance(val, int),
+ "itemID" : lambda val: isinstance(val, int),
+ "chargeID" : lambda val: isinstance(val, int),
+ "amount" : lambda val: isinstance(val, int) and val >= 0,
+ "amountActive" : lambda val: isinstance(val, int) and val <= self.amount and val >= 0}
+
+ if map[key](val) == False: raise ValueError(str(val) + " is not a valid value for " + key)
+ else: return val
+
+ def clear(self):
+ self.__dps = None
+ self.itemModifiedAttributes.clear()
+ self.chargeModifiedAttributes.clear()
+
+ def canBeApplied(self, projectedOnto):
+ """Check if drone can engage specific fitting"""
+ item = self.item
+ if (item.offensive and projectedOnto.ship.getModifiedItemAttr("disallowOffensiveModifiers") == 1) or \
+ (item.assistive and projectedOnto.ship.getModifiedItemAttr("disallowAssistance") == 1):
+ return False
+ else:
+ return True
+
+ def calculateModifiedAttributes(self, fit, runTime, forceProjected = False):
+ if self.projected or forceProjected:
+ context = "projected", "drone"
+ projected = True
+ else:
+ context = ("drone",)
+ projected = False
+
+ for effect in self.item.effects.itervalues():
+ if effect.runTime == runTime and \
+ ((projected == True and effect.isType("projected")) or \
+ projected == False and effect.isType("passive")):
+ i = 0
+ while i != self.amountActive:
+ effect.handler(fit, self, context)
+ i += 1
+
+ if self.charge:
+ for effect in self.charge.effects.itervalues():
+ if effect.runTime == runTime:
+ effect.handler(fit, self, ("droneCharge",))
+
+ def __deepcopy__(self, memo):
+ copy = Drone(self.item)
+ copy.amount = self.amount
+ copy.amountActive = self.amountActive
+ return copy
+
+ def fits(self, fit):
+ fitDroneGroupLimits = set()
+ for i in xrange(1, 3):
+ groneGrp = fit.ship.getModifiedItemAttr("allowedDroneGroup%d" % i)
+ if groneGrp is not None:
+ fitDroneGroupLimits.add(int(groneGrp))
+ if len(fitDroneGroupLimits) == 0:
+ return True
+ if self.item.groupID in fitDroneGroupLimits:
+ return True
+ return False
diff --git a/eos/saveddata/fit.py b/eos/saveddata/fit.py
new file mode 100755
index 000000000..da4870791
--- /dev/null
+++ b/eos/saveddata/fit.py
@@ -0,0 +1,1175 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from eos.effectHandlerHelpers import HandledList, HandledModuleList, HandledDroneList, HandledImplantBoosterList, \
+HandledProjectedFitList, HandledProjectedModList, HandledProjectedDroneList
+from eos.modifiedAttributeDict import ModifiedAttributeDict
+from sqlalchemy.orm import validates, reconstructor
+from itertools import chain
+from eos import capSim
+from copy import deepcopy
+from math import sqrt, log, asinh
+from eos.types import Drone, Ship, Character, State, Slot, Module, Implant, Booster, Skill
+from eos.saveddata.module import State
+import re
+import xml.dom
+import time
+
+try:
+ from collections import OrderedDict
+except ImportError:
+ from gui.utils.compat import OrderedDict
+
+class Fit(object):
+ """Represents a fitting, with modules, ship, implants, etc."""
+ EXTRA_ATTRIBUTES = {"armorRepair": 0,
+ "hullRepair": 0,
+ "shieldRepair": 0,
+ "maxActiveDrones": 0,
+ "maxTargetsLockedFromSkills": 2,
+ "droneControlRange": 20000,
+ "cloaked": False,
+ "siege": False}
+
+ PEAK_RECHARGE = 0.25
+
+ def __init__(self):
+ self.__modules = HandledModuleList()
+ self.__drones = HandledDroneList()
+ self.__implants = HandledImplantBoosterList()
+ self.__boosters = HandledImplantBoosterList()
+ self.__projectedFits = HandledProjectedFitList()
+ self.__projectedModules = HandledProjectedModList()
+ self.__projectedDrones = HandledProjectedDroneList()
+ self.__character = None
+ self.__owner = None
+ self.shipID = None
+ self.projected = False
+ self.name = ""
+ self.fleet = None
+ self.boostsFits = set()
+ self.gangBoosts = None
+ self.timestamp = time.time()
+ self.build()
+
+ @classmethod
+ def importAuto(cls, string, sourceFileName=None):
+ # Get first line and strip space symbols of it
+ # to avoid possible detection errors
+ firstLine = re.split("[\n\r]+", string, maxsplit=1)[0]
+ firstLine = firstLine.strip()
+ # If XML-style start of tag encountered, detect as XML
+ if re.match("<", firstLine):
+ return "XML", cls.importXml(string)
+ # If we've got source file name which is used to describe ship name
+ # and first line contains something like [setup name], detect as eft config file
+ elif re.match("\[.*\]", firstLine) and sourceFileName is not None:
+ shipName = sourceFileName.rsplit('.')[0]
+ return "EFT Config", cls.importEftCfg(shipName, string)
+ # If no file is specified and there's comma between brackets,
+ # consider that we have [ship, setup name] and detect like eft export format
+ elif re.match("\[.*,.*\]", firstLine):
+ return "EFT", (cls.importEft(string),)
+ # Use DNA format for all other cases
+ else:
+ return "DNA", (cls.importDna(string),)
+
+ @classmethod
+ def importDna(cls, string):
+ from eos import db
+ info = string.split(":")
+ f = Fit()
+ f.ship = Ship(db.getItem(int(info[0])))
+ f.name = "{0} - DNA Imported".format(f.ship.item.name)
+ for itemInfo in info[1:]:
+ if itemInfo:
+ itemID, amount = itemInfo.split(";")
+ item = db.getItem(int(itemID), eager="group.category")
+
+ if item.category.name == "Drone":
+ d = Drone(item)
+ d.amount = int(amount)
+ f.drones.append(d)
+ elif item.category.name == "Charge":
+ for i in xrange(int(amount)):
+ for mod in f.modules:
+ if (mod.isValidCharge(item) and mod.charge == None):
+ mod.charge = item
+ break;
+ else:
+ for i in xrange(int(amount)):
+ try:
+ m = Module(item)
+ f.modules.append(m)
+ except:
+ pass
+ if m.isValidState(State.ACTIVE):
+ m.state = State.ACTIVE
+
+ return f
+
+ @classmethod
+ def importEft(cls, eftString):
+ from eos import db
+ offineSuffix = " /OFFLINE"
+ fit = cls()
+ eftString = eftString.strip()
+ lines = re.split('[\n\r]+', eftString)
+ info = lines[0][1:-1].split(",", 1)
+ if len(info) == 2:
+ shipType = info[0].strip()
+ fitName = info[1].strip()
+ else:
+ shipType = info[0].strip()
+ fitName = "Imported %s" % shipType
+
+ try:
+ fit.ship = Ship(db.getItem(shipType))
+ fit.name = fitName
+ except:
+ return
+ droneMap = {}
+ for i in range(1, len(lines)):
+ line = lines[i]
+ setOffline = line.endswith(offineSuffix)
+ if setOffline == True:
+ line = line[:len(line) - len(offineSuffix)]
+ modAmmo = line.split(",")
+ modDrone = modAmmo[0].split(" x")
+ if len(modAmmo) == 2: ammoName = modAmmo[1].strip()
+ else: ammoName = None
+ modName = modDrone[0].strip()
+ if len(modDrone) == 2: droneAmount = modDrone[1].strip()
+ else: droneAmount = None
+ try:
+ item = db.getItem(modName, eager="group.category")
+ except:
+ try:
+ item = db.getItem(modAmmo[0], eager="group.category")
+ except:
+ continue
+
+ if item.category.name == "Drone":
+ droneAmount = int(droneAmount) if droneAmount is not None else 1
+ if not modName in droneMap:
+ droneMap[modName] = 0
+ droneMap[modName] += droneAmount
+ elif item.category.name == "Implant":
+ fit.implants.append(Implant(item))
+ else:
+ m = Module(item)
+ if ammoName:
+ try:
+ m.charge = db.getItem(ammoName)
+ except:
+ pass
+
+ if setOffline == True and m.isValidState(State.OFFLINE):
+ m.state = State.OFFLINE
+ elif m.isValidState(State.ACTIVE):
+ m.state = State.ACTIVE
+
+ fit.modules.append(m)
+
+ for droneName in droneMap:
+ d = Drone(db.getItem(droneName))
+ d.amount = droneMap[droneName]
+ fit.drones.append(d)
+
+ return fit
+
+ @classmethod
+ def importEftCfg(cls, shipname, contents):
+ """Handle import from EFT config store file"""
+ # Check if we have such ship in database, bail if we don't
+ from eos import db
+ try:
+ db.getItem(shipname)
+ except:
+ return
+ # If client didn't take care of encoding file contents into Unicode,
+ # do it using fallback encoding ourselves
+ if isinstance(contents, str):
+ contents = unicode(contents, "cp1252")
+ # List for fits
+ fits = []
+ # List for starting line numbers for each fit
+ fitIndices = []
+ # Separate string into lines
+ lines = re.split('[\n\r]+', contents)
+ for line in lines:
+ # Detect fit header
+ if line[:1] == "[" and line[-1:] == "]":
+ # Line index where current fit starts
+ startPos = lines.index(line)
+ fitIndices.append(startPos)
+
+ for i, startPos in enumerate(fitIndices):
+ # End position is last file line if we're trying to get it for last fit,
+ # or start position of next fit minus 1
+ endPos = len(lines) if i == len(fitIndices) - 1 else fitIndices[i + 1]
+ # Finally, get lines for current fitting
+ fitLines = lines[startPos:endPos]
+ try:
+ # Create fit object
+ f = Fit()
+ # Strip square brackets and pull out a fit name
+ f.name = fitLines[0][1:-1]
+ # Assign ship to fitting
+ f.ship = Ship(db.getItem(shipname))
+ for i in range(1, len(fitLines)):
+ line = fitLines[i]
+ # Parse line into some data we will need
+ misc = re.match("(Drones|Implant|Booster)_(Active|Inactive)=(.+)",line)
+ if misc:
+ entityType = misc.group(1)
+ entityState = misc.group(2)
+ entityData = misc.group(3)
+ if entityType == "Drones":
+ droneData = re.match("(.+),([0-9]+)", entityData)
+ # Get drone name and attempt to detect drone number
+ droneName = droneData.group(1) if droneData else entityData
+ droneAmount = int(droneData.group(2)) if droneData else 1
+ # Bail if we can't get item or it's not from drone category
+ try:
+ droneItem = db.getItem(droneName, eager="group.category")
+ except:
+ continue
+ if droneItem.category.name != "Drone":
+ continue
+ # Add drone to the fitting
+ d = Drone(droneItem)
+ d.amount = droneAmount
+ if entityState == "Active":
+ d.amountActive = droneAmount
+ elif entityState == "Inactive":
+ d.amountActive = 0
+ f.drones.append(d)
+ elif entityType == "Implant":
+ # Bail if we can't get item or it's not from implant category
+ try:
+ implantItem = db.getItem(entityData, eager="group.category")
+ except:
+ continue
+ if implantItem.category.name != "Implant":
+ continue
+ # Add implant to the fitting
+ imp = Implant(implantItem)
+ if entityState == "Active":
+ imp.active = True
+ elif entityState == "Inactive":
+ imp.active = False
+ f.implants.append(imp)
+ elif entityType == "Booster":
+ # Bail if we can't get item or it's not from implant category
+ try:
+ boosterItem = db.getItem(entityData, eager="group.category")
+ except:
+ continue
+ # All boosters have implant category
+ if boosterItem.category.name != "Implant":
+ continue
+ # Add booster to the fitting
+ b = Booster(boosterItem)
+ if entityState == "Active":
+ b.active = True
+ elif entityState == "Inactive":
+ b.active = False
+ f.boosters.append(b)
+ # If we don't have any prefixes, then it's a module
+ else:
+ withCharge = re.match("(.+),(.+)", line)
+ modName = withCharge.group(1) if withCharge else line
+ chargeName = withCharge.group(2) if withCharge else None
+ # If we can't get module item, skip it
+ try:
+ modItem = db.getItem(modName)
+ except:
+ continue
+ # Create module and activate it if it's activable
+ m = Module(modItem)
+ if m.isValidState(State.ACTIVE):
+ m.state = State.ACTIVE
+ # Add charge to mod if applicable, on any errors just don't add anything
+ if chargeName:
+ try:
+ chargeItem = db.getItem(chargeName, eager="group.category")
+ if chargeItem.category.name == "Charge":
+ m.charge = chargeItem
+ except:
+ pass
+ # Append module to fit
+ f.modules.append(m)
+ # Append fit to list of fits
+ fits.append(f)
+ # Skip fit silently if we get an exception
+ except Exception:
+ pass
+
+ return fits
+
+ @classmethod
+ def importXml(cls, text):
+ doc = xml.dom.minidom.parseString(text.encode("utf-8"))
+ fittings = doc.getElementsByTagName("fittings").item(0)
+ fittings = fittings.getElementsByTagName("fitting")
+ fits = []
+ from eos import db
+ for fitting in fittings:
+ try:
+ f = Fit()
+ f.name = fitting.getAttribute("name")
+ shipType = fitting.getElementsByTagName("shipType").item(0).getAttribute("value")
+ f.ship = Ship(db.getItem(shipType))
+ hardwares = fitting.getElementsByTagName("hardware")
+ for hardware in hardwares:
+ moduleName = hardware.getAttribute("type")
+ item = db.getItem(moduleName, eager="group.category")
+ if item:
+ if item.category.name == "Drone":
+ d = Drone(item)
+ d.amount = int(hardware.getAttribute("qty"))
+ f.drones.append(d)
+ else:
+ m = Module(item)
+ if m.isValidState(State.ACTIVE):
+ m.state = State.ACTIVE
+
+ f.modules.append(m)
+
+ fits.append(f)
+ except Exception:
+ pass
+
+ return fits
+
+ EXPORT_ORDER_EFT = [Slot.LOW, Slot.MED, Slot.HIGH, Slot.RIG, Slot.SUBSYSTEM]
+ def exportEft(self):
+ offineSuffix = " /OFFLINE"
+ export = "[%s, %s]\n" % (self.ship.item.name, self.name)
+ stuff = {}
+ for module in self.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:
+ curr += ", %s" % module.charge.name
+ if module.state == State.OFFLINE:
+ curr += offineSuffix
+ curr += "\n"
+ stuff[slot].append(curr)
+
+ for slotType in self.EXPORT_ORDER_EFT:
+ data = stuff.get(slotType)
+ if data is not None:
+ export += "\n"
+ for curr in data:
+ export += curr
+
+ if len(self.drones) > 0:
+ export += "\n\n"
+ for drone in self.drones:
+ export += "%s x%s\n" % (drone.item.name, drone.amount)
+
+ return export
+
+ def exportEftImps(self):
+ export = self.exportEft()
+ if len(self.implants) > 0:
+ export += "\n\n"
+ for implant in self.implants:
+ export += "%s\n" % (implant.item.name)
+ return export
+
+ def exportDna(self):
+ dna = str(self.shipID)
+ mods = OrderedDict()
+ for mod in self.modules:
+ if not mod.isEmpty:
+ if not mod.itemID in mods:
+ mods[mod.itemID] = 0
+ mods[mod.itemID] += 1
+
+ for mod in mods:
+ dna += ":{0};{1}".format(mod, mods[mod])
+
+ for drone in self.drones:
+ dna += ":{0};{1}".format(drone.itemID, drone.amount)
+
+ return dna + "::"
+
+ @classmethod
+ def exportXml(cls, *fits):
+ doc = xml.dom.minidom.Document()
+ fittings = doc.createElement("fittings")
+ doc.appendChild(fittings)
+
+ for fit in fits:
+ fitting = doc.createElement("fitting")
+ fitting.setAttribute("name", fit.name)
+ fittings.appendChild(fitting)
+ description = doc.createElement("description")
+ description.setAttribute("value", "")
+ fitting.appendChild(description)
+ shipType = doc.createElement("shipType")
+ shipType.setAttribute("value", fit.ship.item.name)
+ fitting.appendChild(shipType)
+
+ slotNum = {}
+ for module in fit.modules:
+ if module.isEmpty:
+ continue
+
+ slot = module.slot
+ if not slot in slotNum: slotNum[slot] = 0
+ slotId = slotNum[slot]
+ slotNum[slot] += 1
+ hardware = doc.createElement("hardware")
+ hardware.setAttribute("type", module.item.name)
+ slotName = Slot.getName(slot).lower()
+ slotName = slotName if slotName != "high" else "hi"
+ hardware.setAttribute("slot", "%s slot %d" % (slotName, slotId))
+ fitting.appendChild(hardware)
+
+ for drone in fit.drones:
+ hardware = doc.createElement("hardware")
+ hardware.setAttribute("qty", "%d" % drone.amount)
+ hardware.setAttribute("slot", "drone bay")
+ hardware.setAttribute("type", drone.item.name)
+ fitting.appendChild(hardware)
+
+ return doc.toprettyxml()
+
+ @reconstructor
+ def init(self):
+ self.build()
+
+ def build(self):
+ from eos import db
+ self.__extraDrains = []
+ self.__ehp = None
+ self.__weaponDPS = None
+ self.__weaponVolley = None
+ self.__droneDPS = None
+ self.__sustainableTank = None
+ self.__effectiveSustainableTank = None
+ self.__effectiveTank = None
+ self.__calculated = False
+ self.__capStable = None
+ self.__capState = None
+ self.__capUsed = None
+ self.__capRecharge = None
+ self.__calculatedTargets = []
+ self.factorReload = False
+ self.fleet = None
+ self.boostsFits = set()
+ self.gangBoosts = None
+ self.extraAttributes = ModifiedAttributeDict(self)
+ self.extraAttributes.original = self.EXTRA_ATTRIBUTES
+ self.ship = Ship(db.getItem(self.shipID)) if self.shipID is not None else None
+
+ @property
+ def damagePattern(self):
+ return self.__damagePattern
+
+ @damagePattern.setter
+ def damagePattern(self, damagePattern):
+ self.__damagePattern = damagePattern
+ self.__ehp = None
+ self.__effectiveTank = None
+
+ @property
+ def character(self):
+ return self.__character if self.__character is not None else Character.getAll0()
+
+ @character.setter
+ def character(self, char):
+ self.__character = char
+
+ @property
+ def ship(self):
+ return self.__ship
+
+ @ship.setter
+ def ship(self, ship):
+ self.__ship = ship
+ self.shipID = ship.item.ID if ship is not None else None
+
+ @property
+ def drones(self):
+ return self.__drones
+
+ @property
+ def modules(self):
+ return self.__modules
+
+ @property
+ def implants(self):
+ return self.__implants
+
+ @property
+ def boosters(self):
+ return self.__boosters
+
+ @property
+ def projectedModules(self):
+ return self.__projectedModules
+
+ @property
+ def projectedFits(self):
+ return self.__projectedFits
+
+ @property
+ def projectedDrones(self):
+ return self.__projectedDrones
+
+ @property
+ def weaponDPS(self):
+ if self.__weaponDPS is None:
+ self.calculateWeaponStats()
+
+ return self.__weaponDPS
+
+ @property
+ def weaponVolley(self):
+ if self.__weaponVolley is None:
+ self.calculateWeaponStats()
+
+ return self.__weaponVolley
+
+ @property
+ def droneDPS(self):
+ if self.__droneDPS is None:
+ self.calculateWeaponStats()
+
+ return self.__droneDPS
+
+ @property
+ def totalDPS(self):
+ return self.droneDPS + self.weaponDPS
+
+ @property
+ def maxTargets(self):
+ return min(self.extraAttributes["maxTargetsLockedFromSkills"], self.ship.getModifiedItemAttr("maxLockedTargets"))
+
+ @property
+ def maxTargetRange(self):
+ return min(self.ship.getModifiedItemAttr("maxTargetRange"), 250000)
+
+ @property
+ def scanStrength(self):
+ return max([self.ship.getModifiedItemAttr("scan%sStrength" % scanType)
+ for scanType in ("Magnetometric", "Ladar", "Radar", "Gravimetric")])
+
+ @property
+ def scanType(self):
+ maxStr = -1
+ type = None
+ for scanType in ("Magnetometric", "Ladar", "Radar", "Gravimetric"):
+ currStr = self.ship.getModifiedItemAttr("scan%sStrength" % scanType)
+ if currStr > maxStr:
+ maxStr = currStr
+ type = scanType
+ elif currStr == maxStr:
+ type = "Multispectral"
+
+ return type
+
+ @property
+ def alignTime(self):
+ agility = self.ship.getModifiedItemAttr("agility")
+ mass = self.ship.getModifiedItemAttr("mass")
+
+ return -log(0.25) * agility * mass / 1000000
+
+ @property
+ def appliedImplants(self):
+ implantsBySlot = {}
+ if self.character:
+ for implant in self.character.implants:
+ implantsBySlot[implant.slot] = implant
+
+ for implant in self.implants:
+ implantsBySlot[implant.slot] = implant
+
+ return implantsBySlot.values()
+
+ @validates("ID", "ownerID", "shipID")
+ def validator(self, key, val):
+ map = {"ID": lambda val: isinstance(val, int),
+ "ownerID" : lambda val: isinstance(val, int),
+ "shipID" : lambda val: isinstance(val, int) or val is None}
+
+ if map[key](val) == False: raise ValueError(str(val) + " is not a valid value for " + key)
+ else: return val
+
+ def clear(self):
+ self.__effectiveTank = None
+ self.__weaponDPS = None
+ self.__weaponVolley = None
+ self.__effectiveSustainableTank = None
+ self.__sustainableTank = None
+ self.__droneDPS = None
+ self.__ehp = None
+ self.__calculated = False
+ self.__capStable = None
+ self.__capState = None
+ self.__capUsed = None
+ self.__capRecharge = None
+ del self.__calculatedTargets[:]
+ del self.__extraDrains[:]
+
+ if self.ship is not None: self.ship.clear()
+ c = chain(self.modules, self.drones, self.boosters, self.implants, self.projectedDrones, self.projectedModules, self.projectedFits, (self.character, self.extraAttributes))
+ for stuff in c:
+ if stuff is not None and stuff != self: stuff.clear()
+
+ #Methods to register and get the thing currently affecting the fit,
+ #so we can correctly map "Affected By"
+ def register(self, currModifier):
+ self.__modifier = currModifier
+ if hasattr(currModifier, "itemModifiedAttributes"):
+ currModifier.itemModifiedAttributes.fit = self
+ if hasattr(currModifier, "chargeModifiedAttributes"):
+ currModifier.chargeModifiedAttributes.fit = self
+
+ def getModifier(self):
+ return self.__modifier
+
+ def calculateModifiedAttributes(self, targetFit=None, withBoosters=False, dirtyStorage=None):
+ refreshBoosts = False
+ if withBoosters is True:
+ refreshBoosts = True
+ if dirtyStorage is not None and self.ID in dirtyStorage:
+ refreshBoosts = True
+ if dirtyStorage is not None:
+ dirtyStorage.update(self.boostsFits)
+ if self.fleet is not None and refreshBoosts is True:
+ self.gangBoosts = self.fleet.recalculateLinear(withBoosters=withBoosters, dirtyStorage=dirtyStorage)
+ elif self.fleet is None:
+ self.gangBoosts = None
+ if dirtyStorage is not None:
+ try:
+ dirtyStorage.remove(self.ID)
+ except KeyError:
+ pass
+ # If we're not explicitly asked to project fit onto something,
+ # set self as target fit
+ if targetFit is None:
+ targetFit = self
+ forceProjected = False
+ # Else, we're checking all target projectee fits
+ elif targetFit not in self.__calculatedTargets:
+ self.__calculatedTargets.append(targetFit)
+ targetFit.calculateModifiedAttributes(dirtyStorage=dirtyStorage)
+ forceProjected = True
+ # Or do nothing if target fit is calculated
+ else:
+ return
+
+ # If fit is calculated and we have nothing to do here, get out
+ if self.__calculated == True and forceProjected == False:
+ return
+
+ # Mark fit as calculated
+ self.__calculated = True
+
+ # There's a few things to keep in mind here
+ # 1: Early effects first, then regular ones, then late ones, regardless of anything else
+ # 2: Some effects aren't implemented
+ # 3: Some effects are implemented poorly and will just explode on us
+ # 4: Errors should be handled gracefully and preferably without crashing unless serious
+ for runTime in ("early", "normal", "late"):
+ # Build a little chain of stuff
+ # Avoid adding projected drones and modules when fit is projected onto self
+ # TODO: remove this workaround when proper self-projection using virtual duplicate fits is implemented
+ if targetFit == self and forceProjected is True:
+ c = chain((self.character, self.ship), self.drones, self.boosters, self.appliedImplants, self.modules)
+ else:
+ c = chain((self.character, self.ship), self.drones, self.boosters, self.appliedImplants, self.modules,
+ self.projectedDrones, self.projectedModules)
+
+ for item in c:
+ # Registering the item about to affect the fit allows us to track "Affected By" relations correctly
+ if item is not None:
+ self.register(item)
+ item.calculateModifiedAttributes(self, runTime, False)
+ if forceProjected is True:
+ targetFit.register(item)
+ item.calculateModifiedAttributes(targetFit, runTime, True)
+ if self.gangBoosts is not None:
+ #print self.gangBoosts
+ contextMap = {Skill: "skill",
+ Ship: "ship",
+ Module: "module",
+ Implant: "implant"}
+ for name, info in self.gangBoosts.iteritems():
+ # Unpack all data required to run effect properly
+ effect, thing = info[1]
+ if effect.runTime == runTime:
+ context = ("gang", contextMap[type(thing)])
+ if isinstance(thing, Module):
+ if effect.isType("offline") or (effect.isType("passive") and thing.state >= State.ONLINE) or \
+ (effect.isType("active") and thing.state >= State.ACTIVE):
+ # Run effect, and get proper bonuses applied
+ try:
+ effect.handler(targetFit, thing, context)
+ except:
+ pass
+ else:
+ # Run effect, and get proper bonuses applied
+ try:
+ effect.handler(targetFit, thing, context)
+ except:
+ pass
+ for fit in self.projectedFits:
+ fit.calculateModifiedAttributes(self, dirtyStorage=dirtyStorage)
+
+ def fill(self):
+ """
+ Fill this fit's module slots with enough dummy slots so that all slots are used.
+ This is mostly for making the life of gui's easier.
+ GUI's can call fill() and then stop caring about empty slots completely.
+ """
+ if self.ship is None:
+ return
+
+ for slotType in (Slot.LOW, Slot.MED, Slot.HIGH, Slot.RIG, Slot.SUBSYSTEM):
+ amount = self.getSlotsFree(slotType, True)
+ if amount > 0:
+ for _ in xrange(int(amount)):
+ self.modules.append(Module.buildEmpty(slotType))
+
+ if amount < 0:
+ #Look for any dummies of that type to remove
+ toRemove = []
+ for mod in self.modules:
+ if mod.isEmpty and mod.slot == slotType:
+ toRemove.append(mod)
+ amount += 1
+ if amount == 0:
+ break
+ for mod in toRemove:
+ self.modules.remove(mod)
+
+ def unfill(self):
+ for i in xrange(len(self.modules) - 1, -1, -1):
+ mod = self.modules[i]
+ if mod.isEmpty:
+ del self.modules[i]
+
+ def getItemAttrSum(self, dict, attr):
+ amount = 0
+ for mod in dict:
+ add = mod.getModifiedItemAttr(attr)
+ if add is not None:
+ amount += add
+
+ return amount
+
+ def getItemAttrOnlineSum(self, dict, attr):
+ amount = 0
+ for mod in dict:
+ add = mod.getModifiedItemAttr(attr) if mod.state >= State.ONLINE else None
+ if add is not None:
+ amount += add
+
+ return amount
+
+ def getHardpointsUsed(self, type):
+ amount = 0
+ for mod in self.modules:
+ if mod.hardpoint is type and not mod.isEmpty:
+ amount += 1
+
+ return amount
+
+ def getSlotsUsed(self, type, countDummies=False):
+ amount = 0
+ for mod in self.modules:
+ if mod.slot is type and (not mod.isEmpty or countDummies):
+ amount += 1
+
+ return amount
+
+ def getSlotsFree(self, type, countDummies=False):
+ slots = {Slot.LOW: "lowSlots",
+ Slot.MED: "medSlots",
+ Slot.HIGH: "hiSlots",
+ Slot.RIG: "rigSlots",
+ Slot.SUBSYSTEM: "maxSubSystems"}
+
+ slotsUsed = self.getSlotsUsed(type, countDummies)
+ totalSlots = self.ship.getModifiedItemAttr(slots[type]) or 0
+ return int(totalSlots - slotsUsed)
+
+ @property
+ def calibrationUsed(self):
+ return self.getItemAttrSum(self.modules, 'upgradeCost')
+
+ @property
+ def pgUsed(self):
+ return self.getItemAttrOnlineSum(self.modules, "power")
+
+ @property
+ def cpuUsed(self):
+ return self.getItemAttrOnlineSum(self.modules, "cpu")
+
+ @property
+ def droneBandwidthUsed(self):
+ amount = 0
+ for d in self.drones:
+ amount += d.getModifiedItemAttr("droneBandwidthUsed") * d.amountActive
+
+ return amount
+
+ @property
+ def droneBayUsed(self):
+ amount = 0
+ for d in self.drones:
+ amount += d.item.volume * d.amount
+
+ return amount
+
+ @property
+ def activeDrones(self):
+ amount = 0
+ for d in self.drones:
+ amount +=d.amountActive
+
+ return amount
+
+ # Expresses how difficult a target is to probe down with scan probes
+ # If this is <1.08, the ship is unproabeable
+ @property
+ def probeSize(self):
+ sigRad = self.ship.getModifiedItemAttr("signatureRadius")
+ sensorStr = float(self.scanStrength)
+ probeSize = sigRad / sensorStr if sensorStr != 0 else None
+ # http://www.eveonline.com/ingameboard.asp?a=topic&threadID=1532170&page=2#42
+ if probeSize is not None:
+ # http://forum.eve-ru.com/index.php?showtopic=74195&view=findpost&p=1333691
+ # http://forum.eve-ru.com/index.php?showtopic=74195&view=findpost&p=1333763
+ # Tests by tester128 and several conclusions by me, prove that cap is in range
+ # from 1.1 to 1.12, we're picking average value
+ probeSize = max(probeSize, 1.11)
+ return probeSize
+
+ @property
+ def warpSpeed(self):
+ base = self.ship.getModifiedItemAttr("baseWarpSpeed") or 1
+ multiplier = self.ship.getModifiedItemAttr("warpSpeedMultiplier") or 1
+ return 3 * base * multiplier
+
+ @property
+ def maxWarpDistance(self):
+ capacity = self.ship.getModifiedItemAttr("capacitorCapacity")
+ mass = self.ship.getModifiedItemAttr("mass")
+ warpCapNeed = self.ship.getModifiedItemAttr("warpCapacitorNeed")
+ return capacity / (mass * warpCapNeed)
+
+ @property
+ def capStable(self):
+ if self.__capStable is None:
+ self.simulateCap()
+
+ return self.__capStable
+
+ @property
+ def capState(self):
+ """
+ If the cap is stable, the capacitor state is the % at which it is stable.
+ If the cap is unstable, this is the amount of time before it runs out
+ """
+ if self.__capState is None:
+ self.simulateCap()
+
+ return self.__capState
+
+ @property
+ def capUsed(self):
+ if self.__capUsed is None:
+ self.simulateCap()
+
+ return self.__capUsed
+
+ @property
+ def capRecharge(self):
+ if self.__capRecharge is None:
+ self.simulateCap()
+
+ return self.__capRecharge
+
+
+ @property
+ def sustainableTank(self):
+ if self.__sustainableTank is None:
+ self.calculateSustainableTank()
+
+ return self.__sustainableTank
+
+ def calculateSustainableTank(self, effective=True):
+ if self.__sustainableTank is None:
+ if self.capStable:
+ sustainable = {}
+ sustainable["armorRepair"] = self.extraAttributes["armorRepair"]
+ sustainable["shieldRepair"] = self.extraAttributes["shieldRepair"]
+ sustainable["hullRepair"] = self.extraAttributes["hullRepair"]
+ else:
+ sustainable = {}
+
+ repairers = []
+ #Map a repairer type to the attribute it uses
+ groupAttrMap = {"Armor Repair Unit": "armorDamageAmount",
+ "Fueled Armor Repairer": "armorDamageAmount",
+ "Hull Repair Unit": "structureDamageAmount",
+ "Shield Booster": "shieldBonus",
+ "Fueled Shield Booster": "shieldBonus",
+ "Armor Repair Projector": "armorDamageAmount",
+ "Shield Transporter": "shieldBonus"}
+ #Map repairer type to attribute
+ groupStoreMap = {"Armor Repair Unit": "armorRepair",
+ "Hull Repair Unit": "hullRepair",
+ "Shield Booster": "shieldRepair",
+ "Fueled Shield Booster": "shieldRepair",
+ "Armor Repair Projector": "armorRepair",
+ "Shield Transporter": "shieldRepair",
+ "Fueled Armor Repairer": "armorRepair",}
+
+ capUsed = self.capUsed
+ for attr in ("shieldRepair", "armorRepair", "hullRepair"):
+ sustainable[attr] = self.extraAttributes[attr]
+ dict = self.extraAttributes.getAfflictions(attr)
+ if self in dict:
+ for mod, _, amount in dict[self]:
+ if mod.projected is False:
+ usesCap = True
+ try:
+ if mod.capUse:
+ capUsed -= mod.capUse
+ else:
+ usesCap = False
+ except AttributeError:
+ usesCap = False
+ # Modules which do not use cap are not penalized based on cap use
+ if usesCap:
+ cycleTime = mod.getModifiedItemAttr("duration")
+ amount = mod.getModifiedItemAttr(groupAttrMap[mod.item.group.name])
+ sustainable[attr] -= amount / (cycleTime / 1000.0)
+ repairers.append(mod)
+
+
+ #Sort repairers by efficiency. We want to use the most efficient repairers first
+ repairers.sort(key=lambda mod: mod.getModifiedItemAttr(groupAttrMap[mod.item.group.name]) / mod.getModifiedItemAttr("capacitorNeed"), reverse = True)
+
+ #Loop through every module until we're above peak recharge
+ #Most efficient first, as we sorted earlier.
+ #calculate how much the repper can rep stability & add to total
+ totalPeakRecharge = self.capRecharge
+ for mod in repairers:
+ if capUsed > totalPeakRecharge: break
+ cycleTime = mod.cycleTime
+ capPerSec = mod.capUse
+ if capPerSec is not None and cycleTime is not None:
+ #Check how much this repper can work
+ sustainability = min(1, (totalPeakRecharge - capUsed) / capPerSec)
+
+ #Add the sustainable amount
+ amount = mod.getModifiedItemAttr(groupAttrMap[mod.item.group.name])
+ sustainable[groupStoreMap[mod.item.group.name]] += sustainability * (amount / (cycleTime / 1000.0))
+ capUsed += capPerSec
+
+ sustainable["passiveShield"] = self.calculateShieldRecharge()
+ self.__sustainableTank = sustainable
+
+ return self.__sustainableTank
+
+ def calculateCapRecharge(self, percent = PEAK_RECHARGE):
+ capacity = self.ship.getModifiedItemAttr("capacitorCapacity")
+ rechargeRate = self.ship.getModifiedItemAttr("rechargeRate") / 1000.0
+ return 10 / rechargeRate * sqrt(percent) * (1 - sqrt(percent)) * capacity
+
+ def calculateShieldRecharge(self, percent = PEAK_RECHARGE):
+ capacity = self.ship.getModifiedItemAttr("shieldCapacity")
+ rechargeRate = self.ship.getModifiedItemAttr("shieldRechargeRate") / 1000.0
+ return 10 / rechargeRate * sqrt(percent) * (1 - sqrt(percent)) * capacity
+
+ def addDrain(self, cycleTime, capNeed, clipSize=0):
+ self.__extraDrains.append((cycleTime, capNeed, clipSize))
+
+ def removeDrain(self, i):
+ del self.__extraDrains[i]
+
+ def iterDrains(self):
+ return self.__extraDrains.__iter__()
+
+ def __generateDrain(self):
+ drains = []
+ capUsed = 0
+ capAdded = 0
+ for mod in self.modules:
+ if mod.state >= State.ACTIVE:
+ cycleTime = mod.rawCycleTime or 0
+ reactivationTime = mod.getModifiedItemAttr("moduleReactivationDelay") or 0
+ fullCycleTime = cycleTime + reactivationTime
+ if fullCycleTime > 0:
+ capNeed = mod.capUse
+ if capNeed > 0:
+ capUsed += capNeed
+ else:
+ capAdded -= capNeed
+
+ drains.append((int(fullCycleTime), mod.getModifiedItemAttr("capacitorNeed") or 0, mod.numShots or 0))
+
+ for fullCycleTime, capNeed, clipSize in self.iterDrains():
+ drains.append((int(fullCycleTime), capNeed, clipSize))
+ if capNeed > 0:
+ capUsed += capNeed / (fullCycleTime / 1000.0)
+ else:
+ capAdded += -capNeed / (fullCycleTime / 1000.0)
+
+ return drains, capUsed, capAdded
+
+ def simulateCap(self):
+ drains, self.__capUsed, self.__capRecharge = self.__generateDrain()
+ self.__capRecharge += self.calculateCapRecharge()
+ if len(drains) > 0:
+ sim = capSim.CapSimulator()
+ sim.init(drains)
+ sim.capacitorCapacity = self.ship.getModifiedItemAttr("capacitorCapacity")
+ sim.capacitorRecharge = self.ship.getModifiedItemAttr("rechargeRate")
+ sim.stagger = True
+ sim.scale = False
+ sim.t_max = 6 * 60 * 60 * 1000
+ sim.reload = self.factorReload
+ sim.run()
+
+ capState = (sim.cap_stable_low + sim.cap_stable_high) / (2 * sim.capacitorCapacity)
+ self.__capStable = capState > 0
+ self.__capState = min(100, capState * 100) if self.__capStable else sim.t / 1000.0
+ else:
+ self.__capStable = True
+ self.__capState = 100
+
+ @property
+ def hp(self):
+ hp = {}
+ for (type, attr) in (('shield', 'shieldCapacity'), ('armor', 'armorHP'), ('hull', 'hp')):
+ hp[type] = self.ship.getModifiedItemAttr(attr)
+
+ return hp
+
+ @property
+ def ehp(self):
+ if self.__ehp is None:
+ if self.damagePattern is None:
+ ehp = self.hp
+ else:
+ ehp = self.damagePattern.calculateEhp(self)
+ self.__ehp = ehp
+
+ return self.__ehp
+
+ @property
+ def tank(self):
+ hps = {"passiveShield" : self.calculateShieldRecharge()}
+ for type in ("shield", "armor", "hull"):
+ hps["%sRepair" % type] = self.extraAttributes["%sRepair" % type]
+
+ return hps
+
+ @property
+ def effectiveTank(self):
+ if self.__effectiveTank is None:
+ if self.damagePattern is None:
+ ehps = self.tank
+ else:
+ ehps = self.damagePattern.calculateEffectiveTank(self, self.extraAttributes)
+
+ self.__effectiveTank = ehps
+
+ return self.__effectiveTank
+
+ @property
+ def effectiveSustainableTank(self):
+ if self.__effectiveSustainableTank is None:
+ if self.damagePattern is None:
+ eshps = self.sustainableTank
+ else:
+ eshps = self.damagePattern.calculateEffectiveTank(self, self.sustainableTank)
+
+ self.__effectiveSustainableTank = eshps
+
+ return self.__effectiveSustainableTank
+
+
+ def calculateLockTime(self, radius):
+ scanRes = self.ship.getModifiedItemAttr("scanResolution")
+ if scanRes is not None and scanRes > 0:
+ # Yes, this function returns time in seconds, not miliseconds.
+ # 40,000 is indeed the correct constant here.
+ return min(40000 / scanRes / asinh(radius)**2, 30*60)
+ else:
+ return self.ship.getModifiedItemAttr("scanSpeed") / 1000.0
+
+ def calculateWeaponStats(self):
+ weaponDPS = 0
+ droneDPS = 0
+ weaponVolley = 0
+
+ for mod in self.modules:
+ dps, volley = mod.damageStats
+ weaponDPS += dps
+ weaponVolley += volley
+
+ for drone in self.drones:
+ droneDPS += drone.dps
+
+ self.__weaponDPS = weaponDPS
+ self.__weaponVolley = weaponVolley
+ self.__droneDPS = droneDPS
+
+ @property
+ def fits(self):
+ for mod in self.modules:
+ if not mod.fits(self):
+ return False
+
+ return True
+
+ def __deepcopy__(self, memo):
+ copy = Fit()
+ #Character and owner are not copied
+ copy.character = self.__character
+ copy.owner = self.owner
+ copy.ship = deepcopy(self.ship, memo)
+ copy.name = "%s copy" % self.name
+ copy.damagePattern = self.damagePattern
+
+ toCopy = ("modules", "drones", "implants", "boosters", "projectedModules", "projectedDrones")
+ for name in toCopy:
+ orig = getattr(self, name)
+ c = getattr(copy, name)
+ for i in orig:
+ c.append(deepcopy(i, memo))
+
+ for fit in self.projectedFits:
+ copy.projectedFits.append(fit)
+
+ return copy
diff --git a/eos/saveddata/fleet.py b/eos/saveddata/fleet.py
new file mode 100755
index 000000000..f1445ae3a
--- /dev/null
+++ b/eos/saveddata/fleet.py
@@ -0,0 +1,319 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from itertools import chain
+from eos.types import Skill, Module, Ship
+from copy import deepcopy
+
+class Fleet(object):
+ def calculateModifiedAttributes(self):
+ #Make sure ALL fits in the gang have been calculated
+ for c in chain(self.wings, (self.leader,)):
+ if c is not None: c.calculateModifiedAttributes()
+
+ leader = self.leader
+ self.booster = booster = self.booster if self.booster is not None else leader
+ self.broken = False
+ self.store = store = Store()
+ store.set(booster, "fleet")
+ #Go all the way down for each subtree we have.
+ for wing in self.wings:
+ wing.calculateGangBonusses(store)
+
+ # Check skill requirements and wing amount to see if we break or not
+ if len(self.wings) == 0 or leader is None or leader.character is None or leader.character.getSkill("Fleet Command").level < len(self.wings):
+ self.broken = True
+
+ #Now calculate our own if we aren't broken
+ if self.broken == False:
+ #We only get our own bonuses *Sadface*
+ store.apply(leader, "fleet")
+
+ def recalculateLinear(self, withBoosters=True, dirtyStorage=None):
+ self.store = Store()
+ self.linearBoosts = {}
+ if withBoosters is True:
+ if self.leader is not None and self.leader.character is not None and self.leader.character.getSkill("Fleet Command").level >= 1:
+ self.leader.boostsFits.add(self.wings[0].squads[0].members[0].ID)
+ self.leader.calculateModifiedAttributes()
+ self.store.set(self.leader, "squad", clearingUpdate=True)
+ else:
+ self.store = Store()
+ if self.leader is not None:
+ try:
+ self.leader.boostsFits.remove(self.wings[0].squads[0].members[0].ID)
+ except KeyError:
+ pass
+ self.wings[0].recalculateLinear(self.store, withBoosters=withBoosters, dirtyStorage=dirtyStorage)
+ return self.linearBoosts
+
+ def count(self):
+ total = 0
+ for wing in self.wings:
+ total += wing.count()
+
+ return total
+
+ def extend(self):
+ self.wings.append(Wing())
+
+ def __deepcopy__(self, memo):
+ copy = Fleet()
+ copy.name = self.name
+ copy.booster = deepcopy(self.booster)
+ copy.leader = deepcopy(self.leader)
+ for wing in self.wings:
+ copy.wings.append(deepcopy(wing))
+
+ return copy
+
+class Wing(object):
+ def calculateModifiedAttributes(self):
+ for c in chain(self.squads, (self.leader,)):
+ if c is not None: c.calculateModifiedAttributes()
+
+ def calculateGangBonusses(self, store):
+ self.broken = False
+ leader = self.leader
+ self.booster = booster = self.booster if self.booster is not None else leader
+
+ store.set(booster, "wing")
+
+ #ALWAYS move down
+ for squad in self.squads:
+ squad.calculateGangBonusses(store)
+
+ # Check skill requirements and squad amount to see if we break or not
+ if len(self.squads) == 0 or leader is None or leader.character is None or leader.character.getSkill("Wing Command").level < len(self.squads):
+ self.broken = True
+
+ #Check if we aren't broken, if we aren't, boost
+ if self.broken == False:
+ store.apply(leader, "wing")
+ else:
+ #We broke, don't go up
+ self.gang.broken = True
+
+ def recalculateLinear(self, store, withBoosters=True, dirtyStorage=None):
+ if withBoosters is True:
+ if self.leader is not None and self.leader.character is not None and self.leader.character.getSkill("Wing Command").level >= 1:
+ self.leader.boostsFits.add(self.squads[0].members[0].ID)
+ self.leader.calculateModifiedAttributes()
+ store.set(self.leader, "squad", clearingUpdate=False)
+ else:
+ store = Store()
+ if self.gang.leader is not None:
+ try:
+ self.gang.leader.boostsFits.remove(self.squads[0].members[0].ID)
+ except KeyError:
+ pass
+ if self.leader is not None:
+ try:
+ self.leader.boostsFits.remove(self.squads[0].members[0].ID)
+ except KeyError:
+ pass
+ self.squads[0].recalculateLinear(store, withBoosters=withBoosters, dirtyStorage=dirtyStorage)
+
+ def count(self):
+ total = 0 if self.leader is None else 1
+ for squad in self.squads:
+ total += squad.count()
+
+ return total
+
+ def extend(self):
+ self.squads.append(Squad())
+
+ def __deepcopy__(self, memo):
+ copy = Wing()
+ copy.booster = deepcopy(self.booster)
+ copy.leader = deepcopy(self.leader)
+ for squad in self.squads:
+ copy.squads.append(deepcopy(squad))
+
+ return copy
+
+
+class Squad(object):
+ def calculateModifiedAttributes(self):
+ for member in self.members:
+ member.calculateModifiedAttributes()
+
+ def calculateGangBonusses(self, store):
+ self.broken = False
+ leader = self.leader
+ self.booster = booster = self.booster if self.booster is not None else leader
+ store.set(booster, "squad")
+
+ # Check skill requirements and squad size to see if we break or not
+ if len(self.members) <= 0 or leader is None or leader.character is None or leader.character.getSkill("Leadership").level * 2 < len(self.members):
+ self.broken = True
+
+ if self.broken == False:
+ for member in self.members:
+ store.apply(member, "squad")
+ else:
+ self.wing.broken = True
+
+ def recalculateLinear(self, store, withBoosters=True, dirtyStorage=None):
+ if withBoosters is True:
+ if self.leader is not None and self.leader.character is not None and self.leader.character.getSkill("Leadership").level >= 1:
+ self.leader.boostsFits.add(self.members[0].ID)
+ self.leader.calculateModifiedAttributes(dirtyStorage=dirtyStorage)
+ store.set(self.leader, "squad", clearingUpdate=False)
+ else:
+ store = Store()
+ if self.leader is not None:
+ try:
+ self.leader.boostsFits.remove(self.members[0].ID)
+ except KeyError:
+ pass
+ if self.wing.leader is not None:
+ try:
+ self.wing.leader.boostsFits.remove(self.members[0].ID)
+ except KeyError:
+ pass
+ if self.wing.gang.leader is not None:
+ try:
+ self.wing.gang.leader.boostsFits.remove(self.members[0].ID)
+ except KeyError:
+ pass
+ if getattr(self.wing.gang, "linearBoosts", None) is None:
+ self.wing.gang.linearBoosts = {}
+ dict = store.bonuses["squad"]
+ for boostedAttr, boostInfoList in dict.iteritems():
+ for boostInfo in boostInfoList:
+ effect, thing = boostInfo
+ # Get current boost value for given attribute, use 0 as fallback if
+ # no boosts applied yet
+ currBoostAmount = self.wing.gang.linearBoosts.get(boostedAttr, (0,))[0]
+ # Attribute name which is used to get boost value
+ newBoostAttr = effect.getattr("gangBonus") or "commandBonus"
+ # Get boost amount for current boost
+ newBoostAmount = thing.getModifiedItemAttr(newBoostAttr) or 0
+ # If skill takes part in gang boosting, multiply by skill level
+ if type(thing) == Skill:
+ newBoostAmount *= thing.level
+ # If new boost is more powerful, replace older one with it
+ if abs(newBoostAmount) > abs(currBoostAmount):
+ self.wing.gang.linearBoosts[boostedAttr] = (newBoostAmount, boostInfo)
+
+ def count(self):
+ return len(self.members)
+
+ def __deepcopy__(self, memo):
+ copy = Squad()
+ copy.booster = deepcopy(self.booster)
+ copy.leader = deepcopy(self.leader)
+ for member in self.members:
+ copy.members.append(deepcopy(member))
+
+ return copy
+
+class Store(object):
+ def __init__(self):
+ # Container for gang boosters and their respective bonuses, three-layered
+ self.bonuses = {}
+ for dictType in ("fleet", "wing", "squad"):
+ self.bonuses[dictType] = {}
+ # Container for boosted fits and corresponding boosts applied onto them
+ self.boosts = {}
+
+ def set(self, fitBooster, layer, clearingUpdate=True):
+ """Add all gang boosts of given fit for given layer to boost store"""
+ if fitBooster is None:
+ return
+
+ # This dict contains all bonuses for specified layer
+ dict = self.bonuses[layer]
+ if clearingUpdate is True:
+ # Clear existing bonuses
+ dict.clear()
+
+ # Go through everything which can be used as gang booster
+ for thing in chain(fitBooster.modules, fitBooster.implants, fitBooster.character.iterSkills(), (fitBooster.ship,)):
+ if thing.item is None:
+ continue
+ for effect in thing.item.effects.itervalues():
+ # And check if it actually has gang boosting effects
+ if effect.isType("gang"):
+ # Attribute which is boosted
+ boostedAttr = effect.getattr("gangBoost")
+ # List which contains all bonuses for given attribute for given layer
+ l = dict.get(boostedAttr)
+ # If there was no list, create it
+ if l is None:
+ l = dict[boostedAttr] = []
+ # And append effect which is used to boost stuff and carrier of this effect
+ l.append((effect, thing))
+
+ contextMap = {Skill: "skill",
+ Ship: "ship",
+ Module: "module"}
+
+ def apply(self, fitBoosted, layer):
+ """Applies all boosts onto given fit for given layer"""
+ if fitBoosted is None:
+ return
+ # Boosts dict contains all bonuses applied onto given fit
+ self.boosts[fitBoosted] = boosts = {}
+ # Go through all bonuses for given layer, and find highest one per boosted attribute
+ for currLayer in ("fleet", "wing", "squad"):
+ # Dictionary with boosts for given layer
+ dict = self.bonuses[currLayer]
+ for boostedAttr, boostInfoList in dict.iteritems():
+ for boostInfo in boostInfoList:
+ effect, thing = boostInfo
+ # Get current boost value for given attribute, use 0 as fallback if
+ # no boosts applied yet
+ currBoostAmount = boosts.get(boostedAttr, (0,))[0]
+ # Attribute name which is used to get boost value
+ newBoostAttr = effect.getattr("gangBonus") or "commandBonus"
+ # Get boost amount for current boost
+ newBoostAmount = thing.getModifiedItemAttr(newBoostAttr) or 0
+ # If skill takes part in gang boosting, multiply by skill level
+ if type(thing) == Skill:
+ newBoostAmount *= thing.level
+ # If new boost is more powerful, replace older one with it
+ if abs(newBoostAmount) > abs(currBoostAmount):
+ boosts[boostedAttr] = (newBoostAmount, boostInfo)
+
+ # Don't look further down then current layer, wing commanders don't get squad bonuses and all that
+ if layer == currLayer:
+ break
+
+ self.modify(fitBoosted)
+
+ def getBoosts(self, fit):
+ """Return all boosts applied onto given fit"""
+ return self.boosts.get(fit)
+
+ def modify(self, fitBoosted):
+ # Get all boosts which should be applied onto current fit
+ boosts = self.getBoosts(fitBoosted)
+ # Now we got it all figured out, actually do the useful part of all this
+ for name, info in boosts.iteritems():
+ # Unpack all data required to run effect properly
+ effect, thing = info[1]
+ context = ("gang", self.contextMap[type(thing)])
+ # Run effect, and get proper bonuses applied
+ try:
+ effect.handler(fitBoosted, thing, context)
+ except:
+ pass
diff --git a/eos/saveddata/implant.py b/eos/saveddata/implant.py
new file mode 100755
index 000000000..036eabbc3
--- /dev/null
+++ b/eos/saveddata/implant.py
@@ -0,0 +1,93 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from eos.modifiedAttributeDict import ModifiedAttributeDict, ItemAttrShortcut
+from eos.effectHandlerHelpers import HandledItem
+from sqlalchemy.orm import validates, reconstructor
+
+class Implant(HandledItem, ItemAttrShortcut):
+ def __init__(self, item):
+ self.__slot = self.__calculateSlot(item)
+ self.__item = item
+ self.itemID = item.ID
+ self.active = True
+ self.__itemModifiedAttributes = ModifiedAttributeDict()
+ self.__itemModifiedAttributes.original = self.item.attributes
+
+ @reconstructor
+ def init(self):
+ self.__item = None
+
+ def __fetchItemInfo(self):
+ import eos.db
+ self.__item = eos.db.getItem(self.itemID)
+ self.__itemModifiedAttributes = ModifiedAttributeDict()
+ self.__itemModifiedAttributes.original = self.__item.attributes
+ self.__slot = self.__calculateSlot(self.__item)
+
+ @property
+ def itemModifiedAttributes(self):
+ if self.__item is None:
+ self.__fetchItemInfo()
+
+ return self.__itemModifiedAttributes
+
+ @property
+ def slot(self):
+ if self.__item is None:
+ self.__fetchItemInfo()
+
+ return self.__slot
+
+ @property
+ def item(self):
+ if self.__item is None:
+ self.__fetchItemInfo()
+
+ return self.__item
+
+ def __calculateSlot(self, item):
+ if not "implantness" in item.attributes:
+ raise ValueError("Passed item is not an implant")
+
+ return int(item.attributes["implantness"].value)
+
+ def clear(self):
+ self.itemModifiedAttributes.clear()
+
+ def calculateModifiedAttributes(self, fit, runTime, forceProjected = False):
+ if forceProjected: return
+ if self.active == False: return
+ for effect in self.item.effects.itervalues():
+ if effect.runTime == runTime and effect.isType("passive"):
+ effect.handler(fit, self, ("implant",))
+
+ @validates("fitID", "itemID", "active")
+ def validator(self, key, val):
+ map = {"fitID": lambda val: isinstance(val, int),
+ "itemID" : lambda val: isinstance(val, int),
+ "active": lambda val: isinstance(val, bool)}
+
+ if map[key](val) == False: raise ValueError(str(val) + " is not a valid value for " + key)
+ else: return val
+
+ def __deepcopy__(self, memo):
+ copy = Implant(self.item)
+ copy.active = self.active
+ return copy
diff --git a/eos/saveddata/miscData.py b/eos/saveddata/miscData.py
new file mode 100755
index 000000000..c7a859afe
--- /dev/null
+++ b/eos/saveddata/miscData.py
@@ -0,0 +1,25 @@
+#===============================================================================
+# Copyright (C) 2011 Anton Vorobyov
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from eos.eqBase import EqBase
+
+class MiscData(EqBase):
+ def __init__(self, name, val=None):
+ self.fieldName = name
+ self.fieldValue = val
diff --git a/eos/saveddata/module.py b/eos/saveddata/module.py
new file mode 100755
index 000000000..9dea7788d
--- /dev/null
+++ b/eos/saveddata/module.py
@@ -0,0 +1,605 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from sqlalchemy.orm import validates, reconstructor
+
+from eos.modifiedAttributeDict import ModifiedAttributeDict, ItemAttrShortcut, ChargeAttrShortcut
+from eos.effectHandlerHelpers import HandledItem, HandledCharge
+from eos.enum import Enum
+from eos.mathUtils import floorFloat
+
+class State(Enum):
+ OFFLINE = -1
+ ONLINE = 0
+ ACTIVE = 1
+ OVERHEATED = 2
+
+class Slot(Enum):
+ LOW = 1
+ MED = 2
+ HIGH = 3
+ RIG = 4
+ SUBSYSTEM = 5
+
+class Hardpoint(Enum):
+ NONE = 0
+ MISSILE = 1
+ TURRET = 2
+
+class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
+ """An instance of this class represents a module together with its charge and modified attributes"""
+ DAMAGE_ATTRIBUTES = ("emDamage", "kineticDamage", "explosiveDamage", "thermalDamage")
+
+ def __init__(self, item):
+ self.__item = item if item != None else 0
+ self.itemID = item.ID if item is not None else None
+ self.__charge = 0
+ self.projected = False
+ self.state = State.ONLINE
+ self.__dps = None
+ self.__volley = None
+ self.__reloadTime = None
+ self.__reloadForce = None
+ self.__chargeCycles = None
+ self.__itemModifiedAttributes = ModifiedAttributeDict()
+ self.__slot = None
+
+ if item != None:
+ self.__itemModifiedAttributes.original = item.attributes
+ self.__hardpoint = self.__calculateHardpoint(item)
+ self.__slot = self.__calculateSlot(item)
+
+ self.__chargeModifiedAttributes = ModifiedAttributeDict()
+
+ @reconstructor
+ def init(self):
+ if self.dummySlot is None:
+ self.__item = None
+ self.__charge = None
+ self.__volley = None
+ self.__dps = None
+ self.__reloadTime = None
+ self.__reloadForce = None
+ self.__chargeCycles = None
+ else:
+ self.__slot = self.dummySlot
+ self.__item = 0
+ self.__charge = 0
+ self.__dps = 0
+ self.__volley = 0
+ self.__reloadTime = 0
+ self.__reloadForce = None
+ self.__chargeCycles = 0
+ self.__hardpoint = Hardpoint.NONE
+ self.__itemModifiedAttributes = ModifiedAttributeDict()
+ self.__chargeModifiedAttributes = ModifiedAttributeDict()
+
+ def __fetchItemInfo(self):
+ import eos.db
+ item = eos.db.getItem(self.itemID)
+ self.__item = item
+ self.__itemModifiedAttributes = ModifiedAttributeDict()
+ self.__itemModifiedAttributes.original = item.attributes
+ self.__hardpoint = self.__calculateHardpoint(item)
+ self.__slot = self.__calculateSlot(item)
+
+ def __fetchChargeInfo(self):
+ self.__chargeModifiedAttributes = ModifiedAttributeDict()
+ if self.chargeID is not None:
+ import eos.db
+ charge = eos.db.getItem(self.chargeID)
+ self.__charge = charge
+ self.__chargeModifiedAttributes.original = charge.attributes
+ else:
+ self.__charge = 0
+
+ @classmethod
+ def buildEmpty(cls, slot):
+ empty = Module(None)
+ empty.__slot = slot
+ empty.__hardpoint = Hardpoint.NONE
+ empty.__item = 0
+ empty.__charge = 0
+ empty.dummySlot = slot
+ empty.__itemModifiedAttributes = ModifiedAttributeDict()
+ empty.__chargeModifiedAttributes = ModifiedAttributeDict()
+
+ return empty
+
+ @property
+ def isEmpty(self):
+ return self.dummySlot is not None
+
+ @property
+ def hardpoint(self):
+ if self.__item is None:
+ self.__fetchItemInfo()
+
+ return self.__hardpoint
+
+ @property
+ def numCharges(self):
+ if self.charge is None:
+ charges = 0
+ else:
+ chargeVolume = self.charge.volume
+ containerCapacity = self.item.capacity
+ if chargeVolume is None or containerCapacity is None:
+ charges = 0
+ else:
+ charges = floorFloat(float(containerCapacity) / chargeVolume)
+ return charges
+
+ @property
+ def numShots(self):
+ if self.charge is None:
+ return None
+ if self.__chargeCycles is None and self.charge:
+ numCharges = self.numCharges
+ # Usual ammo like projectiles and missiles
+ if numCharges > 0 and "chargeRate" in self.itemModifiedAttributes:
+ self.__chargeCycles = self.__calculateAmmoShots()
+ # Frequency crystals (combat and mining lasers)
+ elif numCharges > 0 and "crystalsGetDamaged" in self.chargeModifiedAttributes:
+ self.__chargeCycles = self.__calculateCrystalShots()
+ # Scripts and stuff
+ else:
+ self.__chargeCycles = 0
+ return self.__chargeCycles
+ else:
+ return self.__chargeCycles
+
+ def __calculateAmmoShots(self):
+ if self.charge is not None:
+ # Set number of cycles before reload is needed
+ chargeRate = self.getModifiedItemAttr("chargeRate")
+ numCharges = self.numCharges
+ numShots = floorFloat(float(numCharges) / chargeRate)
+ else:
+ numShots = None
+ return numShots
+
+ def __calculateCrystalShots(self):
+ if self.charge is not None:
+ if self.getModifiedChargeAttr("crystalsGetDamaged") == 1:
+ # For depletable crystals, calculate average amount of shots before it's destroyed
+ hp = self.getModifiedChargeAttr("hp")
+ chance = self.getModifiedChargeAttr("crystalVolatilityChance")
+ damage = self.getModifiedChargeAttr("crystalVolatilityDamage")
+ crystals = self.numCharges
+ numShots = floorFloat(float(crystals * hp) / (damage * chance))
+ else:
+ # Set 0 (infinite) for permanent crystals like t1 laser crystals
+ numShots = 0
+ else:
+ numShots = None
+ return numShots
+
+ @property
+ def maxRange(self):
+ attrs = ("maxRange", "shieldTransferRange", "powerTransferRange",
+ "energyDestabilizationRange", "empFieldRange",
+ "ecmBurstRange", "warpScrambleRange", "cargoScanRange",
+ "shipScanRange", "surveyScanRange")
+ for attr in attrs:
+ maxRange = self.getModifiedItemAttr(attr)
+ if maxRange is not None: return maxRange
+ if self.charge is not None:
+ try:
+ chargeName = self.charge.group.name
+ except AttributeError:
+ pass
+ else:
+ if chargeName in ("Scanner Probe", "Survey Probe"):
+ return None
+ # Source: http://www.eveonline.com/ingameboard.asp?a=topic&threadID=1307419&page=1#15
+ # D_m = V_m * (T_m + T_0*[exp(- T_m/T_0)-1])
+ maxVelocity = self.getModifiedChargeAttr("maxVelocity")
+ flightTime = self.getModifiedChargeAttr("explosionDelay") / 1000.0
+ mass = self.getModifiedChargeAttr("mass")
+ agility = self.getModifiedChargeAttr("agility")
+ if maxVelocity and flightTime and mass and agility:
+ accelTime = min(flightTime, mass*agility/1000000)
+ # Average distance done during acceleration
+ duringAcceleration = maxVelocity / 2 * accelTime
+ # Distance done after being at full speed
+ fullSpeed = maxVelocity * (flightTime - accelTime)
+ return duringAcceleration + fullSpeed
+
+ @property
+ def falloff(self):
+ attrs = ("falloff", "shipScanFalloff")
+ for attr in attrs:
+ falloff = self.getModifiedItemAttr(attr)
+ if falloff is not None: return falloff
+
+ @property
+ def slot(self):
+ if self.__item is None:
+ self.__fetchItemInfo()
+
+ return self.__slot
+
+
+ @property
+ def itemModifiedAttributes(self):
+ if self.__item is None:
+ self.__fetchItemInfo()
+
+ return self.__itemModifiedAttributes
+
+ @property
+ def chargeModifiedAttributes(self):
+ if self.__charge is None:
+ self.__fetchChargeInfo()
+
+ return self.__chargeModifiedAttributes
+
+ @property
+ def item(self):
+ if self.__item is None:
+ self.__fetchItemInfo()
+
+ return self.__item if self.__item != 0 else None
+
+ @property
+ def charge(self):
+ if self.__charge is None:
+ self.__fetchChargeInfo()
+
+ return self.__charge if self.__charge != 0 else None
+
+ @charge.setter
+ def charge(self, charge):
+ self.__charge = charge
+ if charge is not None:
+ self.chargeID = charge.ID
+ self.__chargeModifiedAttributes.original = charge.attributes
+ else:
+ self.chargeID = None
+ self.__chargeModifiedAttributes.original = None
+
+ self.__itemModifiedAttributes.clear()
+
+ @property
+ def damageStats(self):
+ if self.__dps == None:
+ if self.isEmpty:
+ self.__dps = 0
+ self.__volley = 0
+ else:
+ if self.state >= State.ACTIVE:
+ if self.charge:
+ volley = sum(map(lambda attr: self.getModifiedChargeAttr(attr) or 0, self.DAMAGE_ATTRIBUTES))
+ else:
+ volley = sum(map(lambda attr: self.getModifiedItemAttr(attr) or 0, self.DAMAGE_ATTRIBUTES))
+ volley *= self.getModifiedItemAttr("damageMultiplier") or 1
+ if volley:
+ cycleTime = self.cycleTime
+ self.__volley = volley
+ self.__dps = volley / (cycleTime / 1000.0)
+ else:
+ self.__volley = 0
+ self.__dps = 0
+ else:
+ self.__volley = 0
+ self.__dps = 0
+
+ return self.__dps, self.__volley
+
+ @property
+ def dps(self):
+ return self.damageStats[0]
+
+ @property
+ def volley(self):
+ return self.damageStats[1]
+
+ @property
+ def reloadTime(self):
+ return self.__reloadTime
+
+ @reloadTime.setter
+ def reloadTime(self, milliseconds):
+ self.__reloadTime = milliseconds
+
+ @property
+ def forceReload(self):
+ return self.__reloadForce
+
+ @forceReload.setter
+ def forceReload(self, type):
+ self.__reloadForce = type
+
+ def fits(self, fit, hardpointLimit=True):
+ slot = self.slot
+ if fit.getSlotsFree(slot) <= (0 if self.owner != fit else -1):
+ return False
+
+ # Check ship type restrictions
+ fitsOnType = set()
+ fitsOnGroup = set()
+
+ shipType = self.getModifiedItemAttr("fitsToShipType")
+ if shipType is not None:
+ fitsOnType.add(shipType)
+
+ for i in xrange(1, 5):
+ shipType = self.getModifiedItemAttr("canFitShipType%d" % i)
+ if shipType is not None:
+ fitsOnType.add(shipType)
+
+
+ # Check ship group restrictions
+ for i in xrange(1, 10):
+ shipGroup = self.getModifiedItemAttr("canFitShipGroup%d" % i)
+ if shipGroup is not None:
+ fitsOnGroup.add(shipGroup)
+
+ if (len(fitsOnGroup) > 0 or len(fitsOnType) > 0) and fit.ship.item.group.ID not in fitsOnGroup and fit.ship.item.ID not in fitsOnType:
+ return False
+
+
+ # If the mod is a subsystem, don't let two subs in the same slot fit
+ if self.slot == Slot.SUBSYSTEM:
+ subSlot = self.getModifiedItemAttr("subSystemSlot")
+ for mod in fit.modules:
+ if mod.getModifiedItemAttr("subSystemSlot") == subSlot:
+ return False
+
+ # Check rig sizes
+ if self.slot == Slot.RIG:
+ if self.getModifiedItemAttr("rigSize") != fit.ship.getModifiedItemAttr("rigSize"):
+ return False
+
+ # Check max group fitted
+ max = self.getModifiedItemAttr("maxGroupFitted")
+ if max is not None:
+ current = 0 if self.owner != fit else -1
+ for mod in fit.modules:
+ if mod.item and mod.item.groupID == self.item.groupID:
+ current += 1
+
+ if current >= max:
+ return False
+
+ # Check this only if we're told to do so
+ if hardpointLimit:
+ if self.hardpoint == Hardpoint.TURRET:
+ if fit.ship.getModifiedItemAttr('turretSlotsLeft') - fit.getHardpointsUsed(Hardpoint.TURRET) < 1:
+ return False
+ elif self.hardpoint == Hardpoint.MISSILE:
+ if fit.ship.getModifiedItemAttr('launcherSlotsLeft') - fit.getHardpointsUsed(Hardpoint.MISSILE) < 1:
+ return False
+
+ return True
+
+ def isValidState(self, state):
+ """
+ Check if the state is valid for this module, without considering other modules at all
+ """
+ #Check if we're within bounds
+ if state < -1 or state > 2:
+ return False
+ elif state >= State.ACTIVE and not self.item.isType("active"):
+ return False
+ elif state == State.OVERHEATED and not self.item.isType("overheat"):
+ return False
+ else:
+ return True
+
+ def canHaveState(self, state=None, projectedOnto=None):
+ """
+ Check with other modules if there are restrictions that might not allow this module to be activated
+ """
+ # If we're going to set module to offline or online for local modules or offline for projected,
+ # it should be fine for all cases
+ item = self.item
+ if (state <= State.ONLINE and projectedOnto is None) or (state <= State.OFFLINE):
+ return True
+
+ # Check if the local module is over it's max limit; if it's not, we're fine
+ maxGroupActive = self.getModifiedItemAttr("maxGroupActive")
+ if maxGroupActive is None and projectedOnto is None:
+ return True
+
+ # Following is applicable only to local modules, we do not want to limit projected
+ if projectedOnto is None:
+ currActive = 0
+ group = item.group.name
+ for mod in self.owner.modules:
+ currItem = getattr(mod, "item", None)
+ if mod.state >= State.ACTIVE and currItem is not None and currItem.group.name == group:
+ currActive += 1
+ if currActive > maxGroupActive:
+ break
+ return currActive <= maxGroupActive
+ # For projected, we're checking if ship is vulnerable to given item
+ else:
+ if (item.offensive and projectedOnto.ship.getModifiedItemAttr("disallowOffensiveModifiers") == 1) or \
+ (item.assistive and projectedOnto.ship.getModifiedItemAttr("disallowAssistance") == 1):
+ return False
+ else:
+ return True
+
+ def isValidCharge(self, charge):
+ #Check sizes, if 'charge size > module volume' it won't fit
+ if charge is None: return True
+ chargeVolume = charge.volume
+ moduleCapacity = self.item.capacity
+ if chargeVolume is not None and moduleCapacity is not None and chargeVolume > moduleCapacity:
+ return False
+
+ itemChargeSize = self.getModifiedItemAttr("chargeSize")
+ if itemChargeSize is not None:
+ chargeSize = charge.getAttribute('chargeSize')
+ if itemChargeSize != chargeSize:
+ return False
+
+ chargeGroup = charge.groupID
+ for i in range(5):
+ itemChargeGroup = self.getModifiedItemAttr('chargeGroup' + str(i))
+ if itemChargeGroup is None: continue
+ if itemChargeGroup == chargeGroup: return True
+
+ return False
+
+ def getValidCharges(self):
+ validCharges = set()
+ import eos.db
+ for i in range(5):
+ itemChargeGroup = self.getModifiedItemAttr('chargeGroup' + str(i))
+ if itemChargeGroup is not None:
+ g = eos.db.getGroup(int(itemChargeGroup), eager=("items.icon", "items.attributes"))
+ if g is None:
+ continue
+ for i in g.items:
+ if i.published and self.isValidCharge(i):
+ validCharges.add(i)
+
+ return validCharges
+
+ def __calculateHardpoint(self, item):
+ effectHardpointMap = {"turretFitted" : Hardpoint.TURRET,
+ "launcherFitted": Hardpoint.MISSILE}
+
+ if item is None:
+ return Hardpoint.NONE
+
+ for effectName, slot in effectHardpointMap.iteritems():
+ if effectName in item.effects:
+ return slot
+
+ return Hardpoint.NONE
+
+ def __calculateSlot(self, item):
+ effectSlotMap = {"rigSlot" : Slot.RIG,
+ "loPower" : Slot.LOW,
+ "medPower" : Slot.MED,
+ "hiPower" : Slot.HIGH,
+ "subSystem" : Slot.SUBSYSTEM}
+ if item is None:
+ return None
+ for effectName, slot in effectSlotMap.iteritems():
+ if effectName in item.effects:
+ return slot
+ if item.group.name == "Effect Beacon":
+ return Slot.RIG
+
+ raise ValueError("Passed item does not fit in any known slot")
+
+ @validates("ID", "itemID", "ammoID")
+ def validator(self, key, val):
+ map = {"ID": lambda val: isinstance(val, int),
+ "itemID" : lambda val: val is None or isinstance(val, int),
+ "ammoID" : lambda val: isinstance(val, int)}
+
+ if map[key](val) == False: raise ValueError(str(val) + " is not a valid value for " + key)
+ else: return val
+
+ def clear(self):
+ self.__dps = None
+ self.__volley = None
+ self.__reloadTime = None
+ self.__reloadForce = None
+ self.__chargeCycles = None
+ self.itemModifiedAttributes.clear()
+ self.chargeModifiedAttributes.clear()
+
+ def calculateModifiedAttributes(self, fit, runTime, forceProjected = False):
+ #We will run the effect when two conditions are met:
+ #1: It makes sense to run the effect
+ # The effect is either offline
+ # or the effect is passive and the module is in the online state (or higher)
+ # or the effect is active and the module is in the active state (or higher)
+ # or the effect is overheat and the module is in the overheated state (or higher)
+ #2: the runtimes match
+ if self.projected or forceProjected:
+ context = "projected", "module"
+ projected = True
+ else:
+ context = ("module",)
+ projected = False
+
+ if self.charge is not None and not projected:
+ for effect in self.charge.effects.itervalues():
+ if effect.runTime == runTime:
+ effect.handler(fit, self, ("moduleCharge",))
+
+ if self.item:
+ if self.state >= State.OVERHEATED:
+ for effect in self.item.effects.itervalues():
+ if effect.runTime == runTime and effect.isType("overheat"):
+ effect.handler(fit, self, context)
+
+ for effect in self.item.effects.itervalues():
+ if effect.runTime == runTime and \
+ (effect.isType("offline") or
+ (effect.isType("passive") and self.state >= State.ONLINE) or \
+ (effect.isType("active") and self.state >= State.ACTIVE)) and \
+ ((projected and effect.isType("projected")) or not projected):
+ effect.handler(fit, self, context)
+
+ @property
+ def cycleTime(self):
+ reactivation = (self.getModifiedItemAttr("moduleReactivationDelay") or 0)
+ # Reactivation time starts counting after end of module cycle
+ speed = self.rawCycleTime + reactivation
+ if self.charge:
+ reload = self.reloadTime
+ else:
+ reload = 0.0
+ # Determine if we'll take into account reload time or not
+ factorReload = self.owner.factorReload if self.forceReload is None else self.forceReload
+ # If reactivation is longer than 10 seconds then module can be reloaded
+ # during reactivation time, thus we may ignore reload
+ if factorReload and reactivation < reload:
+ numShots = self.numShots
+ # Time it takes to reload module after end of reactivation time,
+ # given that we started when module cycle has just over
+ additionalReloadTime = (reload - reactivation)
+ # Speed here already takes into consideration reactivation time
+ speed = (speed * numShots + additionalReloadTime) / numShots if numShots > 0 else speed
+
+ return speed
+
+ @property
+ def rawCycleTime(self):
+ speed = self.getModifiedItemAttr("speed") or self.getModifiedItemAttr("duration")
+ return speed
+
+ @property
+ def capUse(self):
+ capNeed = self.getModifiedItemAttr("capacitorNeed")
+ if capNeed and self.state >= State.ACTIVE:
+ cycleTime = self.cycleTime
+ capUsed = capNeed / (cycleTime / 1000.0)
+ return capUsed
+ else:
+ return 0
+
+ def __deepcopy__(self, memo):
+ item = self.item
+ if item is None:
+ copy = Module.buildEmpty(self.slot)
+ else:
+ copy = Module(self.item)
+ copy.charge = self.charge
+ copy.state = self.state
+ return copy
diff --git a/eos/saveddata/price.py b/eos/saveddata/price.py
new file mode 100755
index 000000000..5f89f260e
--- /dev/null
+++ b/eos/saveddata/price.py
@@ -0,0 +1,348 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+# Copyright (C) 2011 Anton Vorobyov
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+import time
+import urllib2
+from xml.dom import minidom
+
+from sqlalchemy.orm import reconstructor
+
+import eos.db
+
+class Price(object):
+ # Price validity period, 24 hours
+ VALIDITY = 24*60*60
+ # Re-request delay for failed fetches, 4 hours
+ REREQUEST = 4*60*60
+
+ def __init__(self, typeID):
+ self.typeID = typeID
+ self.time = 0
+ self.failed = None
+ self.__item = None
+
+ @reconstructor
+ def init(self):
+ self.__item = None
+
+ def isValid(self, rqtime=time.time()):
+ updateAge = rqtime - self.time
+ # Mark price as invalid if it is expired
+ validity = updateAge <= self.VALIDITY
+ # Price is considered as valid, if it's expired but we had failed
+ # fetch attempt recently
+ if validity is False and self.failed is not None:
+ failedAge = rqtime - self.failed
+ validity = failedAge <= self.REREQUEST
+ # If it's already invalid, it can't get any better
+ if validity is False:
+ return validity
+ # If failed timestamp refers to future relatively to current
+ # system clock, mark price as invalid
+ if self.failed > rqtime:
+ return False
+ # Do the same for last updated timestamp
+ if self.time > rqtime:
+ return False
+ return validity
+
+ @classmethod
+ def fetchPrices(cls, prices, proxy=None):
+ """Fetch all prices passed to this method"""
+ # Set time of the request
+ # We have to pass this time to all of our used methods and validity checks
+ # Using time of check instead can make extremely rare edge-case bugs to appear
+ # (e.g. when item price is already considered as outdated, but c0rp fetch is still
+ # valid, just because their update time has been set using slightly older timestamp)
+ rqtime = time.time()
+ # Dictionary for our price objects
+ priceMap = {}
+ # Check all provided price objects, and add invalid ones to dictionary
+ for price in prices:
+ if not price.isValid(rqtime=rqtime):
+ priceMap[price.typeID] = price
+ # List our price service methods
+ services = ((cls.fetchEveCentral, (priceMap,), {"rqtime": rqtime, "proxy": proxy}),
+ (cls.fetchC0rporation, (priceMap,), {"rqtime": rqtime, "proxy": proxy}))
+ # Cycle through services
+ for svc, args, kwargs in services:
+ # Stop cycling if we don't need price data anymore
+ if len(priceMap) == 0:
+ break
+ # Request prices and get some feedback
+ noData, abortedData = svc(*args, **kwargs)
+ # Mark items with some failure occurred during fetching
+ for typeID in abortedData:
+ priceMap[typeID].failed = rqtime
+ # Clear map from the fetched and failed items, leaving only items
+ # for which we've got no data
+ toRemove = set()
+ for typeID in priceMap:
+ if typeID not in noData:
+ toRemove.add(typeID)
+ for typeID in toRemove:
+ del priceMap[typeID]
+ # After we've checked all possible services, assign zero price for items
+ # which were not found on any service to avoid re-fetches during validity
+ # period
+ for typeID in priceMap:
+ priceobj = priceMap[typeID]
+ priceobj.price = 0
+ priceobj.time = rqtime
+ priceobj.failed = None
+
+ @classmethod
+ def fetchEveCentral(cls, priceMap, rqtime=time.time(), proxy=None):
+ """Use Eve-Central price service provider"""
+ # This set will contain typeIDs which were requested but no data has been fetched for them
+ noData = set()
+ # This set will contain items for which data fetch was aborted due to technical reasons
+ abortedData = set()
+ # Set of items which are still to be requested from this service
+ toRequestSvc = set()
+ # Compose list of items we're going to request
+ for typeID in priceMap:
+ # Get item object
+ item = eos.db.getItem(typeID)
+ # We're not going to request items only with market group, as eve-central
+ # doesn't provide any data for items not on the market
+ # Items w/o market group will be added to noData in the very end
+ if item.marketGroupID:
+ toRequestSvc.add(typeID)
+ # Do not waste our time if all items are not on the market
+ if len(toRequestSvc) == 0:
+ noData.update(priceMap.iterkeys())
+ return (noData, abortedData)
+ # This set will contain typeIDs for which we've got useful data
+ fetchedTypeIDs = set()
+ # Base request URL
+ baseurl = "http://api.eve-central.com/api/marketstat"
+ # Area limitation list
+ areas = ("usesystem=30000142", # Jita
+ None) # Global
+ # Fetch prices from Jita market, if no data was available - check global data
+ for area in areas:
+ # Append area limitations to base URL
+ areaurl = "{0}&{1}".format(baseurl, area) if area else baseurl
+ # Set which contains IDs of items which we will fetch for given area
+ toRequestArea = toRequestSvc.difference(fetchedTypeIDs).difference(abortedData)
+ # As length of URL is limited, make a loop to make sure we request all data
+ while(len(toRequestArea) > 0):
+ # Set of items we're requesting during this cycle
+ requestedThisUrl = set()
+ # Always start composing our URL from area-limited URL
+ requrl = areaurl
+ # Generate final URL, making sure it isn't longer than 255 characters
+ for typeID in toRequestArea:
+ # Try to add new typeID argument
+ newrequrl = "{0}&typeid={1}".format(requrl, typeID)
+ # If we didn't exceed our limits
+ if len(newrequrl) <= 255:
+ # Accept new URL
+ requrl = newrequrl
+ # Fill the set for the utility needs
+ requestedThisUrl.add(typeID)
+ # Use previously generated URL if new is out of bounds
+ else:
+ break
+ # Do not request same items from the same area
+ toRequestArea.difference_update(requestedThisUrl)
+ # Replace first ampersand with question mark to separate arguments
+ # from URL itself
+ requrl = requrl.replace("&", "?", 1)
+ # Make the request object
+ request = urllib2.Request(requrl, headers={"User-Agent" : "eos"})
+ # Attempt to send request and process it
+ try:
+ if proxy is not None:
+ proxyHandler = urllib2.ProxyHandler({"http": proxy})
+ opener = urllib2.build_opener(proxyHandler)
+ urllib2.install_opener(opener)
+ data = urllib2.urlopen(request)
+ xml = minidom.parse(data)
+ types = xml.getElementsByTagName("marketstat").item(0).getElementsByTagName("type")
+ # Cycle through all types we've got from request
+ for type in types:
+ # Get data out of each typeID details tree
+ typeID = int(type.getAttribute("id"))
+ sell = type.getElementsByTagName("sell").item(0)
+ # If price data wasn't there, set price to zero
+ try:
+ percprice = float(sell.getElementsByTagName("percentile").item(0).firstChild.data)
+ except (TypeError, ValueError):
+ percprice = 0
+ # Eve-central returns zero price if there was no data, thus modify price
+ # object only if we've got non-zero price
+ if percprice:
+ # Add item id to list of fetched items
+ fetchedTypeIDs.add(typeID)
+ # Fill price data
+ priceobj = priceMap[typeID]
+ priceobj.price = percprice
+ priceobj.time = rqtime
+ priceobj.failed = None
+ # If getting or processing data returned any errors
+ except:
+ # Consider fetch as aborted
+ abortedData.update(requestedThisUrl)
+ # Get actual list of items for which we didn't get data; it includes all requested items
+ # (even those which didn't pass filter), excluding items which had problems during fetching
+ # and items for which we've successfully fetched price
+ noData.update(set(priceMap.iterkeys()).difference(fetchedTypeIDs).difference(abortedData))
+ # And return it for future use
+ return (noData, abortedData)
+
+ @classmethod
+ def fetchC0rporation(cls, priceMap, rqtime=time.time(), proxy=None):
+ """Use c0rporation.com price service provider"""
+ # it must be here, otherwise eos doesn't load miscData in time
+ from eos.types import MiscData
+ # Set-container for requested items w/o any data returned
+ noData = set()
+ # Container for items which had errors during fetching
+ abortedData = set()
+ # Set with types for which we've got data
+ fetchedTypeIDs = set()
+ # Container for prices we'll re-request from eve central.
+ eveCentralUpdate = {}
+ # Check when we updated prices last time
+ fieldName = "priceC0rpTime"
+ lastUpdatedField = eos.db.getMiscData(fieldName)
+ # If this field isn't available, create and add it to session
+ if lastUpdatedField is None:
+ lastUpdatedField = MiscData(fieldName)
+ eos.db.add(lastUpdatedField)
+ # Convert field value to float, assigning it zero on any errors
+ try:
+ lastUpdated = float(lastUpdatedField.fieldValue)
+ except (TypeError, ValueError):
+ lastUpdated = 0
+ # Get age of price
+ updateAge = rqtime - lastUpdated
+ # Using timestamp we've got, check if fetch results are still valid and make
+ # sure system clock hasn't been changed to past
+ c0rpValidityUpd = updateAge <= cls.VALIDITY and lastUpdated <= rqtime
+ # If prices should be valid according to miscdata last update timestamp,
+ # but method was requested to provide prices for some items, we can
+ # safely assume that these items are not on the XML (to be more accurate,
+ # on its previously fetched version), because all items which are valid
+ # (and they are valid only when xml is valid) should be filtered out before
+ # passing them to this method
+ if c0rpValidityUpd is True:
+ noData.update(set(priceMap.iterkeys()))
+ return (noData, abortedData)
+ # Check when price fetching failed last time
+ fieldName = "priceC0rpFailed"
+ # If it doesn't exist, add this one to the session too
+ lastFailedField = eos.db.getMiscData(fieldName)
+ if lastFailedField is None:
+ lastFailedField = MiscData(fieldName)
+ eos.db.add(lastFailedField)
+ # Convert field value to float, assigning it none on any errors
+ try:
+ lastFailed = float(lastFailedField.fieldValue)
+ except (TypeError, ValueError):
+ lastFailed = None
+ # If we had failed fetch attempt at some point
+ if lastFailed is not None:
+ failedAge = rqtime - lastFailed
+ # Check if we should refetch data now or not (we do not want to do anything until
+ # refetch timeout is reached or we have failed timestamp referencing some future time)
+ c0rpValidityFail = failedAge <= cls.REREQUEST and lastFailed <= rqtime
+ # If it seems we're not willing to fetch any data
+ if c0rpValidityFail is True:
+ # Consider all requested items as aborted. As we don't store list of items
+ # provided by this service, this will include anything passed to this service,
+ # even items which are usually not included in xml
+ abortedData.update(set(priceMap.iterkeys()))
+ return (noData, abortedData)
+ # Our request URL
+ requrl = "http://prices.c0rporation.com/faction.xml"
+ # Generate request
+ request = urllib2.Request(requrl, headers={"User-Agent" : "eos"})
+ # Attempt to send request and process returned data
+ try:
+ if proxy is not None:
+ proxyHandler = urllib2.ProxyHandler({"http": proxy})
+ opener = urllib2.build_opener(proxyHandler)
+ urllib2.install_opener(opener)
+ data = urllib2.urlopen(request)
+ # Parse the data we've got
+ xml = minidom.parse(data)
+ rowsets = xml.getElementsByTagName("rowset")
+ for rowset in rowsets:
+ rows = rowset.getElementsByTagName("row")
+ # Go through all given data rows; as we don't want to request and process whole xml
+ # for each price request, we need to process it in one single run
+ for row in rows:
+ typeID = int(row.getAttribute("typeID"))
+ # Median price field may be absent or empty, assign 0 in this case
+ try:
+ medprice = float(row.getAttribute("median"))
+ except (TypeError, ValueError):
+ medprice = 0
+ # Process price only if it's non-zero
+ if medprice:
+ # Add current typeID to the set of fetched types
+ fetchedTypeIDs.add(typeID)
+ # If we have given typeID in the map we've got, pull price object out of it
+ if typeID in priceMap:
+ priceobj = priceMap[typeID]
+ # If we don't, request it from database
+ else:
+ priceobj = eos.db.getPrice(typeID)
+ # If everything failed
+ if priceobj is None:
+ # Create price object ourselves
+ priceobj = Price(typeID)
+ # And let database know that we'd like to keep it
+ eos.db.add(priceobj)
+ # Finally, fill object with data
+ priceobj.price = medprice
+ priceobj.time = rqtime
+ priceobj.failed = None
+ # Check if item has market group assigned
+ item = eos.db.getItem(typeID)
+ if item is not None and item.marketGroupID:
+ eveCentralUpdate[typeID] = priceobj
+ # If any items need to be re-requested from EVE-Central, do so
+ # We need to do this because c0rp returns prices for lot of items;
+ # if returned price is one of requested, it's fetched from eve-central
+ # first, which is okay; if it's not, price from c0rp will be written
+ # which will prevent further updates from eve-central. As we consider
+ # eve-central as more accurate source, ask to update prices for all
+ # items we got
+ if eveCentralUpdate:
+ # We do not need any feedback from it, we just want it to update
+ # prices
+ cls.fetchEveCentral(eveCentralUpdate, rqtime=rqtime, proxy=proxy)
+ # Save current time for the future use
+ lastUpdatedField.fieldValue = rqtime
+ # Clear the last failed field
+ lastFailedField.fieldValue = None
+ # Find which items were requested but no data has been returned
+ noData.update(set(priceMap.iterkeys()).difference(fetchedTypeIDs))
+ # If we failed somewhere during fetching or processing
+ except:
+ # Consider all items as aborted
+ abortedData.update(set(priceMap.iterkeys()))
+ # And whole fetch too
+ lastFailedField.fieldValue = rqtime
+ return (noData, abortedData)
diff --git a/eos/saveddata/ship.py b/eos/saveddata/ship.py
new file mode 100755
index 000000000..6a0118011
--- /dev/null
+++ b/eos/saveddata/ship.py
@@ -0,0 +1,66 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from eos.modifiedAttributeDict import ModifiedAttributeDict, ItemAttrShortcut
+from eos.effectHandlerHelpers import HandledItem
+
+class Ship(ItemAttrShortcut, HandledItem):
+ def __init__(self, item):
+ self.__item = item
+ self.__itemModifiedAttributes = ModifiedAttributeDict()
+ if not isinstance(item, int):
+ self.__buildOriginal()
+
+ self.commandBonus = 0
+
+ def __fetchItemInfo(self):
+ import eos.db
+ self.__item = eos.db.getItem(self.__item)
+ self.__buildOriginal()
+
+ def __buildOriginal(self):
+ self.__itemModifiedAttributes.original = self.item.attributes
+
+ @property
+ def item(self):
+ if isinstance(self.__item, int):
+ self.__fetchItemInfo()
+
+ return self.__item
+
+ @property
+ def itemModifiedAttributes(self):
+ if isinstance(self.__item, int):
+ self.__fetchItemInfo()
+
+ return self.__itemModifiedAttributes
+
+ def clear(self):
+ self.itemModifiedAttributes.clear()
+ self.commandBonus = 0
+
+ def calculateModifiedAttributes(self, fit, runTime, forceProjected = False):
+ if forceProjected: return
+ for effect in self.item.effects.itervalues():
+ if effect.runTime == runTime and effect.isType("passive"):
+ effect.handler(fit, self, ("ship",))
+
+ def __deepcopy__(self, memo):
+ copy = Ship(self.item)
+ return copy
diff --git a/eos/saveddata/user.py b/eos/saveddata/user.py
new file mode 100755
index 000000000..1baeb93ce
--- /dev/null
+++ b/eos/saveddata/user.py
@@ -0,0 +1,54 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from sqlalchemy.orm import validates
+import hashlib
+import string
+import random
+
+class User(object):
+ def __init__(self, username, password = None, admin = False):
+ self.username = username
+ if password is not None: self.encodeAndSetPassword(password)
+ self.admin = admin
+
+ def encodeAndSetPassword(self, pw):
+ h = hashlib.new("sha256")
+ salt = "".join([random.choice(string.letters) for _ in xrange(32)])
+ h.update(pw)
+ h.update(salt)
+ self.password = ("%s%s" % (h.hexdigest(), salt))
+
+ def isPasswordValid(self, pw):
+ if self.password is None: return False
+ salt = self.password[-32:]
+ h = hashlib.new("sha256")
+ h.update(pw)
+ h.update(salt)
+ return self.password == (u"%s%s" % (h.hexdigest(), salt))
+
+ @validates("ID", "username", "password", "admin")
+ def validator(self, key, val):
+ map = {"ID": lambda val: isinstance(val, int),
+ "username" : lambda val: isinstance(val, basestring),
+ "password" : lambda val: isinstance(val, basestring) and len(val) == 96,
+ "admin" : lambda val: isinstance(val, bool)}
+
+ if map[key](val) == False: raise ValueError(str(val) + " is not a valid value for " + key)
+ else: return val
diff --git a/eos/slotFill.py b/eos/slotFill.py
new file mode 100755
index 000000000..ce00a07ae
--- /dev/null
+++ b/eos/slotFill.py
@@ -0,0 +1,223 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from eos.types import Slot, Fit, Module, State
+import random
+import copy
+import math
+import bisect
+import itertools
+import time
+
+class SlotFill(object):
+ def __init__(self, original, modules, attributeWeights=None, propertyWeights=None, specificWeights=None, defaultState = State.ACTIVE):
+ self.original = original
+ self.attributeWeights = attributeWeights or {}
+ self.propertyWeights = propertyWeights or {}
+ self.specificWeights = specificWeights or []
+ self.state = State.ACTIVE
+ self.modules = map(self.__newModule, modules)
+
+ def __newModule(self, item):
+ m = Module(item)
+ m.state = self.state
+ return m
+
+ def __getMetaParent(self, item):
+ metaGroup = item.metaGroup
+ return item if metaGroup is None else metaGroup.parent
+
+ def fitness(self, fit, chromosome):
+ modList = fit.modules
+ modAttr = fit.ship.getModifiedItemAttr
+
+ modList.extend(chromosome)
+ fit.clear()
+ fit.calculateModifiedAttributes()
+
+ if not fit.fits:
+ del modList[-len(chromosome):]
+ return 0
+
+ weight = 0
+ for attr, value in self.attributeWeights.iteritems():
+ weight += modAttr(attr) * (value if value >= 0 else 1.0 / -value)
+
+ for prop, value in self.propertyWeights.iteritems():
+ weight += getattr(fit, prop) * (value if value >= 0 else 1.0 / -value)
+
+ for specific in self.specificWeights:
+ weight += specific(fit)
+
+ totalVars = (fit.ship.getModifiedItemAttr("powerOutput"),
+ fit.ship.getModifiedItemAttr("cpuOutput"),
+ fit.ship.getModifiedItemAttr('upgradeCapacity'))
+
+ usedVars = (fit.pgUsed, fit.cpuUsed, fit.calibrationUsed)
+
+ total = 0
+ used = 0
+ for tv, uv in zip(totalVars, usedVars):
+ if uv > tv:
+ del modList[-len(chromosome):]
+ return 0
+
+ del modList[-len(chromosome):]
+
+
+ return weight
+
+
+ def run(self, elite = 0.05, crossoverChance = 0.8, slotMutationChance = 0.5, typeMutationChance = 0.5):
+ #Use a copy of the original for all our calcs. We don't want to damage it
+ fit = copy.deepcopy(self.original)
+ fit.unfill()
+
+ #First of all, lets check the number of slots we got to play with
+ chromLength = -1
+ slotAmounts = {}
+ for type in Slot.getTypes():
+ slot = Slot.getValue(type)
+ amount = fit.getSlotsFree(slot)
+ if amount > 0:
+ slotAmounts[slot] = amount
+
+ chromLength += amount
+
+ if not slotAmounts:
+ #Nothing to do, joy
+ return
+
+ slotModules = {}
+ metaModules = {}
+
+ for slotType in slotAmounts:
+ slotModules[slotType] = modules = []
+
+ for module in self.modules:
+ #Store the variations of each base for ease and speed
+ metaParent = self.__getMetaParent(module.item)
+ metaList = metaModules.get(metaParent)
+ if metaList is None:
+ metaList = metaModules[metaParent] = []
+ metaList.append(module)
+
+ #Sort stuff by slotType for ease and speed
+ slot = module.slot
+ if slot in slotModules:
+ slotModules[slot].append(module)
+
+ for slotType, modules in slotModules.iteritems():
+ if len(modules) == 0:
+ chromLength -= slotAmounts[slotType]
+ del slotAmounts[slotType]
+
+ #Now, we need an initial set, first thing to do is decide how big that set will be
+ setSize = 10
+
+ #Grab some variables locally for performance improvements
+ rchoice = random.choice
+ rrandom = random.random
+ rrandint = random.randint
+ bbisect = bisect.bisect
+ ccopy = copy.copy
+
+ #Get our list for storage of our chromosomes
+ chromosomes = []
+
+ # Helpers
+ weigher = lambda chromosome: (self.fitness(fit, chromosome), chromosome)
+ keyer = lambda info: info[0]
+
+ eliteCutout = int(math.floor(setSize * (1 - elite)))
+ lastEl = setSize - 1
+
+ #Generate our initial set entirely randomly
+ #Subtelies to take in mind:
+ # * modules of the same slotType are kept together for easy cross-overing
+ state = self.state
+ for _ in xrange(setSize):
+ chrom = []
+ for type, amount in slotAmounts.iteritems():
+ for _ in xrange(amount):
+ chrom.append(rchoice(slotModules[type]))
+
+ chromosomes.append(weigher(chrom))
+
+ #Sort our initial set
+ chromosomes.sort(key=keyer)
+ currentGeneration = chromosomes
+
+ #Yield the best result from our initial set, this is gonna be pretty bad
+ yield currentGeneration[lastEl]
+
+ #Setup's done, now we can actualy apply our genetic algorithm to optimize all this
+ while True:
+ moo = time.time()
+ #First thing we do, we're gonna be elitair
+ #Grab the top x%, we'll put em in the next generation
+ nextGeneration = []
+ for i in xrange(lastEl, eliteCutout - 1, -1):
+ nextGeneration.append(currentGeneration[i])
+
+ #Figure out our ratios to do our roulette wheel
+ fitnessList = map(keyer, currentGeneration)
+ totalFitness = float(sum(fitnessList))
+
+ curr = 0
+ ratios = []
+ for fitness in fitnessList:
+ curr += fitness
+ ratios.append(curr / (totalFitness or 1))
+
+ t = 0
+ #Do our pairing
+ for _ in xrange(0, eliteCutout):
+ # Crossover chance
+ mother = currentGeneration[bbisect(ratios, rrandom())][1]
+ father = currentGeneration[bbisect(ratios, rrandom())][1]
+ if rrandom() <= crossoverChance:
+ crosspoint = rrandint(0, chromLength)
+ luke = mother[:crosspoint] + father[crosspoint:]
+ else:
+ luke = father
+
+ #Chance for slot mutation
+ if rrandom() <= slotMutationChance:
+ target = rrandint(0, chromLength)
+ mod = luke[target]
+ luke[target] = rchoice(slotModules[mod.slot])
+
+ if rrandom() <= typeMutationChance:
+ #Mutation of an item to another one of the same type
+ target = rrandint(0, chromLength)
+ mod = luke[target]
+ vars = metaModules[self.__getMetaParent(mod.item)]
+ luke[target] = rchoice(vars)
+
+ tt = time.time()
+ nextGeneration.append(weigher(luke))
+ t += time.time() - tt
+
+ print "time spent weighing: ", t
+
+ nextGeneration.sort(key=keyer)
+ currentGeneration = nextGeneration
+ print "total time spent this iteration:", time.time() - moo
+ yield currentGeneration[lastEl]
diff --git a/eos/tests/__init__.py b/eos/tests/__init__.py
new file mode 100755
index 000000000..07f94b115
--- /dev/null
+++ b/eos/tests/__init__.py
@@ -0,0 +1,206 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+# 2010 Anton Vorobyov
+#
+# This file and all other files in this folder (and its subfolders) are part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+import unittest
+
+from eos import db
+from eos.types import Fit, Character, Skill, Ship, Module, Drone, Booster, Fleet, Wing, Squad, State
+
+class TestBase(unittest.TestCase):
+ def setUp(self):
+ db.saveddata_meta.create_all()
+
+ def tearDown(self):
+ db.saveddata_meta.drop_all()
+ db.saveddata_session.expunge_all()
+
+ def __addFitItem(self, fit, item, state=None):
+ # Map textual description to actual states
+ statemap = {"offline": State.OFFLINE,
+ "online": State.ONLINE,
+ "active": State.ACTIVE,
+ "overheated": State.OVERHEATED}
+ # Gather some data about item being fitted
+ item_itm = db.getItem(item)
+ cat = item_itm.category.name.lower()
+ grp = item_itm.group.name.lower()
+ # Append it to proper category
+ if cat == "drone":
+ item_inst = Drone(item_itm)
+ fit.drones.append(item_inst)
+ elif cat in ("module", "subsystem"):
+ item_inst = Module(item_itm)
+ fit.modules.append(item_inst)
+ if state and state in statemap:
+ item_inst.state = statemap[state]
+ elif cat == "charge":
+ # Use dummy container for any charge
+ item_inst = Module(db.getItem("Bomb Launcher I"))
+ item_inst.charge = item_itm
+ fit.modules.append(item_inst)
+ elif cat == "implant" and grp == "booster":
+ item_inst = Booster(item_itm)
+ fit.boosters.append(item_inst)
+ # We need item_inst outside of the method
+ return item_inst
+
+ def __detectTupleType(self, tuple):
+ # Define acceptable textual state descriptions
+ states = ("offline", "online", "active", "overheated")
+ # Do not check anything, assume that it's proper item
+ if len(tuple) == 1:
+ return "itm"
+ # Detect if it's item with state or 2 single items
+ elif len(tuple) == 2:
+ if tuple[1] in states:
+ return "itmstt"
+ else:
+ return "itms"
+ elif len(tuple) > 2:
+ return "itms"
+ else:
+ return None
+
+ def __fitItems(self, fit, itms):
+ if isinstance(itms, (tuple, list)):
+ tt = self.__detectTupleType(itms)
+ if tt == "itm":
+ self.__addFitItem(fit, itms)
+ elif tt == "itmstt":
+ self.__addFitItem(fit, itms[0], state=itms[1])
+ elif tt == "itms":
+ for itm in itms:
+ if isinstance(itm, (tuple, list)):
+ tt = self.__detectTupleType(itm)
+ if tt == "itm":
+ self.__addFitItem(fit, itm)
+ elif tt == "itmstt":
+ self.__addFitItem(fit, itm[0], state=itm[1])
+ else:
+ self.__addFitItem(fit, itm)
+ elif itms:
+ self.__addFitItem(fit, itms)
+
+ def getItemAttr(self, attr, item, skill=None, ship="Rifter", getCharge=False, gang=False, miscitms=None):
+ # Create a fit which will be tested
+ fit = Fit()
+ # Create character for fit and assign it
+ char = Character("test")
+ # Assign skills to character only when requested
+ if not gang and skill:
+ skill_itm = db.getItem(skill[0])
+ skill_lvl = skill[1]
+ char.addSkill(Skill(skill_itm, skill_lvl))
+ fit.character = char
+ # Create ship and assign to fit; use default Rifter dummy
+ # in any case as some items affect ship attributes, they can't
+ # be tested w/o ship
+ fit.ship = Ship(db.getItem(ship))
+ # Create and fit an item which will be tested
+ item_inst = self.__addFitItem(fit, item)
+ # Add other modules which can affect ship attributes
+ if miscitms:
+ self.__fitItems(fit, miscitms)
+ # Finish composing of tested fit by calculating its attributes
+ fit.calculateModifiedAttributes()
+ # Use special fit as gang booster when requested
+ if gang:
+ # Do the same for character which will be
+ # squad booster
+ squad_fit = Fit()
+ squad_char = Character("squad_test")
+ # Add leadership skill which is required to boost squad members
+ squad_char.addSkill(Skill(db.getItem("Leadership"), 1))
+ if skill:
+ squad_skill_itm = db.getItem(skill[0])
+ squad_skill_lvl = skill[1]
+ squad_char.addSkill(Skill(squad_skill_itm, squad_skill_lvl))
+ squad_fit.character = squad_char
+ squad_fit.ship = Ship(db.getItem(ship))
+ squad_fit.calculateModifiedAttributes()
+ # Create full fleet structure and assign roles
+ squad = Squad()
+ squad.leader = squad_fit
+ squad.members.append(squad_fit)
+ squad.members.append(fit)
+ wing = Wing()
+ wing.squads.append(squad)
+ fleet = Fleet()
+ fleet.wings.append(wing)
+ # Calculate fleet relationships
+ fleet.calculateModifiedAttributes()
+ # Use charge as an item when it was requested to be tested,
+ # and passed item itself in all other cases
+ cat = db.getItem(item).category.name.lower()
+ if (cat == "drone" and getCharge) or cat == "charge":
+ result = item_inst.getModifiedChargeAttr(attr)
+ else:
+ result = item_inst.getModifiedItemAttr(attr)
+ return result
+
+ def getShipAttr(self, attr, ship="Rifter", skill=None, gang=False, miscitms=None, unmod=False):
+ # Create a fit for testing
+ fit = Fit()
+ # Create character for fit
+ char = Character("test")
+ # Assign skills only when we need to do so
+ if not gang and skill:
+ skill_itm = db.getItem(skill[0])
+ skill_lvl = skill[1]
+ char.addSkill(Skill(skill_itm, skill_lvl))
+ fit.character = char
+ # Create a ship and assign it to the fitting
+ fit.ship = Ship(db.getItem(ship))
+ # Add other modules which can affect ship attributes
+ if miscitms:
+ self.__fitItems(fit, miscitms)
+ # We're done, calculate attributes
+ fit.calculateModifiedAttributes()
+ # Define a gang booster
+ if gang:
+ squad_fit = Fit()
+ squad_char = Character("squad_test")
+ # Add leadership skill which is required to boost squad members
+ squad_char.addSkill(Skill(db.getItem("Leadership"), 1))
+ if skill:
+ squad_skill_itm = db.getItem(skill[0])
+ squad_skill_lvl = skill[1]
+ squad_char.addSkill(Skill(squad_skill_itm, squad_skill_lvl))
+ squad_fit.character = squad_char
+ squad_fit.ship = Ship(db.getItem(ship))
+ squad_fit.calculateModifiedAttributes()
+ squad = Squad()
+ squad.leader = squad_fit
+ squad.members.append(squad_fit)
+ squad.members.append(fit)
+ wing = Wing()
+ wing.squads.append(squad)
+ fleet = Fleet()
+ fleet.wings.append(wing)
+ fleet.calculateModifiedAttributes()
+ # Autodetect which attributes group to use
+ if attr in fit.extraAttributes:
+ result = fit.extraAttributes[attr]
+ else:
+ if unmod:
+ result = fit.ship.item.attributes[attr].value
+ else:
+ result = fit.ship.getModifiedItemAttr(attr)
+ return result
diff --git a/eos/tests/gamedata/__init__.py b/eos/tests/gamedata/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/gamedata/testAttributes.py b/eos/tests/gamedata/testAttributes.py
new file mode 100755
index 000000000..c5e46b8bf
--- /dev/null
+++ b/eos/tests/gamedata/testAttributes.py
@@ -0,0 +1,13 @@
+from eos.tests import TestBase
+from eos import db
+
+class Test(TestBase):
+ def test_attributeNamesMatch(self):
+ i = db.getItem("Gamma L")
+ for attrName, attr in i.attributes.iteritems():
+ self.assertEquals(attrName, attr.name)
+
+ def test_attributeUnit(self):
+ a = db.getAttributeInfo("maxVelocity")
+ self.assertEquals(a.unit.name, "Acceleration")
+ self.assertEquals(a.unit.displayName, "m/sec")
diff --git a/eos/tests/gamedata/testEffectHandlerLoading.py b/eos/tests/gamedata/testEffectHandlerLoading.py
new file mode 100755
index 000000000..75a4c2ace
--- /dev/null
+++ b/eos/tests/gamedata/testEffectHandlerLoading.py
@@ -0,0 +1,8 @@
+from eos.tests import TestBase
+from eos import db
+import types
+
+class Test(TestBase):
+ def test_loadEffect(self):
+ i = db.getItem("Rifter")
+ self.assertEqual(type(i.effects["shipPDmgBonusMF"].handler), types.FunctionType)
diff --git a/eos/tests/gamedata/testGameDataQueries.py b/eos/tests/gamedata/testGameDataQueries.py
new file mode 100755
index 000000000..267c893ef
--- /dev/null
+++ b/eos/tests/gamedata/testGameDataQueries.py
@@ -0,0 +1,44 @@
+from eos.tests import TestBase
+from eos import db
+from eos.types import Item
+
+class Test(TestBase):
+ def test_getItem(self):
+ i = db.getItem("Gamma L")
+ self.assertEqual(i.name, "Gamma L")
+ self.assertEqual(i.ID, 261)
+
+ def test_searchItems(self):
+ i = db.searchItems("Gamma L",where=Item.published == True)
+ self.assertEqual(len(i), 7)
+
+ def test_searchItemsWhere(self):
+ i = db.searchItems("Gamma L", where=Item.published == False)
+ self.assertEqual(len(i), 0)
+
+ def test_getVariations(self):
+ i = db.getItem("Gamma L")
+ vars = db.getVariations(i)
+ for var in vars:
+ self.assertEqual(var.metaGroup.parent, i)
+
+ def test_getVariationsMeta(self):
+ i = db.getItem("Gamma L")
+ vars = db.getVariations(i, metaGroups=4)
+ self.assertEquals(len(vars), 5)
+
+ def test_getMarketGroup(self):
+ m = db.getMarketGroup(157)
+ self.assertEquals(m.name, "Drones")
+
+ def test_getGroup(self):
+ g = db.getGroup(920)
+ self.assertEquals(g.name, "Effect Beacon")
+
+ def test_getCategory(self):
+ c = db.getCategory(6)
+ self.assertEquals(c.name, "Ship")
+
+ def test_getAttributeInfo(self):
+ i = db.getAttributeInfo(2)
+ self.assertEquals(i.name, "isOnline")
diff --git a/eos/tests/gamedata/testItem.py b/eos/tests/gamedata/testItem.py
new file mode 100755
index 000000000..32a7c08c5
--- /dev/null
+++ b/eos/tests/gamedata/testItem.py
@@ -0,0 +1,37 @@
+from eos.tests import TestBase
+from eos import db
+from eos.types import Skill
+
+class Test(TestBase):
+ def test_race(self):
+ i = db.getItem("Dramiel")
+ self.assertEqual(i.race, "angel")
+
+ ii = db.getItem("Punisher")
+ self.assertEqual(ii.race, "amarr")
+
+ def test_requiredSkills(self):
+ i = db.getItem("Dramiel")
+ self.assertEquals(len(i.requiredSkills), 2)
+ skills = ("Minmatar Frigate", "Gallente Frigate")
+ for skill, level in i.requiredSkills.iteritems():
+ self.assertTrue(skill.name in skills)
+ self.assertEquals(level, 3)
+
+ def test_requiresSkill(self):
+ i = db.getItem("Shield Boost Amplifier II")
+ skill = db.getItem("Shield Management")
+ self.assertTrue(i.requiresSkill("Shield Management"))
+ self.assertTrue(i.requiresSkill("Shield Management", 5))
+ self.assertTrue(i.requiresSkill(skill, 5))
+ self.assertTrue(i.requiresSkill(skill))
+ self.assertFalse(i.requiresSkill(1302))
+ self.assertFalse(i.requiresSkill("Moo Management"), 9000)
+
+ self.assertTrue(i.requiresSkill(Skill(skill)))
+
+ def test_attrMover(self):
+ i = db.getItem("Rifter")
+ self.assertEquals(i.capacity, i.getAttribute("capacity"))
+ self.assertEquals(i.volume, i.getAttribute("volume"))
+ self.assertEquals(i.mass, i.getAttribute("mass"))
diff --git a/eos/tests/other/__init__.py b/eos/tests/other/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/other/testAttributeModifiers.py b/eos/tests/other/testAttributeModifiers.py
new file mode 100755
index 000000000..82ad1dec1
--- /dev/null
+++ b/eos/tests/other/testAttributeModifiers.py
@@ -0,0 +1,62 @@
+from eos.tests import TestBase
+from eos.types import Drone
+from eos import db
+
+class Test(TestBase):
+ def test_increase(self):
+ d = Drone(db.getItem("Hobgoblin I"))
+ originalSpeed = d.itemModifiedAttributes["speed"]
+ d.increaseItemAttr("speed", 1302)
+ self.assertEquals(originalSpeed + 1302, d.itemModifiedAttributes["speed"])
+
+ def test_multiply(self):
+ d = Drone(db.getItem("Hobgoblin I"))
+ originalSpeed = d.itemModifiedAttributes["speed"]
+ d.multiplyItemAttr("speed", 2.35)
+ self.assertAlmostEquals(originalSpeed * 2.35, d.itemModifiedAttributes["speed"])
+
+ def test_boost(self):
+ d = Drone(db.getItem("Hobgoblin I"))
+ originalSpeed = d.itemModifiedAttributes["speed"]
+ d.boostItemAttr("speed", 20)
+ self.assertAlmostEquals(originalSpeed * 1.20, d.itemModifiedAttributes["speed"])
+
+ def test_stackingPenalizedMultiply(self):
+ d = Drone(db.getItem("Hobgoblin I"))
+ originalSpeed = d.itemModifiedAttributes["speed"]
+ d.multiplyItemAttr("speed", 2.35, stackingPenalties = True) #Should get penalties
+ d.multiplyItemAttr("speed", 2.6, stackingPenalties = True) #Shouldn't get penalties
+ d.multiplyItemAttr("speed", 0.4, stackingPenalties = True) #Shouldn't get penalties
+ d.multiplyItemAttr("speed", 0.6, stackingPenalties = True) #Should get penalties
+ self.assertAlmostEquals(originalSpeed * (1 + -0.4* 0.86911998) * 0.4 * (1 + 1.35 * 0.86911998) * (1 + 1.6),
+ d.itemModifiedAttributes["speed"], 2)
+
+ def test_stackingPenaltyMultiplyGroups(self):
+ d = Drone(db.getItem("Hobgoblin I"))
+ originalSpeed = d.itemModifiedAttributes["speed"]
+ d.multiplyItemAttr("speed", 2.1, stackingPenalties = True, penaltyGroup = "test1") #Shouldn't get penaltied
+ d.multiplyItemAttr("speed", 2.5, stackingPenalties = True, penaltyGroup = "test2") #Should get penaltied
+ d.multiplyItemAttr("speed", 2.7, stackingPenalties = True, penaltyGroup = "test2") #Shouldn't get penaltied
+ d.multiplyItemAttr("speed", 1.6, stackingPenalties = True, penaltyGroup = "test1") #Should get penaltied
+ self.assertAlmostEqual(originalSpeed * 2.1 * 2.7 * (1 + 1.5 * 0.86911998) * (1 + 0.6 * 0.86911998),
+ d.itemModifiedAttributes["speed"], 2)
+
+ def test_stackingPenalizedBoost(self):
+ d = Drone(db.getItem("Hobgoblin I"))
+ originalSpeed = d.itemModifiedAttributes["speed"]
+ d.boostItemAttr("speed", 35, stackingPenalties = True) #Should get penalties
+ d.boostItemAttr("speed", 60, stackingPenalties = True) #Shouldn't get penalties
+ d.boostItemAttr("speed", -40, stackingPenalties = True) #Should get penalties
+ d.boostItemAttr("speed", -60, stackingPenalties = True) #Shouldn't get penalties
+ self.assertAlmostEquals(originalSpeed * (1 + 0.35 * 0.86911998) * 1.6 * (1 - 0.6) * (1 - 0.4 * 0.86911998),
+ d.itemModifiedAttributes["speed"], 2)
+
+ def test_stackingPenaltyBoostGroups(self):
+ d = Drone(db.getItem("Hobgoblin I"))
+ originalSpeed = d.itemModifiedAttributes["speed"]
+ d.boostItemAttr("speed", 10, stackingPenalties = True, penaltyGroup = "test1") #Should get penaltied
+ d.boostItemAttr("speed", 50, stackingPenalties = True, penaltyGroup = "test2") #Should get penaltied
+ d.boostItemAttr("speed", 70, stackingPenalties = True, penaltyGroup = "test2") #Shouldn't get penaltied
+ d.boostItemAttr("speed", 60, stackingPenalties = True, penaltyGroup = "test1") #Shouldn't get penaltied
+ self.assertAlmostEqual(originalSpeed * (1 + 0.10 * 0.86911998) * (1 + 0.5 * 0.86911998) * 1.7 * 1.6,
+ d.itemModifiedAttributes["speed"], 2)
diff --git a/eos/tests/other/testDump.py b/eos/tests/other/testDump.py
new file mode 100755
index 000000000..997cc7145
--- /dev/null
+++ b/eos/tests/other/testDump.py
@@ -0,0 +1,7 @@
+from eos.tests import TestBase
+from eos import db
+
+class Test(TestBase):
+ def test_unicode(self):
+ # Deliberatly request something with non-ASCII symbol in it. Will crash if the dump isn't encoded correctly
+ db.getAttributeInfo(384)
diff --git a/eos/tests/other/testModifiedAttributeDict.py b/eos/tests/other/testModifiedAttributeDict.py
new file mode 100755
index 000000000..65bc4a3d2
--- /dev/null
+++ b/eos/tests/other/testModifiedAttributeDict.py
@@ -0,0 +1,57 @@
+from eos.tests import TestBase
+from eos.modifiedAttributeDict import ModifiedAttributeDict
+from eos import db
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.dict = ModifiedAttributeDict()
+ self.i = db.getItem("125mm Gatling AutoCannon I")
+
+ def test_setValidOriginal(self):
+ self.dict.original = self.i.attributes
+
+ def test_originalAttributesMatch(self):
+ self.dict.original = self.i.attributes
+ for key,val in self.dict.items():
+ self.assertEqual(val, self.i.attributes[key].value)
+
+ def test_modificationWorks(self):
+ self.dict.original = self.i.attributes
+ self.dict["hp"] = 5
+ self.assertEqual(self.dict["hp"], 5)
+
+ def test_overrideAndCalculate(self):
+ self.dict.original = self.i.attributes
+ self.dict["hp"] = 5
+ self.dict.increase("hp", 5)
+ self.assertEqual(self.dict["hp"], 10)
+
+ def test_calculateOverride(self):
+ self.dict.original = self.i.attributes
+ self.dict.increase("hp", 10)
+ self.dict["hp"] = 5
+ self.assertEqual(self.dict["hp"], 15)
+
+ def test_originalNone(self):
+ self.dict.original = {}
+ self.assertEquals(self.dict["maeazhtg"], None)
+
+ def test_force(self):
+ self.dict.original = self.i.attributes
+ self.dict.force("hp", 9000)
+ self.dict.increase("hp",284)
+ self.dict.multiply("hp", 2487)
+ self.dict["hp"] = 1
+ self.assertEqual(self.dict["hp"], 9000)
+
+ def test_newValue(self):
+ self.dict.original = {}
+ self.dict["test"] = 3
+ self.dict.increase("test", 5)
+ self.assertEqual(self.dict["test"], 8)
+
+ def test_increaseInexistent(self):
+ self.dict.original = {}
+ self.dict.increase("test", 5)
+ self.assertEquals(self.dict["test"], 5)
diff --git a/eos/tests/runMassEffectTests.py b/eos/tests/runMassEffectTests.py
new file mode 100755
index 000000000..b709505c4
--- /dev/null
+++ b/eos/tests/runMassEffectTests.py
@@ -0,0 +1,72 @@
+#===============================================================================
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+if __name__ == "__main__":
+ print "starting"
+ import sys
+ import os.path
+
+ #Add the good path to sys.path
+ path = os.path.dirname(unicode(__file__, sys.getfilesystemencoding()))
+ sys.path.append(os.path.realpath(os.path.join(path, "..", "..")))
+
+ from eos.types import Effect
+ from eos.gamedata import effectDummy
+
+ print "checking files in effects folder"
+ list = os.listdir(os.path.join("../effects"))
+ def validate(fileName):
+ moduleName, ext = os.path.splitext(fileName)
+ return moduleName != "__init__" and ext == ".py"
+
+ list = filter(validate, list)
+ size = len(list)
+ print "found %d effects, starting checks:" % size
+ i = 0
+ lastError = -500
+ errors = 0
+ errorString = ""
+ for fileName in list:
+ moduleName, ext = os.path.splitext(fileName)
+ i += 1
+ if i / 50.0 == int(i / 50.0):
+ sys.stdout.write(".")
+ sys.stdout.flush()
+
+ e = Effect()
+ e.name = unicode(moduleName)
+ try:
+ e.init()
+
+ if e.handler == effectDummy:
+ errors += 1
+ sys.stdout.write("F")
+ errorString += "\n%s: No handler" % moduleName
+ if e.type is None:
+ errors += 1
+ sys.stdout.write("F")
+ errorString += "\n%s: No type" % moduleName
+ except Exception, exc:
+ errors += 1
+ sys.stdout.write("E")
+ errorString += "\n%s: Exception thrown: %s\n%s\n" % (moduleName, exc.__class__, exc)
+
+ sys.stderr.write(errorString)
+
+ print ""
+ print "Done"
+ print "%d errors with a total of %d effects (%.2f%%)" % (errors, size, float(errors) / size * 100)
diff --git a/eos/tests/runTests.py b/eos/tests/runTests.py
new file mode 100755
index 000000000..0b3974757
--- /dev/null
+++ b/eos/tests/runTests.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python
+#===============================================================================
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+import unittest, os.path, sys
+
+#Add the good path to sys.path
+path = os.path.dirname(unicode(__file__, sys.getfilesystemencoding()))
+sys.path.append(os.path.realpath(os.path.join(path, "..", "..")))
+
+from eos import config
+
+config.debug = False
+config.saveddata_connectionstring = "sqlite:///:memory:"
+config.saveddataCache = None
+
+class Loader(unittest.TestLoader):
+ def loadTestsFromName(self, name, module = None):
+ if name == "discover":
+ return iteratedir(os.path.dirname(__file__))
+ else:
+ prefix = name.split(".")
+ fullpath = os.path.join(os.path.dirname(__file__), *prefix)
+ if os.path.isdir(os.path.join(fullpath)):
+ return iteratedir(fullpath, prefix)
+ else:
+ module = __import__(name, fromlist=True)
+ return self.loadTestsFromModule(module)
+
+loader = Loader()
+def iteratedir(dir, prefix = [], suite = None):
+ suite = suite if suite is not None else unittest.TestSuite()
+ for filename in os.listdir(dir or '.'):
+ moduleName, ext = os.path.splitext(filename)
+ moduleName = '.'.join(prefix + [moduleName])
+
+ if os.path.isdir(os.path.join(dir, filename)):
+ module = __import__(moduleName + ".__init__", fromlist = True)
+ subSuite = unittest.TestSuite()
+ suite.addTest(subSuite)
+ iteratedir(os.path.join(dir, filename), prefix + [filename], subSuite)
+
+ if ext == ".py" and moduleName not in ("__init__", "runTests", "runMassEffectTests"):
+ module = __import__(moduleName, fromlist = True)
+ suite.addTest(loader.loadTestsFromModule(module))
+
+ return suite
+
+if __name__ == "__main__":
+ unittest.main(defaultTest="discover", testLoader=loader)
diff --git a/eos/tests/saveddata/__init__.py b/eos/tests/saveddata/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/saveddata/testBooster.py b/eos/tests/saveddata/testBooster.py
new file mode 100755
index 000000000..78b2bcafa
--- /dev/null
+++ b/eos/tests/saveddata/testBooster.py
@@ -0,0 +1,103 @@
+from eos.tests import TestBase
+from eos import db
+from eos.types import Booster, Fit, User, Ship
+import sqlalchemy.orm
+import eos.db.saveddata.queries
+from copy import deepcopy
+
+class Test(TestBase):
+ def test_setInvalidBooster(self):
+ try:
+ Booster(db.getItem("Gamma L"))
+ except ValueError:
+ return
+ self.fail("Expected a ValueError when trying to use Gamma L as a booster")
+
+ def test_setValidBooster(self):
+ b = Booster(db.getItem("Strong Drop Booster"))
+ self.assertEquals(2, b.slot)
+ i = 0
+ for _ in b.iterSideEffects():
+ i+= 1
+
+ self.assertEquals(4, i)
+
+ def test_testEffectList(self):
+ b = Booster(db.getItem("Strong Drop Booster"))
+ i = 0
+ names = ("boosterTurretFalloffPenalty", "boosterArmorRepairAmountPenalty",
+ "boosterMaxVelocityPenalty", "boosterShieldCapacityPenalty")
+ for sideEffect in b.iterSideEffects():
+ i += 1
+ if not sideEffect.effect.name in names:
+ self.fail("Invalid effect " + sideEffect.effect.name)
+
+ self.assertEquals(4, i)
+
+ def test_clear(self):
+ b = Booster(db.getItem("Strong Drop Booster"))
+ orig = b.getModifiedItemAttr("trackingSpeedMultiplier")
+
+ b.itemModifiedAttributes["trackingSpeedMultiplier"] = 5
+ b.clear()
+ self.assertEquals(b.getModifiedItemAttr("trackingSpeedMultiplier"), orig)
+
+ def test_databaseConsistency(self):
+ oldSession = db.saveddata_session
+ oldSession.commit()
+ try:
+ f = Fit()
+ f.ship = Ship(db.getItem("Rifter"))
+ f.owner = User("boostertest", "testy", False)
+ b = Booster(db.getItem("Strong Drop Booster"))
+ b.active = True
+ activate = ("boosterTurretFalloffPenalty", "boosterArmorRepairAmountPenalty")
+ for sideEffect in b.iterSideEffects():
+ if sideEffect.effect.name in activate:
+ sideEffect.active = True
+
+ f.boosters.append(b)
+ db.saveddata_session.add(f)
+ db.saveddata_session.flush()
+ fitID = f.ID
+ f1id = id(f)
+ b1id = id(b)
+
+ #Hack our way through changing the session temporarly
+ oldSession = eos.db.saveddata.queries.saveddata_session
+ eos.db.saveddata.queries.saveddata_session = sqlalchemy.orm.sessionmaker(bind=db.saveddata_engine)()
+
+ f = db.getFit(fitID)
+ self.assertNotEquals(f1id, id(f))
+ i = 0
+ for b in f.boosters:
+ i += 1
+ booster = b
+
+ self.assertTrue(b.active)
+ self.assertNotEquals(b1id, id(booster))
+ self.assertEquals(i, 1)
+ for sideEffect in booster.iterSideEffects():
+ self.assertEquals(sideEffect.effect.name in activate, sideEffect.active)
+ except:
+ db.saveddata_session.rollback()
+ raise
+ finally:
+ #Undo our hack as to not fuck up anything
+ eos.db.saveddata.queries.saveddata_session = oldSession
+
+ def test_copy(self):
+ b = Booster(db.getItem("Strong Drop Booster"))
+ b.active = False
+ activate = ("boosterTurretFalloffPenalty", "boosterArmorRepairAmountPenalty")
+ for sideEffect in b.iterSideEffects():
+ if sideEffect.effect.name in activate:
+ sideEffect.active = True
+
+ copy = deepcopy(b)
+
+ self.assertNotEquals(id(b), id(copy))
+ self.assertEquals(b.item, copy.item)
+ self.assertEquals(b.active, copy.active)
+ for sideEffect in copy.iterSideEffects():
+ self.assertEquals(sideEffect.effect.name in activate, sideEffect.active)
diff --git a/eos/tests/saveddata/testCharacter.py b/eos/tests/saveddata/testCharacter.py
new file mode 100755
index 000000000..74a1e4eaf
--- /dev/null
+++ b/eos/tests/saveddata/testCharacter.py
@@ -0,0 +1,106 @@
+from eos.tests import TestBase
+from eos.types import Character, User, Fit, Skill, Ship
+from eos.saveddata.character import ReadOnlyException
+from eos import db
+import eos.db.saveddata.queries
+import sqlalchemy.orm
+from copy import deepcopy
+
+class Test(TestBase):
+ def test_databaseConsistency(self):
+ oldSession = db.saveddata_session
+ oldSession.commit()
+ try:
+ f = Fit()
+ f.ship = Ship(db.getItem("Rifter"))
+ c = Character("testChar")
+ f.character = c
+ u = User("testChar", "moo", False)
+ f.owner = u
+ c.owner = u
+ c.addSkill(Skill(db.getItem("Caldari Frigate"), 3))
+ c.addSkill(Skill(db.getItem("Gallente Frigate"), 1))
+ c.addSkill(Skill(db.getItem("Gallente Industrial"), 5))
+ db.saveddata_session.add(u)
+ db.saveddata_session.add(c)
+ db.saveddata_session.add(f)
+ db.saveddata_session.flush()
+
+ #Hack our way through changing the session temporarly
+ oldSession = eos.db.saveddata.queries.saveddata_session
+ eos.db.saveddata.queries.saveddata_session = sqlalchemy.orm.sessionmaker(bind=db.saveddata_engine)()
+
+ newf = db.getFit(f.ID)
+ newu = db.getUser(u.ID)
+ newc = newu.characters[0]
+ self.assertNotEquals(id(newf), id(f))
+ self.assertNotEquals(id(newu), id(u))
+ self.assertNotEquals(id(newc), id(c))
+ self.assertEquals(len(newu.characters), 1)
+ self.assertEquals(f.character.ID, newf.character.ID)
+ skillDict= {"Caldari Frigate" : 3,
+ "Gallente Frigate" : 1,
+ "Gallente Industrial" : 5}
+ for skill in newc.iterSkills():
+ self.assertTrue(skillDict.has_key(skill.item.name))
+ self.assertEquals(skillDict[skill.item.name], skill.level)
+
+
+ except:
+ db.saveddata_session.rollback()
+ raise
+ finally:
+ #Undo our hack as to not fuck up anything
+ eos.db.saveddata.queries.saveddata_session = oldSession
+
+ def test_suppress(self):
+ s = Skill(db.getItem("Caldari Frigate"))
+ s.suppress()
+ self.assertTrue(s.isSuppressed())
+ s.clear()
+ self.assertFalse(s.isSuppressed())
+
+ def test_getSkill(self):
+ c = Character("testetyChar")
+ s1 = Skill(db.getItem("Caldari Frigate"), 3)
+ c.addSkill(s1)
+ c.addSkill(Skill(db.getItem("Gallente Frigate"), 1))
+ c.addSkill(Skill(db.getItem("Gallente Industrial"), 5))
+ self.assertEquals(c.getSkill(s1.item.name), s1)
+ self.assertEquals(c.getSkill(s1.item.ID), s1)
+ self.assertEquals(c.getSkill(s1.item), s1)
+
+ def test_readOnly(self):
+ s = Skill(db.getItem("Caldari Frigate"), 3, True)
+ try:
+ s.level = 5
+ except ReadOnlyException:
+ return
+ self.fail("Expected ReadOnlyExcption, didn't get it")
+
+ def test_all0(self):
+ c = Character.getAll0()
+ for skill in c.iterSkills():
+ self.assertEquals(skill.level, 0)
+
+ def test_all5(self):
+ c = Character.getAll5()
+ for skill in c.iterSkills():
+ self.assertEquals(skill.level, 5)
+
+ def test_copy(self):
+ c = Character("TEST")
+ s = c.getSkill("Leadership")
+ s.level = 5
+ c.apiKey = "FHIGUUHVBIUHYUIGOYHUIORUIUOHYIUGUIERYGIUUYI9U0BGUYYOIIGHIUHIUYGU"
+ c.apiID = 43636
+
+ copy = deepcopy(c)
+ self.assertNotEquals(id(c), id(copy))
+ self.assertEquals(c.apiKey, copy.apiKey)
+ self.assertEquals(c.apiID, copy.apiID)
+ self.assertEquals("%s copy" % c.name, copy.name)
+
+ news = copy.getSkill("Leadership")
+ self.assertNotEquals(id(s), id(news))
+ self.assertEquals(s.level, news.level)
diff --git a/eos/tests/saveddata/testDamagePattern.py b/eos/tests/saveddata/testDamagePattern.py
new file mode 100755
index 000000000..47457c8d3
--- /dev/null
+++ b/eos/tests/saveddata/testDamagePattern.py
@@ -0,0 +1,69 @@
+from eos.tests import TestBase
+from eos import db
+from eos.types import Fit, DamagePattern, Ship, Module, State
+
+class Test(TestBase):
+ def test_rawEhp(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Wolf"))
+ expected = 0
+ for type in ("shieldCapacity", "armorHP", "hp"):
+ expected += f.ship.getModifiedItemAttr(type)
+
+ self.assertEquals(expected, sum(f.ehp.values()))
+
+ def test_uniformEhp(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Wolf"))
+ f.damagePattern = DamagePattern(25, 25, 25 ,25)
+ self.assertAlmostEquals(3094, sum(f.ehp.values()), 0)
+
+ def test_passiveRechargeUniform(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Wolf"))
+ f.damagePattern = DamagePattern(25, 25, 25, 25)
+ self.assertAlmostEquals(3.86, f.effectiveTank["passiveShield"], 2)
+
+ def test_armorRepairUniform(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Wolf"))
+ f.damagePattern = DamagePattern(25, 25, 25 ,25)
+ m = Module(db.getItem("Small Armor Repairer I"))
+ m.state = State.ACTIVE
+ f.modules.append(m)
+ f.calculateModifiedAttributes()
+ self.assertAlmostEquals(19.3, f.effectiveTank["armorRepair"], 1)
+
+ def test_shieldBoostUniform(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Wolf"))
+ f.damagePattern = DamagePattern(25, 25, 25 ,25)
+ m = Module(db.getItem("Small Shield Booster I"))
+ m.state = State.ACTIVE
+ f.modules.append(m)
+ f.calculateModifiedAttributes()
+ self.assertAlmostEquals(26.3, f.effectiveTank["shieldRepair"],1)
+
+ def test_hullRepairUniform(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Wolf"))
+ f.damagePattern = DamagePattern(25, 25, 25 ,25)
+ m = Module(db.getItem("Small Hull Repairer I"))
+ m.state = State.ACTIVE
+ f.modules.append(m)
+ f.calculateModifiedAttributes()
+ self.assertAlmostEquals(f.extraAttributes["hullRepair"], f.effectiveTank["hullRepair"],1)
+
+ def test_importPattern(self):
+ d = DamagePattern.importPatterns("Test = EM:5, THERM:42, KIN:1302, EXP:6")[0]
+ self.assertEquals(d.name, "Test")
+ self.assertEquals(d.emAmount, 5)
+ self.assertEquals(d.thermalAmount, 42)
+ self.assertEquals(d.kineticAmount, 1302)
+ self.assertEquals(d.explosiveAmount, 6)
+
+ def test_exportPattern(self):
+ d = DamagePattern(5, 42, 1302, 6)
+ d.name = "Test"
+ self.assertEquals(DamagePattern.exportPatterns(d), "Test = EM:5, Therm:42, Kin:1302, Exp:6")
+
diff --git a/eos/tests/saveddata/testDrone.py b/eos/tests/saveddata/testDrone.py
new file mode 100755
index 000000000..5bd9205fd
--- /dev/null
+++ b/eos/tests/saveddata/testDrone.py
@@ -0,0 +1,86 @@
+from eos.tests import TestBase
+from eos import db
+from eos.types import Drone, Fit, User, Ship
+import eos.db.saveddata.queries
+import sqlalchemy.orm
+from copy import deepcopy
+
+class Test(TestBase):
+ def test_clear(self):
+ d = Drone(db.getItem("Hobgoblin I"))
+ orig = d.getModifiedItemAttr("hp")
+ d.itemModifiedAttributes["hp"] = 5
+ d.clear()
+ self.assertEquals(d.getModifiedItemAttr("hp"), orig)
+
+ def test_databaseConsistency(self):
+ oldSession = db.saveddata_session
+ oldSession.commit()
+ try:
+ f = Fit()
+ f.owner = User("dronetest", "testy", False)
+ f.ship = Ship(db.getItem("Rifter"))
+ i = db.getItem("Hobgoblin I")
+
+ d = f.drones.appendItem(i, 5)
+ d.amountActive = 3
+ d2 = f.projectedDrones.appendItem(i, 3)
+ f1id = id(f)
+ d1id = id(d)
+
+ db.saveddata_session.add(f)
+ db.saveddata_session.add(d)
+ db.saveddata_session.flush()
+
+ fitID = f.ID
+
+ #Hack our way through changing the session temporarly
+ oldSession = eos.db.saveddata.queries.saveddata_session
+ eos.db.saveddata.queries.saveddata_session = sqlalchemy.orm.sessionmaker(bind=db.saveddata_engine)()
+
+ f = db.getFit(fitID)
+ self.assertNotEquals(id(f), f1id)
+
+
+ c = 0
+ for d in f.drones:
+ c += 1
+ self.assertNotEquals(id(d), d1id)
+
+ self.assertEquals(c, 1)
+ self.assertEquals(d.item.ID, i.ID)
+ self.assertEquals(d.amount, 5)
+ self.assertEquals(d.amountActive, 3)
+
+ c = 0
+ for d in f.projectedDrones:
+ c += 1
+ self.assertNotEquals(id(d2), id(d))
+
+ self.assertEquals(c, 1)
+ self.assertEquals(d.item.ID, i.ID)
+ self.assertEquals(d.amount, 3)
+ except:
+ db.saveddata_session.rollback()
+ raise
+ finally:
+ #Undo our hack as to not fuck up anything
+ eos.db.saveddata.queries.saveddata_session = oldSession
+
+ def test_copy(self):
+ d = Drone(db.getItem("Hobgoblin I"))
+ d.amount = 3
+ d.amountActive = 1
+
+ c = deepcopy(d)
+ self.assertNotEquals(id(d), id(c))
+ self.assertEquals(d.item, c.item)
+ self.assertEquals(d.amount, c.amount)
+ self.assertEquals(d.amountActive, c.amountActive)
+
+ def test_dps(self):
+ d = Drone(db.getItem("Hobgoblin I"))
+ d.amount = 3
+ d.amountActive = 1
+
+ self.assertEquals(d.dps, 6)
diff --git a/eos/tests/saveddata/testFilteredModifiers.py b/eos/tests/saveddata/testFilteredModifiers.py
new file mode 100755
index 000000000..dcc3dc3d6
--- /dev/null
+++ b/eos/tests/saveddata/testFilteredModifiers.py
@@ -0,0 +1,65 @@
+from eos.tests import TestBase
+from eos import db
+from eos.types import Fit
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.f = Fit()
+ self.i1 = db.getItem("Cyclops")
+ self.i2 = db.getItem("Cyclops")
+ self.charge = db.getItem("Compact Purgatory Torpedo I")
+ self.f.drones.appendItem(self.i1, 1)
+ self.f.drones.appendItem(self.i2, 1)
+
+ def test_filteredItemIncrease(self):
+ self.f.drones.filteredItemIncrease(lambda d: d.item.ID == self.i1.ID, "hp", 5)
+ for d in self.f.drones:
+ if d.item.ID == self.i1.ID:
+ self.assertEquals(d.itemModifiedAttributes["hp"], self.i1.getAttribute("hp") + 5)
+ else:
+ self.assertEquals(d.itemModifiedAttributes["hp"], self.i2.getAttribute("hp"))
+
+
+ def test_filteredItemMultiply(self):
+ self.f.drones.filteredItemMultiply(lambda d: d.item.ID == self.i1.ID, "hp", 5)
+ for d in self.f.drones:
+ if d.item.ID == self.i1.ID:
+ self.assertEquals(d.itemModifiedAttributes["hp"], self.i1.getAttribute("hp") * 5)
+ else:
+ self.assertEquals(d.itemModifiedAttributes["hp"], self.i2.getAttribute("hp"))
+
+
+ def test_filteredItemBoost(self):
+ self.f.drones.filteredItemBoost(lambda d: d.item.ID == self.i1.ID, "hp", 5)
+ for d in self.f.drones:
+ if d.item.ID == self.i1.ID:
+ self.assertEquals(d.itemModifiedAttributes["hp"], self.i1.getAttribute("hp") * 1.05)
+ else:
+ self.assertEquals(d.itemModifiedAttributes["hp"], self.i2.getAttribute("hp"))
+
+ def test_filteredChargeIncrease(self):
+ self.f.drones.filteredChargeIncrease(lambda d: d.item.ID == self.i1.ID, "hp", 5)
+ for d in self.f.drones:
+ if d.item.ID == self.i1.ID:
+ self.assertEquals(d.chargeModifiedAttributes["hp"], self.charge.getAttribute("hp") + 5)
+ else:
+ self.assertEquals(d.chargeModifiedAttributes["hp"], self.charge.getAttribute("hp"))
+
+
+ def test_filteredChargeMultiply(self):
+ self.f.drones.filteredChargeMultiply(lambda d: d.item.ID == self.i1.ID, "hp", 5)
+ for d in self.f.drones:
+ if d.item.ID == self.i1.ID:
+ self.assertEquals(d.chargeModifiedAttributes["hp"], self.charge.getAttribute("hp") * 5)
+ else:
+ self.assertEquals(d.chargeModifiedAttributes["hp"], self.charge.getAttribute("hp"))
+
+
+ def test_filteredChargeBoost(self):
+ self.f.drones.filteredChargeBoost(lambda d: d.item.ID == self.i1.ID, "hp", 5)
+ for d in self.f.drones:
+ if d.item.ID == self.i1.ID:
+ self.assertEquals(d.chargeModifiedAttributes["hp"], self.charge.getAttribute("hp") * 1.05)
+ else:
+ self.assertEquals(d.chargeModifiedAttributes["hp"], self.charge.getAttribute("hp"))
diff --git a/eos/tests/saveddata/testFit.py b/eos/tests/saveddata/testFit.py
new file mode 100755
index 000000000..7c3e68048
--- /dev/null
+++ b/eos/tests/saveddata/testFit.py
@@ -0,0 +1,467 @@
+from eos.tests import TestBase
+from eos.types import Fit, Character, Slot, Module, Ship, User, State, Drone, Implant, Booster, Hardpoint, DamagePattern
+from eos import db
+import eos.db.saveddata.queries
+import sqlalchemy.orm
+from copy import deepcopy
+from itertools import count
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.m = Module(db.getItem("Heat Sink I"))
+
+ def test_tankNumbers(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Erebus"))
+ f.modules.append(Module(db.getItem("Small Shield Booster II")))
+ f.modules.append(Module(db.getItem("Small Armor Repairer II")))
+ f.modules.append(Module(db.getItem("Small Hull Repairer II")))
+ f.modules.append(Module(db.getItem("Damage Control II")))
+ f.damagePattern = DamagePattern(25, 25, 25, 25)
+ for m in f.modules:
+ m.state = State.ACTIVE
+ f.calculateModifiedAttributes()
+
+ self.assertEquals(len(f.effectiveTank), len(f.tank))
+ for k in f.effectiveTank.iterkeys():
+ self.assertGreater(f.effectiveTank[k], f.tank[k])
+
+ self.assertEquals(len(f.effectiveSustainableTank), len(f.sustainableTank))
+ for k in f.effectiveSustainableTank.iterkeys():
+ self.assertGreater(f.effectiveSustainableTank[k], f.sustainableTank[k])
+
+ def test_addDrain(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Rifter"))
+ f.addDrain(5, 500, 0)
+ self.assertEquals(f.capUsed, 100000)
+
+ def test_setCharacter(self):
+ f = Fit()
+ f.character = Character("Testety")
+
+ def test_addNotAModule(self):
+ try:
+ self.f.addModule(1302)
+ except:
+ return
+ self.fail("Added an invalid module, was expecting a ValueError")
+
+ def test_addValidModule(self):
+ f = Fit()
+ f.modules.append(self.m)
+
+ def test_importEft(self):
+ f = Fit.importEft('''[Rifter, Test]
+ Salvager I
+ Hobgoblin I x4''')
+
+ self.assertEquals(f.name, "Test")
+ self.assertEquals(f.ship.item.name, "Rifter")
+ self.assertEquals(f.modules[0].item.name, "Salvager I")
+ self.assertEquals(f.drones[0].amount, 4)
+ self.assertEquals(f.drones[0].item.name, "Hobgoblin I")
+
+ def test_importXml(self):
+ fits = Fit.importXml('''
+
+
+
+
+
+
+ ''')
+
+ f = fits[0]
+ self.assertEquals(f.name, "Test")
+ self.assertEquals(f.ship.item.name, "Rifter")
+ self.assertEquals(f.modules[0].item.name, "Salvager II")
+
+ def test_removeModuleNotExists(self):
+ f = Fit()
+ self.assertRaises(ValueError, f.modules.remove, self.m)
+
+ def test_removeModuleExists(self):
+ f = Fit()
+ f.modules.append(self.m)
+ f.modules.remove(self.m)
+
+ def test_removeInvalidModule(self):
+ f = Fit()
+ self.assertRaises(ValueError, f.modules.remove, 1302)
+
+ def test_setShip(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Rifter"))
+
+ def test_extraAttributesClear(self):
+ f = Fit()
+ f.extraAttributes["cloaked"] = True
+ f.clear()
+ self.assertEqual(f.extraAttributes["cloaked"], False)
+
+ def test_databaseConsistency(self):
+ oldSession = db.saveddata_session
+ oldSession.commit()
+ try:
+ f = Fit()
+ f.ship = Ship(db.getItem("Rifter"))
+ f.name = "test fit 1"
+ u = User("fittest", "testy", False)
+ f.owner = u
+
+ f2 = Fit()
+ f2.ship = Ship(db.getItem("Thrasher"))
+ f2.name = "test fit 2"
+ f2.owner = u
+ db.saveddata_session.add(f)
+ db.saveddata_session.add(f2)
+ db.saveddata_session.flush()
+
+ f.projectedFits.append(f2)
+
+ #Hack our way through changing the session temporarly
+ oldSession = eos.db.saveddata.queries.saveddata_session
+ eos.db.saveddata.queries.saveddata_session = sqlalchemy.orm.sessionmaker(bind=db.saveddata_engine)()
+
+ newf = db.getFit(f.ID)
+
+ self.assertNotEquals(id(newf), id(f))
+ self.assertEquals(f.name, newf.name)
+ for fit in newf.projectedFits:
+ self.assertNotEqual(id(fit), id(f2))
+ self.assertEquals(f2.name, fit.name)
+
+
+
+ except:
+ db.saveddata_session.rollback()
+ raise
+ finally:
+ #Undo our hack as to not fuck up anything
+ eos.db.saveddata.queries.saveddata_session = oldSession
+
+ def test_projectedFit(self):
+ f1 = Fit()
+ f1.ship = Ship(db.getItem("Rifter"))
+ f2 = Fit()
+ m1 = Module(db.getItem("Stasis Webifier I"))
+ m2 = Module(db.getItem("Stasis Webifier I"))
+ m1.state = State.ACTIVE
+ m2.state = State.ACTIVE
+ f2.modules.append(m1)
+ f2.modules.append(m2)
+ f1.projectedFits.append(f2)
+ f1.calculateModifiedAttributes()
+ self.assertAlmostEquals(99.800, f1.ship.getModifiedItemAttr("maxVelocity"), 3)
+
+ def test_projectSelf(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Rifter"))
+ m1 = Module(db.getItem("Stasis Webifier I"))
+ m2 = Module(db.getItem("Stasis Webifier I"))
+ m1.state = State.ACTIVE
+ m2.state = State.ACTIVE
+ f.modules.append(m1)
+ f.modules.append(m2)
+ f.projectedFits.append(f)
+ f.calculateModifiedAttributes()
+ self.assertAlmostEquals(99.800, f.ship.getModifiedItemAttr("maxVelocity"), 3)
+
+ def test_capacitorNoMods(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Rifter"))
+ self.assertEquals(f.capStable, True)
+ self.assertAlmostEquals(f.capState, 100, 1)
+
+ def test_capacitorUnstable(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Rifter"))
+ m = Module(db.getItem("100MN Afterburner I"))
+ m.state = State.ACTIVE
+ f.modules.append(m)
+ self.assertFalse(f.capStable)
+ self.assertTrue(f.capState < 15)
+
+ def test_capacitorSingleCycleKill(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Rifter"))
+ for _ in xrange(5):
+ m = Module(db.getItem("100MN Afterburner I"))
+ m.state = State.ACTIVE
+ f.modules.append(m)
+
+ self.assertFalse(f.capStable)
+ self.assertEquals(f.capState, 0)
+
+ def test_copy(self):
+ f = Fit()
+ f.name = "Testety"
+ f.character = Character("TEST")
+ f.owner = User("moo")
+ testm = Module(db.getItem("Heat Sink I"))
+ f.modules.append(testm)
+ tests = Ship(db.getItem("Rifter"))
+
+ f.ship = tests
+
+ testpm = Module(db.getItem("Stasis Webifier I"))
+ f.projectedModules.append(testpm)
+
+ testd = Drone(db.getItem("Hobgoblin I"))
+ f.drones.append(testd)
+
+ testi = Implant(db.getItem("Halo Omega"))
+ f.implants.append(testi)
+
+ testb = Booster(db.getItem("Strong Drop Booster"))
+ f.boosters.append(testb)
+
+ testpd = Drone(db.getItem("Warrior TP-300"))
+ f.projectedDrones.append(testpd)
+
+ testpf = Fit()
+ f.ship = Ship(db.getItem("Rifter"))
+ f.name = "Projected"
+ f.projectedFits.append(testpf)
+
+ newf = deepcopy(f)
+ self.assertEquals(newf.name, "%s copy" % f.name)
+ self.assertEquals(newf.character, f.character)
+ self.assertEquals(newf.owner, f.owner)
+
+ newm = newf.modules[0]
+ self.assertNotEquals(id(newm), id(testm))
+ self.assertEquals(len(newf.modules), len(f.modules))
+
+ newpm = newf.projectedModules[0]
+ self.assertNotEquals(id(newpm), id(testpm))
+ self.assertEquals(len(newf.projectedModules), len(f.projectedModules))
+
+ newd = newf.drones[0]
+ self.assertNotEquals(id(newd), id(testd))
+ self.assertEquals(len(newf.drones), len(f.drones))
+
+ newb = newf.boosters[0]
+ self.assertNotEquals(id(newb), id(testb))
+ self.assertEquals(len(newf.boosters), len(f.boosters))
+
+ newi = newf.implants[0]
+ self.assertNotEquals(id(newi), id(testi))
+ self.assertEquals(len(newf.implants), len(f.implants))
+
+ newpd = newf.projectedDrones[0]
+ self.assertNotEquals(id(newpd), id(testpd))
+ self.assertEquals(len(newf.projectedDrones), len(f.projectedDrones))
+
+ newpm = newf.projectedModules[0]
+ self.assertNotEquals(id(newpm), id(testpm))
+ self.assertEquals(len(newf.projectedModules), len(f.projectedModules))
+
+ newpf = newf.projectedFits[0]
+ self.assertEquals(id(newpf), id(testpf))
+ self.assertEquals(len(newf.projectedFits), len(f.projectedFits))
+
+ def test_repperSustainability(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Raven"))
+ m = Module(db.getItem("Small Shield Booster I"))
+ m.state = State.ACTIVE
+ f.modules.append(m)
+ f.calculateModifiedAttributes()
+ s = f.calculateSustainableTank()
+ self.assertEquals(s["armorRepair"], f.extraAttributes["armorRepair"])
+
+ def test_zeroSustainable(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Rifter"))
+ for i in count(1):
+ if i == 5: break
+ m = Module(db.getItem("Heavy Energy Neutralizer I"))
+ m.state = State.ACTIVE
+ f.modules.append(m)
+
+ m = Module(db.getItem("Small Shield Booster I"))
+ m.state = State.ACTIVE
+ f.modules.append(m)
+ f.calculateModifiedAttributes()
+ s = f.calculateSustainableTank()
+ self.assertEquals(s["armorRepair"], 0)
+
+ def test_sustainabilityConsistency(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Rifter"))
+ for i in count(1):
+ if i == 3: break
+ m = Module(db.getItem("Small Shield Booster I"))
+ m.state = State.ACTIVE
+ f.modules.append(m)
+
+ f.calculateModifiedAttributes()
+ s = f.sustainableTank
+ self.assertAlmostEquals(s["shieldRepair"], 3.8, 1)
+
+ def test_capCalcs(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Reaper"))
+ f.ship.itemModifiedAttributes["capacitorCapacity"] = 125.0
+ f.ship.itemModifiedAttributes["rechargeRate"] = 93250
+ m = Module(db.getItem("Small Shield Booster I"))
+ m.state = State.ACTIVE
+ f.modules.append(m)
+ self.assertAlmostEquals(f.capState, 14.0, 1)
+
+ def test_weaponDPS(self):
+ f = Fit()
+ m = Module(db.getItem("Heavy Modulated Energy Beam I"))
+ m.state = State.ACTIVE
+ m.charge = db.getItem("Multifrequency M")
+ f.modules.append(m)
+ expected = 0
+ for type in ("emDamage", "thermalDamage", "kineticDamage", "explosiveDamage"):
+ expected += m.getModifiedChargeAttr(type)
+
+ expected *= m.getModifiedItemAttr("damageMultiplier") / (m.getModifiedItemAttr("speed") / 1000.0)
+ self.assertAlmostEquals(f.weaponDPS, expected)
+
+ def test_weaponVolley(self):
+ f = Fit()
+ m = Module(db.getItem("Heavy Modulated Energy Beam I"))
+ m.state = State.ACTIVE
+ m.charge = db.getItem("Multifrequency M")
+ f.modules.append(m)
+ expected = 0
+ for type in ("emDamage", "thermalDamage", "kineticDamage", "explosiveDamage"):
+ expected += m.getModifiedChargeAttr(type)
+
+ expected *= m.getModifiedItemAttr("damageMultiplier")
+ self.assertAlmostEquals(f.weaponVolley, expected)
+
+ def test_droneDPS(self):
+ f = Fit()
+ d = Drone(db.getItem("Hammerhead II"))
+ d.active = True
+ d.amount = 3
+ d.amountActive = 3
+ f.drones.append(d)
+ expected = 0
+ for type in ("emDamage", "thermalDamage", "kineticDamage", "explosiveDamage"):
+ expected += d.getModifiedItemAttr(type)
+
+ expected *= d.getModifiedItemAttr("damageMultiplier") / (d.getModifiedItemAttr("speed") / 1000.0)
+ self.assertAlmostEquals(f.droneDPS, expected * 3)
+
+ def test_missileDroneDPS(self):
+ f = Fit()
+ d = Drone(db.getItem("Cyclops"))
+ d.active = True
+ d.amount = 2
+ d.amountActive = 2
+ f.drones.append(d)
+ expected = 0
+ for type in ("emDamage", "thermalDamage", "kineticDamage", "explosiveDamage"):
+ expected += d.getModifiedChargeAttr(type)
+
+ expected /= d.getModifiedItemAttr("missileLaunchDuration") / 1000.0
+ self.assertAlmostEquals(f.droneDPS, expected * 2)
+
+ def test_hardpointCount(self):
+ f = Fit()
+ f.modules.append(Module(db.getItem("Heavy Modulated Energy Beam I")))
+ f.modules.append(Module(db.getItem("Standard Missile Launcher I")))
+ f.modules.append(Module(db.getItem("Salvager I")))
+ self.assertEquals(f.getHardpointsUsed(Hardpoint.MISSILE), 1)
+ self.assertEquals(f.getHardpointsUsed(Hardpoint.TURRET), 1)
+
+ def test_fill(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Rifter"))
+ f.fill()
+ self.assertEquals(len(f.modules), 13)
+
+ def test_fillT3(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Tengu"))
+ f.modules.append(Module(db.getItem("Tengu Defensive - Adaptive Shielding")))
+ f.clear()
+ f.calculateModifiedAttributes()
+ f.fill()
+ self.assertEquals(len(f.modules), 10)
+
+ def test_fillTooMuchDummies(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Rifter"))
+ for _ in xrange(5):
+ f.modules.append(Module.buildEmpty(Slot.LOW))
+
+ f.fill()
+ self.assertEquals(len(f.modules), 13)
+
+ def test_fillOrdering(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Rifter"))
+ f.fill()
+ for i, mod in enumerate(f.modules):
+ self.assertEquals(i, mod.position)
+
+ def test_getSlotsUsed(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Rifter"))
+ f.modules.append(Module(db.getItem("Salvager I")))
+ f.fill()
+ self.assertEquals(f.getSlotsUsed(Slot.HIGH), 1)
+
+ def test_getCalibrationUsed(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Rifter"))
+ f.modules.append(Module(db.getItem("Large Trimark Armor Pump I")))
+ self.assertEquals(f.calibrationUsed, 50)
+
+ def test_pgUsed(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Rifter"))
+ f.modules.append(Module(db.getItem("Salvager I")))
+ self.assertEquals(f.pgUsed, 1)
+
+ def test_cpuUsed(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Rifter"))
+ f.modules.append(Module(db.getItem("Salvager I")))
+ self.assertEquals(f.cpuUsed, 20)
+
+ def test_droneBandwidthUsed(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Rifter"))
+ d = Drone(db.getItem("Hobgoblin I"))
+ d.amount = 1
+ d.amountActive = 1
+ f.drones.append(d)
+ self.assertEquals(f.droneBandwidthUsed, 5)
+
+ def test_droneBayUsed(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Rifter"))
+ f.drones.appendItem(db.getItem("Hobgoblin I"))
+ self.assertEquals(f.droneBayUsed, 5)
+
+ def test_addRemoveFit(self):
+ f = Fit()
+ rifter = db.getItem("Rifter")
+ f.ship = Ship(rifter)
+ f.fill()
+ db.saveddata_session.add(f)
+ db.saveddata_session.flush()
+ db.saveddata_session.delete(f)
+ db.saveddata_session.flush()
+
+ def test_removeDrone(self):
+ f = Fit()
+ gob = db.getItem("Hobgoblin I")
+ f.drones.appendItem(gob)
+ f.drones.removeItem(gob, 1)
+
+ def test_scanStr(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Rifter"))
+ self.assertEquals("Ladar", f.scanType)
diff --git a/eos/tests/saveddata/testFleet.py b/eos/tests/saveddata/testFleet.py
new file mode 100755
index 000000000..a961a9328
--- /dev/null
+++ b/eos/tests/saveddata/testFleet.py
@@ -0,0 +1,75 @@
+from eos.tests import TestBase
+from eos import db
+from eos.types import Fleet, Wing, Squad, Ship, Fit, Module, Character
+import copy
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ g = Fleet()
+ w = Wing()
+ s = Squad()
+ self.g = g
+ self.s = s
+ self.w = w
+ g.wings.append(w)
+ w.squads.append(s)
+ f = Fit()
+ self.s.members.append(f)
+ self.s.members.append(Fit())
+ self.s.leader = f
+ f.ship = Ship(db.getItem("Rifter"))
+ f.character = Character("testety")
+ f.character.getSkill("Leadership").level = 5
+
+ def test_copy(self):
+ c = copy.deepcopy(self.g)
+ self.assertNotEquals(id(c), id(self.g))
+ self.assertEquals(len(c.wings), 1)
+ wing = c.wings[0]
+ self.assertNotEquals(id(wing), id(self.w))
+ self.assertEquals(len(wing.squads), 1)
+ squad = wing.squads[0]
+ self.assertNotEquals(id(squad), id(self.s))
+ self.assertEquals(len(squad.members), 2)
+
+ def test_skillGang(self):
+ self.s.leader.character.getSkill("Leadership").level = 5
+ self.g.calculateModifiedAttributes()
+ new = self.s.leader.ship.getModifiedItemAttr("scanResolution")
+ expected = self.s.leader.ship.item.getAttribute("scanResolution") * 1.1
+ self.assertEquals(expected, new)
+
+ def test_gangModGang(self):
+ self.s.leader.modules.append(Module(db.getItem("Siege Warfare Link - Shield Harmonizing")))
+ self.g.calculateModifiedAttributes()
+ expected = self.s.leader.ship.item.getAttribute("shieldKineticDamageResonance") * 0.98
+ new = self.s.leader.ship.getModifiedItemAttr("shieldKineticDamageResonance")
+ self.assertEquals(expected, new)
+
+ def test_shipGang(self):
+ self.s.leader.character.getSkill("Gallente Titan").level = 1
+ self.s.leader.ship = Ship(db.getItem("Erebus"))
+ self.g.calculateModifiedAttributes()
+ new = self.s.leader.ship.getModifiedItemAttr("armorHP")
+ expected = self.s.leader.ship.item.getAttribute("armorHP") * 1.075
+ self.assertEquals(expected, new)
+
+ def test_onlyFC(self):
+ self.g.leader = Fit()
+ self.g.leader.ship = Ship(db.getItem("Rifter"))
+ self.g.leader.character = Character("tootoot")
+ self.g.leader.character.getSkill("Leadership").level = 5
+ self.g.calculateModifiedAttributes()
+ self.assertEquals(self.g.leader.ship.item.getAttribute("scanResolution"), self.g.leader.ship.getModifiedItemAttr("scanResolution"))
+ self.assertEquals(self.s.leader.ship.item.getAttribute("scanResolution") * 1.1, self.s.leader.ship.getModifiedItemAttr("scanResolution"))
+
+ def test_onlyWC(self):
+ self.w.leader = Fit()
+ self.w.leader.ship = Ship(db.getItem("Rifter"))
+ self.w.leader.character = Character("tootoot")
+ self.w.leader.character.getSkill("Leadership").level = 5
+ self.w.leader.character.getSkill("Wing Command").level = 5
+ self.g.calculateModifiedAttributes()
+ self.assertEquals(self.s.leader.ship.item.getAttribute("scanResolution") * 1.1, self.s.leader.ship.getModifiedItemAttr("scanResolution"))
+ self.assertEquals(self.w.leader.ship.item.getAttribute("scanResolution") * 1.1, self.w.leader.ship.getModifiedItemAttr("scanResolution"))
diff --git a/eos/tests/saveddata/testImplant.py b/eos/tests/saveddata/testImplant.py
new file mode 100755
index 000000000..d8c3db44d
--- /dev/null
+++ b/eos/tests/saveddata/testImplant.py
@@ -0,0 +1,91 @@
+from eos.tests import TestBase
+from eos.types import Implant, Fit, User, Ship
+from eos import db
+import eos.db.saveddata.queries
+import sqlalchemy.orm
+from copy import deepcopy
+
+class Test(TestBase):
+ def test_invalidImplant(self):
+ try:
+ Implant(db.getItem("Gamma L"))
+ except ValueError:
+ return
+ self.fail("Was expected a ValueError when setting Gamma L as implant, didn't get it")
+
+ def test_clear(self):
+ i = Implant(db.getItem("Halo Omega"))
+ orig = i.getModifiedItemAttr("memoryBonus")
+
+ i.itemModifiedAttributes["memoryBonus"] = 5
+ i.clear()
+ self.assertEquals(i.getModifiedItemAttr("memoryBonus"), orig)
+
+ def test_validImplant(self):
+ i = Implant(db.getItem("Halo Omega"))
+ self.assertEquals(i.slot, 6)
+
+ def test_databaseConsistency(self):
+ oldSession = db.saveddata_session
+ oldSession.commit()
+ try:
+ f = Fit()
+ f.owner = User("implanttest", "testy", False)
+ f.ship = Ship(db.getItem("Rifter"))
+ implant = Implant(db.getItem("Halo Omega"))
+ f.implants.append(implant)
+ implant.active = False
+ db.saveddata_session.add(f)
+ db.saveddata_session.add(implant)
+ db.saveddata_session.flush()
+
+ #Hack our way through changing the session temporarly
+ oldSession = eos.db.saveddata.queries.saveddata_session
+ eos.db.saveddata.queries.saveddata_session = sqlalchemy.orm.sessionmaker(bind=db.saveddata_engine)()
+
+ newfit = db.getFit(f.ID)
+ i = 0
+ for imp in newfit.implants:
+ newimplant = imp
+ i += 1
+
+ self.assertFalse(implant.active)
+ self.assertEquals(i, 1)
+ self.assertNotEquals(id(f), id(newfit))
+ self.assertNotEquals(id(implant), id(newimplant))
+ self.assertEquals(implant.item.ID, newimplant.item.ID)
+
+ except:
+ db.saveddata_session.rollback()
+ raise
+ finally:
+ #Undo our hack as to not fuck up anything
+ eos.db.saveddata.queries.saveddata_session = oldSession
+
+ def test_copy(self):
+ i = Implant(db.getItem("Halo Omega"))
+ i.active = False
+
+ c = deepcopy(i)
+ self.assertNotAlmostEqual(id(i), id(c))
+ self.assertEquals(i.item, c.item)
+ self.assertEquals(i.active, c.active)
+
+ def test_duplicateImplant(self):
+ f = Fit()
+
+ f.implants.append(Implant(db.getItem("Halo Omega")))
+ try:
+ f.implants.append(Implant(db.getItem("Halo Omega")))
+ except ValueError:
+ return
+
+ self.fail("Expected ValueError, didn't get it")
+
+ def test_freeSlot(self):
+ f = Fit()
+ i = Implant(db.getItem("Halo Omega"))
+ f.implants.append(i)
+ self.assertEquals(len(f.implants), 1)
+ f.implants.freeSlot(i)
+ self.assertEquals(len(f.implants), 0)
diff --git a/eos/tests/saveddata/testModule.py b/eos/tests/saveddata/testModule.py
new file mode 100755
index 000000000..da9e28f30
--- /dev/null
+++ b/eos/tests/saveddata/testModule.py
@@ -0,0 +1,246 @@
+from eos.tests import TestBase
+from eos.types import Module, Fit, User, State, Ship, Slot, Hardpoint
+from eos import db
+import eos.db.saveddata.queries
+import sqlalchemy.orm
+from copy import deepcopy
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.i = db.getItem("Heat Sink I")
+ self.m = Module(self.i)
+
+ def test_clear(self):
+ m = Module(db.getItem("125mm Gatling AutoCannon I"))
+ m.charge = db.getItem("Phased Plasma S")
+ orig = m.getModifiedItemAttr("trackingSpeed")
+ chargeOrig = m.getModifiedChargeAttr("explosiveDamage")
+ m.itemModifiedAttributes["trackingSpeed"] = 5
+ m.chargeModifiedAttributes["explosiveDamage"] = 10
+ m.clear()
+ self.assertEquals(m.getModifiedItemAttr("trackingSpeed"), orig)
+ self.assertEquals(m.getModifiedChargeAttr("explosiveDamage"), chargeOrig)
+
+ def test_setItem(self):
+ self.assertEquals(self.m.itemID, self.i.ID)
+
+ def test_setPassiveActive(self):
+ self.assertFalse(self.m.isValidState(State.ACTIVE))
+
+ def test_setPassiveOverload(self):
+ self.assertFalse(self.m.isValidState(State.OVERHEATED))
+
+ def test_setActiveOverloadWhenGood(self):
+ m = Module(db.getItem("Heavy Modulated Energy Beam I"))
+ m.state = State.ACTIVE
+ m.state = State.OVERHEATED
+
+ def test_setWrongAmmoType(self):
+ m = Module(db.getItem("125mm Gatling AutoCannon I"))
+ self.assertFalse(m.isValidCharge(db.getItem("Gamma L")))
+
+ def test_setWrongAmmoSize(self):
+ m = Module(db.getItem("Dual Light Pulse Laser I"))
+ self.assertFalse(m.isValidCharge(db.getItem("Gamma M")))
+
+ def test_setWrongAmmoSubGroup(self):
+ m = Module(db.getItem("Dual Light Pulse Laser I"))
+ self.assertFalse(m.isValidCharge(db.getItem("Scorch S")))
+
+ def test_setCorrectAmmo(self):
+ i = db.getItem("Dual Light Pulse Laser I")
+ m = Module(i)
+ a = db.getItem("Gamma S")
+ self.assertTrue(m.isValidCharge(a))
+ m.charge = a
+ self.assertEquals(m.numCharges, 1)
+ self.assertEquals(m.itemID, i.ID)
+ self.assertEquals(m.chargeID, a.ID)
+
+ def test_slotRig(self):
+ m = Module(db.getItem("Large Capacitor Control Circuit I"))
+ self.assertEquals(Slot.RIG, m.slot)
+
+ def test_slotSubsystem(self):
+ m = Module(db.getItem("Tengu Offensive - Magnetic Infusion Basin"))
+ self.assertEquals(Slot.SUBSYSTEM, m.slot)
+
+ def test_slotHigh(self):
+ m = Module(db.getItem("Salvager I"))
+ self.assertEquals(Slot.HIGH, m.slot)
+
+ def test_slotMed(self):
+ m = Module(db.getItem("Cap Recharger I"))
+ self.assertEquals(Slot.MED, m.slot)
+
+ def test_slotLow(self):
+ m = Module(db.getItem("Heat Sink I"))
+ self.assertEquals(Slot.LOW, m.slot)
+
+ def test_hardpointTurret(self):
+ m = Module(db.getItem("Dual Light Pulse Laser I"))
+ self.assertEquals(m.hardpoint, Hardpoint.TURRET)
+
+ def test_hardpointMissile(self):
+ m = Module(db.getItem("Standard Missile Launcher I"))
+ self.assertEquals(m.hardpoint, Hardpoint.MISSILE)
+
+ def test_hardpointNone(self):
+ m = Module(db.getItem("Salvager I"))
+ self.assertEquals(m.hardpoint, Hardpoint.NONE)
+
+ def test_databaseConsistency(self):
+ oldSession = db.saveddata_session
+ oldSession.commit()
+ try:
+ f = Fit()
+ f.ship = Ship(db.getItem("Rifter"))
+ f.owner = User("moduletest", "testy", False)
+
+ item = db.getItem("Dual Light Pulse Laser I")
+ item2 = db.getItem("Stasis Webifier I")
+ projMod = Module(item2)
+ charge = db.getItem("Gamma S")
+ mod = Module(item)
+ emptyDummy = Module.buildEmpty(Slot.LOW)
+ f.modules.append(emptyDummy)
+ posMod1 = Module(item)
+ posMod2 = Module(item)
+ posMod3 = Module(item)
+ posMods = [posMod1, posMod2, posMod3]
+ for m in posMods:
+ f.modules.append(m)
+
+ mod.charge = charge
+ f.modules.append(mod)
+ f.projectedModules.append(projMod)
+ db.saveddata_session.add(f)
+ db.saveddata_session.flush()
+
+ for m in posMods:
+ f.modules.remove(m)
+
+ posMods.reverse()
+ for m in posMods:
+ f.modules.append(m)
+
+ db.saveddata_session.flush()
+
+ #Hack our way through changing the session temporarly
+ oldSession = eos.db.saveddata.queries.saveddata_session
+ eos.db.saveddata.queries.saveddata_session = sqlalchemy.orm.sessionmaker(bind=db.saveddata_engine)()
+
+ newf = db.getFit(f.ID)
+ self.assertNotEquals(id(newf), id(f))
+
+ newmod = newf.modules[1]
+ newprojMod = newf.projectedModules[0]
+ newdummy = newf.modules[0]
+
+ i = 0
+ while i < len(newf.modules):
+ if i <= 1:
+ i += 1
+ continue
+ else:
+ self.assertEquals(newf.modules[i].ID, posMods[i-2].ID)
+ i += 1
+
+ self.assertEquals(newprojMod.item.name, "Stasis Webifier I")
+ self.assertNotEquals(id(newprojMod), id(projMod))
+ self.assertNotEquals(id(newmod), id(mod))
+ self.assertEquals(mod.state, newmod.state)
+ self.assertEquals(mod.charge.ID, newmod.charge.ID)
+ self.assertEquals(mod.item.ID, newmod.item.ID)
+
+ self.assertEquals(newdummy.slot, emptyDummy.slot)
+ except:
+ db.saveddata_session.rollback()
+ raise
+ finally:
+ #Undo our hack as to not fuck up anything
+ eos.db.saveddata.queries.saveddata_session = oldSession
+
+ def test_copy(self):
+ m = Module(db.getItem("Dual Light Pulse Laser I"))
+ m.charge = db.getItem("Gamma S")
+ m.state = State.OFFLINE
+
+ c = deepcopy(m)
+
+ self.assertNotEquals(id(m), id(c))
+ self.assertEquals(m.item, c.item)
+ self.assertEquals(m.charge, c.charge)
+ self.assertEquals(m.state, c.state)
+
+ def test_maxRange(self):
+ m = Module(db.getItem("Remote ECM Burst I"))
+ self.assertEquals(m.maxRange, m.getModifiedItemAttr("maxRange"))
+
+ m2 = Module(db.getItem("ECM Burst I"))
+ self.assertEquals(m2.maxRange, m2.getModifiedItemAttr("ecmBurstRange"))
+
+ m3 = Module(db.getItem("Standard Missile Launcher I"))
+ m3.charge = db.getItem("Bloodclaw Light Missile")
+ self.assertEquals(m3.maxRange, 17437.5)
+
+ def test_buildDummy(self):
+ m = Module.buildEmpty(Slot.LOW)
+ self.assertEquals(m.slot, Slot.LOW)
+ self.assertEqual(m.hardpoint, Hardpoint.NONE)
+
+ def test_fitsShipRestriction(self):
+ f = Fit()
+ m = Module(db.getItem("Judgement"))
+ f.ship = Ship(db.getItem("Rifter"))
+ self.assertFalse(m.fits(f))
+
+ def test_fitsSlotsFull(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Rifter"))
+ for _ in xrange(8):
+ f.modules.append(Module(db.getItem("Salvager I")))
+
+ self.assertFalse(Module(db.getItem("Salvager I")).fits(f))
+
+ def test_fits(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Rifter"))
+ self.assertTrue(Module(db.getItem("Salvager I")).fits(f))
+
+ def test_dummyCalc(self):
+ m = Module.buildEmpty(Slot.LOW)
+ m.calculateModifiedAttributes(Fit(), "normal")
+
+ def test_fits_maxGroupFitted(self):
+ f = Fit()
+ f.modules.append(Module(db.getItem("Salvager I")))
+ m = Module(db.getItem("Damage Control II"))
+ f.ship = Ship(db.getItem("Rifter"))
+ f.fill()
+ self.assertTrue(m.fits(f))
+
+ def test_canHaveState(self):
+ f = Fit()
+ ab = Module(db.getItem("1MN Afterburner II"))
+ ab.state = State.ACTIVE
+ mwd = Module(db.getItem("1MN MicroWarpdrive II"))
+ mwd.state = State.ACTIVE
+ salv = Module(db.getItem("Salvager I"))
+ salv.state = State.ACTIVE
+ f.modules.append(salv)
+ f.modules.append(ab)
+ f.modules.append(mwd)
+ self.assertFalse(ab.canHaveState(State.ACTIVE))
+ self.assertFalse(mwd.canHaveState(State.ACTIVE))
+ self.assertTrue(salv.canHaveState(State.ACTIVE))
+
+ def test_numShots(self):
+ laser = Module(db.getItem("Dual Giga Pulse Laser I"))
+ laser.charge = db.getItem("Multifrequency XL")
+ arty = Module(db.getItem("1200mm Artillery Cannon I"))
+ arty.charge = db.getItem("Phased Plasma L")
+ self.assertEquals(laser.numShots, 0)
+ self.assertGreater(arty.numShots, 0)
+
diff --git a/eos/tests/saveddata/testPrice.py b/eos/tests/saveddata/testPrice.py
new file mode 100755
index 000000000..cff0ebe97
--- /dev/null
+++ b/eos/tests/saveddata/testPrice.py
@@ -0,0 +1,18 @@
+from eos.tests import TestBase
+from eos.types import Price
+import time
+
+class Test(TestBase):
+ def test_valid(self):
+ p = Price(1)
+ p.time = time.time() - Price.VALIDITY + 1000
+ self.assertTrue(p.isValid)
+
+ def test_invalid(self):
+ p = Price(1)
+ p.time = time.time() - Price.VALIDITY - 1000
+ self.assertFalse(p.isValid)
+
+ def test_newObjectInvalid(self):
+ p = Price(1)
+ self.assertFalse(p.isValid)
diff --git a/eos/tests/saveddata/testSavedDataQueries.py b/eos/tests/saveddata/testSavedDataQueries.py
new file mode 100755
index 000000000..b9b869b38
--- /dev/null
+++ b/eos/tests/saveddata/testSavedDataQueries.py
@@ -0,0 +1,59 @@
+from eos.tests import TestBase
+from eos.types import Fit, Character, User, Ship
+from eos import db
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ #Add some test data
+ u = User("test", "testy", False)
+ c = Character("TESTY")
+ c.owner = u
+ db.saveddata_session.add(u)
+ db.saveddata_session.add(c)
+ db.saveddata_session.commit()
+ db.saveddata_session.flush()
+
+ def test_1getCharacter(self):
+ c = db.getCharacter("TESTY")
+ self.assertEquals(c.name, "TESTY")
+ self.assertEquals(c.owner.username, "test")
+
+ def test_2getUser(self):
+ u = db.getUser("test")
+ self.assertEquals(u.username, "test")
+ self.assertEqual(len(u.characters), 1)
+
+ def test_3addCharacter(self):
+ u = db.getUser("test")
+ cc = Character("Testo")
+ cc.owner = u
+ for char in u.characters:
+ if char == cc: return
+
+ self.fail("Didn't find the character we just made")
+
+ def test_4addFit(self):
+ u = db.getUser("test")
+ f = Fit()
+ f.owner = u
+ f.shipID = 1 #Set a crap ID so the tests don't fail due to flushing not working due to the not null restriction
+ for fit in u.fits:
+ if fit == f:
+ return
+
+ self.fail("Didn't find the fit we just made")
+
+ def test_5getFitByShipID(self):
+ db.saveddata_session.flush()
+ l = db.getFitsWithShip(1)
+ self.assertEquals(len(l), 1)
+
+ def test_5searchFits(self):
+ f = Fit()
+ f.ship = Ship(db.getItem("Rifter"))
+ f.owner = db.getUser("test")
+ f.name = "testety5"
+ db.saveddata_session.add(f)
+ db.saveddata_session.flush()
+ self.assertEquals(len(db.searchFits("testety5")), 1)
diff --git a/eos/tests/saveddata/testShip.py b/eos/tests/saveddata/testShip.py
new file mode 100755
index 000000000..4e74cbe32
--- /dev/null
+++ b/eos/tests/saveddata/testShip.py
@@ -0,0 +1,19 @@
+from eos.tests import TestBase
+from eos.types import Ship
+from eos import db
+from copy import deepcopy
+
+class Test(TestBase):
+ def test_clear(self):
+ s = Ship(db.getItem("Rifter"))
+ orig = s.getModifiedItemAttr("hp")
+ s.itemModifiedAttributes["hp"] = 5
+ s.clear()
+ self.assertEqual(s.getModifiedItemAttr("hp"), orig)
+
+ def test_copy(self):
+ s = Ship(db.getItem("Rifter"))
+ c = deepcopy(s)
+
+ self.assertNotEquals(id(s), id(c))
+ self.assertEquals(s.item, c.item)
diff --git a/eos/tests/saveddata/testUser.py b/eos/tests/saveddata/testUser.py
new file mode 100755
index 000000000..6ef784b65
--- /dev/null
+++ b/eos/tests/saveddata/testUser.py
@@ -0,0 +1,9 @@
+from eos.tests import TestBase
+from eos.types import User
+
+class Test(TestBase):
+ def testPasswordEncryption(self):
+ u = User("MOOBAR")
+ u.encodeAndSetPassword("FOOBAR")
+ self.assertTrue(u.isPasswordValid("FOOBAR"))
+ self.assertFalse(u.isPasswordValid("FOOBUR"))
diff --git a/eos/tests/typeTests/__init__.py b/eos/tests/typeTests/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/boosters/__init__.py b/eos/tests/typeTests/boosters/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/boosters/drop.py b/eos/tests/typeTests/boosters/drop.py
new file mode 100755
index 000000000..3c3c2fd31
--- /dev/null
+++ b/eos/tests/typeTests/boosters/drop.py
@@ -0,0 +1,49 @@
+from eos.tests import TestBase
+from eos import db
+from eos.types import Fit, Booster, Character, Ship, Module
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.f = Fit()
+ self.c = Character("testDrop")
+ self.f.character = self.c
+ self.f.ship = Ship(db.getItem("Rifter"))
+ self.i = db.getItem("Strong Drop Booster")
+ self.i2 = db.getItem("Heavy Modulated Energy Beam I")
+ self.i3 = db.getItem("Large Armor Repairer I")
+ self.turret = Module(self.i2)
+ self.repper = Module(self.i3)
+ self.booster = Booster(self.i)
+ self.f.boosters.append(self.booster)
+ self.f.modules.append(self.turret)
+ self.f.modules.append(self.repper)
+
+ def test_trackingSpeed(self):
+ self.f.calculateModifiedAttributes()
+ original = self.i2.getAttribute("trackingSpeed")
+ self.assertAlmostEquals(original * 1.375, self.turret.getModifiedItemAttr("trackingSpeed"))
+
+ def test_falloffPenalty(self):
+ self.booster.getSideEffect("boosterTurretFalloffPenalty").active = True
+ self.f.calculateModifiedAttributes()
+ original = self.i2.getAttribute("falloff")
+ self.assertAlmostEquals(original * 0.7, self.turret.getModifiedItemAttr("falloff"))
+
+ def test_armorRepairPenalty(self):
+ self.booster.getSideEffect("boosterArmorRepairAmountPenalty").active = True
+ self.f.calculateModifiedAttributes()
+ original = self.i3.getAttribute("armorDamageAmount")
+ self.assertAlmostEquals(original * 0.7, self.repper.getModifiedItemAttr("armorDamageAmount"))
+
+ def test_maxVelocityPenalty(self):
+ self.booster.getSideEffect("boosterMaxVelocityPenalty").active = True
+ self.f.calculateModifiedAttributes()
+ original = self.f.ship.item.getAttribute("maxVelocity")
+ self.assertAlmostEquals(original * 0.7, self.f.ship.getModifiedItemAttr("maxVelocity"))
+
+ def test_shieldCapacity(self):
+ self.booster.getSideEffect("boosterShieldCapacityPenalty").active = True
+ self.f.calculateModifiedAttributes()
+ original = self.f.ship.item.getAttribute("shieldCapacity")
+ self.assertAlmostEquals(original * 0.7, self.f.ship.getModifiedItemAttr("shieldCapacity"))
diff --git a/eos/tests/typeTests/drones/__init__.py b/eos/tests/typeTests/drones/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/implants/CR8.py b/eos/tests/typeTests/implants/CR8.py
new file mode 100755
index 000000000..d23ba7b99
--- /dev/null
+++ b/eos/tests/typeTests/implants/CR8.py
@@ -0,0 +1,19 @@
+from eos.tests import TestBase
+from eos import db
+from eos.types import Fit, Implant, Character, Ship
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.f = Fit()
+ self.c = Character("testCR8")
+ self.f.character = self.c
+ self.f.ship = Ship(db.getItem("Rifter"))
+ self.i = db.getItem("Hardwiring - Inherent Implants 'Squire' CR8")
+ self.implant = Implant(self.i)
+ self.f.implants.append(self.implant)
+ self.f.calculateModifiedAttributes()
+
+ def test_rechargeTimeBonus(self):
+ original = self.f.ship.item.getAttribute("rechargeRate")
+ self.assertAlmostEquals(original * 0.95, self.f.ship.getModifiedItemAttr("rechargeRate"))
diff --git a/eos/tests/typeTests/implants/__init__.py b/eos/tests/typeTests/implants/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/interactions/__init__.py b/eos/tests/typeTests/interactions/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/interactions/charge_ship.py b/eos/tests/typeTests/interactions/charge_ship.py
new file mode 100755
index 000000000..b5a46032a
--- /dev/null
+++ b/eos/tests/typeTests/interactions/charge_ship.py
@@ -0,0 +1,42 @@
+from eos import db
+from eos.tests import TestBase
+from eos.types import Fit, Character, Ship, Module, State
+
+class Test(TestBase):
+ def test_scanResolution_ship(self):
+ iIngame = 1.0
+ fIngame = 1.6
+ fit = Fit()
+ char = Character("test")
+ fit.character = char
+ fit.ship = Ship(db.getItem("Rifter"))
+ iEos = fit.ship.getModifiedItemAttr("scanResolution")
+ mod = Module(db.getItem("Sensor Booster II"))
+ mod.charge = db.getItem("Scan Resolution")
+ mod.state = State.ACTIVE
+ fit.modules.append(mod)
+ fit.calculateModifiedAttributes()
+ fEos = fit.ship.getModifiedItemAttr("scanResolution")
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_scanResolution_ship_2(self):
+ iIngame = 1.0
+ fIngame = 1.6
+ fit = Fit()
+ char = Character("test")
+ fit.character = char
+ fit.ship = Ship(db.getItem("Rifter"))
+ fit.calculateModifiedAttributes()
+ iEos = fit.ship.getModifiedItemAttr("scanResolution")
+ mod = Module(db.getItem("Sensor Booster II"))
+ mod.charge = db.getItem("Scan Resolution")
+ mod.state = State.ACTIVE
+ fit.modules.append(mod)
+ fit.clear()
+ fit.calculateModifiedAttributes()
+ fEos = fit.ship.getModifiedItemAttr("scanResolution")
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/interactions/sensorBooster_signalAmplifier.py b/eos/tests/typeTests/interactions/sensorBooster_signalAmplifier.py
new file mode 100755
index 000000000..89476fb3d
--- /dev/null
+++ b/eos/tests/typeTests/interactions/sensorBooster_signalAmplifier.py
@@ -0,0 +1,46 @@
+from eos.tests import TestBase
+from eos import db
+from eos.types import Fit, Ship, Module, State
+from eos.modifiedAttributeDict import ModifiedAttributeDict
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.fit = Fit()
+ self.fit.ship = Ship(db.getItem("Rifter"))
+ self.testItem1 = db.getItem("Sensor Booster II")
+ self.testItem2 = db.getItem("Signal Amplifier II")
+ self.testMod1 = Module(self.testItem1)
+ self.testMod2 = Module(self.testItem2)
+ self.testMod1.state = State.ACTIVE
+ self.fit.modules.append(self.testMod1)
+ self.fit.modules.append(self.testMod2)
+ self.fit.calculateModifiedAttributes()
+
+ def test_scanResolution(self):
+ self.buildTested = 171215
+ bonusAttrName = "scanResolutionBonus"
+ targetAttrName = "scanResolution"
+ penalize = True
+ mod1Bonus = self.testItem1.getAttribute(bonusAttrName)
+ mod2Bonus = self.testItem2.getAttribute(bonusAttrName)
+ expected = ModifiedAttributeDict()
+ expected.original = self.fit.ship.item.attributes
+ expected.boost(targetAttrName, mod1Bonus, stackingPenalties = penalize)
+ expected.boost(targetAttrName, mod2Bonus, stackingPenalties = penalize)
+ actual = self.fit.ship.getModifiedItemAttr(targetAttrName)
+ self.assertAlmostEquals(expected[targetAttrName], actual)
+
+ def test_maxTargetRange(self):
+ self.buildTested = 174282
+ bonusAttrName = "maxTargetRangeBonus"
+ targetAttrName = "maxTargetRange"
+ penalize = True
+ mod1Bonus = self.testItem1.getAttribute(bonusAttrName)
+ mod2Bonus = self.testItem2.getAttribute(bonusAttrName)
+ expected = ModifiedAttributeDict()
+ expected.original = self.fit.ship.item.attributes
+ expected.boost(targetAttrName, mod1Bonus, stackingPenalties = penalize)
+ expected.boost(targetAttrName, mod2Bonus, stackingPenalties = penalize)
+ actual = self.fit.ship.getModifiedItemAttr(targetAttrName)
+ self.assertAlmostEquals(expected[targetAttrName], actual)
diff --git a/eos/tests/typeTests/interactions/sensorBooster_targetingSystemSubcontroller.py b/eos/tests/typeTests/interactions/sensorBooster_targetingSystemSubcontroller.py
new file mode 100755
index 000000000..cd0e98833
--- /dev/null
+++ b/eos/tests/typeTests/interactions/sensorBooster_targetingSystemSubcontroller.py
@@ -0,0 +1,49 @@
+from eos.tests import TestBase
+from eos import db
+from eos.types import Fit, Ship, Module, State
+from eos.modifiedAttributeDict import ModifiedAttributeDict
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.fit = Fit()
+ self.fit.ship = Ship(db.getItem("Rifter"))
+ self.sensBoostItem = db.getItem("Sensor Booster II")
+ self.t1RigItem = db.getItem("Small Targeting System Subcontroller I")
+ self.t2RigItem = db.getItem("Small Targeting System Subcontroller II")
+ self.sensBoostMod = Module(self.sensBoostItem)
+ self.t1RigMod = Module(self.t1RigItem)
+ self.t2RigMod = Module(self.t2RigItem)
+ self.sensBoostMod.state = State.ACTIVE
+
+ def test_scanResolutionT1(self):
+ self.buildTested = 171215
+ self.fit.modules.append(self.sensBoostMod)
+ self.fit.modules.append(self.t1RigMod)
+ self.fit.calculateModifiedAttributes()
+ targetAttrName = "scanResolution"
+ penalize = False
+ sensBoostBoost = self.sensBoostItem.getAttribute("scanResolutionBonus")
+ t1RigMultiplier = self.t1RigItem.getAttribute("scanResolutionMultiplier")
+ expected = ModifiedAttributeDict()
+ expected.original = self.fit.ship.item.attributes
+ expected.boost(targetAttrName, sensBoostBoost, stackingPenalties = penalize)
+ expected.multiply(targetAttrName, t1RigMultiplier, stackingPenalties = penalize)
+ actual = self.fit.ship.getModifiedItemAttr(targetAttrName)
+ self.assertAlmostEquals(expected[targetAttrName], actual)
+
+ def test_scanResolutionT2(self):
+ self.buildTested = 171215
+ self.fit.modules.append(self.sensBoostMod)
+ self.fit.modules.append(self.t2RigMod)
+ self.fit.calculateModifiedAttributes()
+ targetAttrName = "scanResolution"
+ penalize = False
+ sensBoostBoost = self.sensBoostItem.getAttribute("scanResolutionBonus")
+ t2RigMultiplier = self.t2RigItem.getAttribute("scanResolutionMultiplier")
+ expected = ModifiedAttributeDict()
+ expected.original = self.fit.ship.item.attributes
+ expected.boost(targetAttrName, sensBoostBoost, stackingPenalties = penalize)
+ expected.multiply(targetAttrName, t2RigMultiplier, stackingPenalties = penalize)
+ actual = self.fit.ship.getModifiedItemAttr(targetAttrName)
+ self.assertAlmostEquals(expected[targetAttrName], actual)
diff --git a/eos/tests/typeTests/interactions/signalAmplifier_targetingSystemSubcontroller.py b/eos/tests/typeTests/interactions/signalAmplifier_targetingSystemSubcontroller.py
new file mode 100755
index 000000000..0f39b1f14
--- /dev/null
+++ b/eos/tests/typeTests/interactions/signalAmplifier_targetingSystemSubcontroller.py
@@ -0,0 +1,48 @@
+from eos.tests import TestBase
+from eos import db
+from eos.types import Fit, Ship, Module
+from eos.modifiedAttributeDict import ModifiedAttributeDict
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.fit = Fit()
+ self.fit.ship = Ship(db.getItem("Rifter"))
+ self.sigAmpItem = db.getItem("Signal Amplifier II")
+ self.t1RigItem = db.getItem("Small Targeting System Subcontroller I")
+ self.t2RigItem = db.getItem("Small Targeting System Subcontroller II")
+ self.sigAmpMod = Module(self.sigAmpItem)
+ self.t1RigMod = Module(self.t1RigItem)
+ self.t2RigMod = Module(self.t2RigItem)
+
+ def test_scanResolutionT1(self):
+ self.buildTested = 171215
+ self.fit.modules.append(self.sigAmpMod)
+ self.fit.modules.append(self.t1RigMod)
+ self.fit.calculateModifiedAttributes()
+ targetAttrName = "scanResolution"
+ penalize = False
+ sigAmpBoost = self.sigAmpItem.getAttribute("scanResolutionBonus")
+ t1RigMultiplier = self.t1RigItem.getAttribute("scanResolutionMultiplier")
+ expected = ModifiedAttributeDict()
+ expected.original = self.fit.ship.item.attributes
+ expected.boost(targetAttrName, sigAmpBoost, stackingPenalties = penalize)
+ expected.multiply(targetAttrName, t1RigMultiplier, stackingPenalties = penalize)
+ actual = self.fit.ship.getModifiedItemAttr(targetAttrName)
+ self.assertAlmostEquals(expected[targetAttrName], actual)
+
+ def test_scanResolutionT2(self):
+ self.buildTested = 171215
+ self.fit.modules.append(self.sigAmpMod)
+ self.fit.modules.append(self.t2RigMod)
+ self.fit.calculateModifiedAttributes()
+ targetAttrName = "scanResolution"
+ penalize = False
+ sigAmpBoost = self.sigAmpItem.getAttribute("scanResolutionBonus")
+ t2RigMultiplier = self.t2RigItem.getAttribute("scanResolutionMultiplier")
+ expected = ModifiedAttributeDict()
+ expected.original = self.fit.ship.item.attributes
+ expected.boost(targetAttrName, sigAmpBoost, stackingPenalties = penalize)
+ expected.multiply(targetAttrName, t2RigMultiplier, stackingPenalties = penalize)
+ actual = self.fit.ship.getModifiedItemAttr(targetAttrName)
+ self.assertAlmostEquals(expected[targetAttrName], actual)
diff --git a/eos/tests/typeTests/modules/__init__.py b/eos/tests/typeTests/modules/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/modules/afterburner.py b/eos/tests/typeTests/modules/afterburner.py
new file mode 100755
index 000000000..7ec13a54f
--- /dev/null
+++ b/eos/tests/typeTests/modules/afterburner.py
@@ -0,0 +1,28 @@
+from eos.tests import TestBase
+from eos import db
+from eos.types import Module, Fit, Ship, State
+from eos.modifiedAttributeDict import ModifiedAttributeDict
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.fit = Fit()
+ self.rifter = db.getItem("Rifter")
+ self.fit.ship = Ship(self.rifter)
+ self.afterburner = Module(db.getItem("1MN Afterburner II"))
+ self.afterburner.state = State.ACTIVE
+ self.fit.modules.append(self.afterburner)
+ self.fit.calculateModifiedAttributes()
+
+ def test_mass(self):
+ expected = ModifiedAttributeDict()
+ expected.original = self.fit.ship.itemModifiedAttributes.original
+ expected.increase("mass", self.afterburner.getModifiedItemAttr("massAddition"))
+ self.assertEquals(expected["mass"], self.fit.ship.getModifiedItemAttr("mass"))
+
+ def test_speedboost(self):
+ expected = ModifiedAttributeDict()
+ expected.original = self.fit.ship.itemModifiedAttributes.original
+ maxVelBoost = self.afterburner.getModifiedItemAttr("speedFactor") * self.afterburner.getModifiedItemAttr("speedBoostFactor") / self.fit.ship.getModifiedItemAttr("mass")
+ expected.boost("maxVelocity", maxVelBoost)
+ self.assertEquals(expected["maxVelocity"], self.fit.ship.getModifiedItemAttr("maxVelocity"))
diff --git a/eos/tests/typeTests/modules/armorHardener.py b/eos/tests/typeTests/modules/armorHardener.py
new file mode 100755
index 000000000..5fadc1e38
--- /dev/null
+++ b/eos/tests/typeTests/modules/armorHardener.py
@@ -0,0 +1,21 @@
+from eos.tests import TestBase
+from eos import db
+from eos.types import Module, Fit, Ship, State
+from eos.modifiedAttributeDict import ModifiedAttributeDict
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.fit = Fit()
+ self.rifter = db.getItem("Rifter")
+ self.fit.ship = Ship(self.rifter)
+ self.hardener = Module(db.getItem("Armor EM Hardener II"))
+ self.hardener.state = State.ACTIVE
+ self.fit.modules.append(self.hardener)
+ self.fit.calculateModifiedAttributes()
+
+ def test_hardening(self):
+ expected = ModifiedAttributeDict()
+ expected.original = self.rifter.attributes
+ expected.boost("armorEmDamageResonance", self.hardener.getModifiedItemAttr("emDamageResistanceBonus"))
+ self.assertEquals(expected["armorEmDamageResonance"], self.fit.ship.getModifiedItemAttr("armorEmDamageResonance"))
diff --git a/eos/tests/typeTests/modules/capPowerRelay.py b/eos/tests/typeTests/modules/capPowerRelay.py
new file mode 100755
index 000000000..bebedd247
--- /dev/null
+++ b/eos/tests/typeTests/modules/capPowerRelay.py
@@ -0,0 +1,17 @@
+from eos.tests import TestBase
+from eos import db
+from eos.types import Module, Fit, Ship
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.fit = Fit()
+ self.rifter = db.getItem("Rifter")
+ self.fit.ship = Ship(self.rifter)
+ self.relay = Module(db.getItem("Capacitor Power Relay I"))
+ self.fit.modules.append(self.relay)
+ self.fit.calculateModifiedAttributes()
+
+ def test_CalcCrash(self):
+ # Note, no calculation checking, just testing for a crash here.
+ pass
diff --git a/eos/tests/typeTests/modules/engineeringSubsystem.py b/eos/tests/typeTests/modules/engineeringSubsystem.py
new file mode 100755
index 000000000..22de032cf
--- /dev/null
+++ b/eos/tests/typeTests/modules/engineeringSubsystem.py
@@ -0,0 +1,16 @@
+from eos.tests import TestBase
+from eos import db
+from eos.types import Module, Fit, Ship
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.fit = Fit()
+ self.tengu = db.getItem("Tengu")
+ self.fit.ship = Ship(self.tengu)
+ self.sub = Module(db.getItem("Tengu Engineering - Augmented Capacitor Reservoir"))
+ self.fit.modules.append(self.sub)
+ self.fit.calculateModifiedAttributes()
+
+ def test_hardening(self):
+ self.assertGreater(self.fit.ship.getModifiedItemAttr("powerOutput"), 0)
diff --git a/eos/tests/typeTests/modules/heatSink.py b/eos/tests/typeTests/modules/heatSink.py
new file mode 100755
index 000000000..ab21cbf27
--- /dev/null
+++ b/eos/tests/typeTests/modules/heatSink.py
@@ -0,0 +1,32 @@
+from eos.tests import TestBase
+from eos import db
+from eos.types import Module, Fit
+from eos.modifiedAttributeDict import ModifiedAttributeDict
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.fit = Fit()
+ self.hsi = db.getItem("Heat Sink II")
+ self.eti = db.getItem("Heavy Modulated Energy Beam I")
+ self.hsm1 = Module(self.hsi)
+ self.hsm2 = Module(self.hsi)
+ self.etm = Module(self.eti)
+ self.fit.modules.append(self.hsm1)
+ self.fit.modules.append(self.hsm2)
+ self.fit.modules.append(self.etm)
+ self.fit.calculateModifiedAttributes()
+
+ def test_damageMultiplier(self):
+ expected = ModifiedAttributeDict()
+ expected.original = self.etm.item.attributes
+ expected.multiply("damageMultiplier", self.hsi.getAttribute("damageMultiplier"), stackingPenalties = True)
+ expected.multiply("damageMultiplier", self.hsi.getAttribute("damageMultiplier"), stackingPenalties = True)
+ self.assertAlmostEquals(expected["damageMultiplier"], self.etm.getModifiedItemAttr("damageMultiplier"))
+
+ def test_speed(self):
+ expected = ModifiedAttributeDict()
+ expected.original = self.etm.item.attributes
+ expected.multiply("speed", self.hsi.getAttribute("speedMultiplier"), stackingPenalties = True)
+ expected.multiply("speed", self.hsi.getAttribute("speedMultiplier"), stackingPenalties = True)
+ self.assertAlmostEquals(expected["speed"], self.etm.getModifiedItemAttr("speed"))
diff --git a/eos/tests/typeTests/modules/microwarpdrive.py b/eos/tests/typeTests/modules/microwarpdrive.py
new file mode 100755
index 000000000..869bf9750
--- /dev/null
+++ b/eos/tests/typeTests/modules/microwarpdrive.py
@@ -0,0 +1,34 @@
+from eos.tests import TestBase
+from eos import db
+from eos.types import Module, Fit, Ship, State
+from eos.modifiedAttributeDict import ModifiedAttributeDict
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.fit = Fit()
+ self.rifter = db.getItem("Rifter")
+ self.fit.ship = Ship(self.rifter)
+ self.mwd = Module(db.getItem("1MN MicroWarpdrive II"))
+ self.mwd.state = State.ACTIVE
+ self.fit.modules.append(self.mwd)
+ self.fit.calculateModifiedAttributes()
+
+ def test_mass(self):
+ expected = ModifiedAttributeDict()
+ expected.original = self.fit.ship.itemModifiedAttributes.original
+ expected.increase("mass", self.mwd.getModifiedItemAttr("massAddition"))
+ self.assertEquals(expected["mass"], self.fit.ship.getModifiedItemAttr("mass"))
+
+ def test_speedboost(self):
+ expected = ModifiedAttributeDict()
+ expected.original = self.fit.ship.itemModifiedAttributes.original
+ maxVelBoost = self.mwd.getModifiedItemAttr("speedFactor") * self.mwd.getModifiedItemAttr("speedBoostFactor") / self.fit.ship.getModifiedItemAttr("mass")
+ expected.boost("maxVelocity", maxVelBoost)
+ self.assertEquals(expected["maxVelocity"], self.fit.ship.getModifiedItemAttr("maxVelocity"))
+
+ def test_signature(self):
+ expected = ModifiedAttributeDict()
+ expected.original = self.fit.ship.itemModifiedAttributes.original
+ expected.boost("signatureRadius", self.mwd.getModifiedItemAttr("signatureRadiusBonus"))
+ self.assertEquals(expected["signatureRadius"], self.fit.ship.getModifiedItemAttr("signatureRadius"))
diff --git a/eos/tests/typeTests/modules/probeLauncherHardpoint.py b/eos/tests/typeTests/modules/probeLauncherHardpoint.py
new file mode 100755
index 000000000..de6c1c871
--- /dev/null
+++ b/eos/tests/typeTests/modules/probeLauncherHardpoint.py
@@ -0,0 +1,11 @@
+from eos.tests import TestBase
+from eos import db
+from eos.types import Module, Hardpoint
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.m = Module(db.getItem("Scan Probe Launcher II"))
+
+ def test_hardpoint(self):
+ self.assertEquals(self.m.hardpoint, Hardpoint.NONE)
diff --git a/eos/tests/typeTests/modules/sensorBooster.py b/eos/tests/typeTests/modules/sensorBooster.py
new file mode 100755
index 000000000..a5afae12c
--- /dev/null
+++ b/eos/tests/typeTests/modules/sensorBooster.py
@@ -0,0 +1,42 @@
+from eos.tests import TestBase
+from eos import db
+from eos.types import Fit, Ship, Module, State
+from eos.modifiedAttributeDict import ModifiedAttributeDict
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.fit = Fit()
+ self.fit.ship = Ship(db.getItem("Rifter"))
+ self.testItem = db.getItem("Sensor Booster II")
+ self.testMod1 = Module(self.testItem)
+ self.testMod2 = Module(self.testItem)
+ self.testMod1.state = State.ACTIVE
+ self.testMod2.state = State.ACTIVE
+ self.fit.modules.append(self.testMod1)
+ self.fit.modules.append(self.testMod2)
+ self.fit.calculateModifiedAttributes()
+
+ def test_scanResolution(self):
+ self.buildTested = 171215
+ targetAttrName = "scanResolution"
+ penalize = True
+ modBonus = self.testItem.getAttribute("scanResolutionBonus")
+ expected = ModifiedAttributeDict()
+ expected.original = self.fit.ship.item.attributes
+ expected.boost(targetAttrName, modBonus, stackingPenalties = penalize)
+ expected.boost(targetAttrName, modBonus, stackingPenalties = penalize)
+ actual = self.fit.ship.getModifiedItemAttr(targetAttrName)
+ self.assertAlmostEquals(expected[targetAttrName], actual)
+
+ def test_maxTargetRange(self):
+ self.buildTested = 171215
+ targetAttrName = "maxTargetRange"
+ penalize = True
+ modBonus = self.testItem.getAttribute("maxTargetRangeBonus")
+ expected = ModifiedAttributeDict()
+ expected.original = self.fit.ship.item.attributes
+ expected.boost(targetAttrName, modBonus, stackingPenalties = penalize)
+ expected.boost(targetAttrName, modBonus, stackingPenalties = penalize)
+ actual = self.fit.ship.getModifiedItemAttr(targetAttrName)
+ self.assertAlmostEquals(expected[targetAttrName], actual)
diff --git a/eos/tests/typeTests/modules/signalAmplifier.py b/eos/tests/typeTests/modules/signalAmplifier.py
new file mode 100755
index 000000000..63bb87b28
--- /dev/null
+++ b/eos/tests/typeTests/modules/signalAmplifier.py
@@ -0,0 +1,51 @@
+from eos.tests import TestBase
+from eos import db
+from eos.types import Fit, Ship, Module
+from eos.modifiedAttributeDict import ModifiedAttributeDict
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.fit = Fit()
+ self.fit.ship = Ship(db.getItem("Rifter"))
+ self.testItem = db.getItem("Signal Amplifier II")
+ self.testMod1 = Module(self.testItem)
+ self.testMod2 = Module(self.testItem)
+ self.fit.modules.append(self.testMod1)
+ self.fit.modules.append(self.testMod2)
+ self.fit.calculateModifiedAttributes()
+
+ def test_scanResolution(self):
+ self.buildTested = 171215
+ targetAttrName = "scanResolution"
+ penalize = True
+ modBonus = self.testItem.getAttribute("scanResolutionBonus")
+ expected = ModifiedAttributeDict()
+ expected.original = self.fit.ship.item.attributes
+ expected.boost(targetAttrName, modBonus, stackingPenalties = penalize)
+ expected.boost(targetAttrName, modBonus, stackingPenalties = penalize)
+ actual = self.fit.ship.getModifiedItemAttr(targetAttrName)
+ self.assertAlmostEquals(expected[targetAttrName], actual)
+
+ def test_maxTargetRange(self):
+ self.buildTested = 171215
+ targetAttrName = "maxTargetRange"
+ penalize = True
+ modBonus = self.testItem.getAttribute("maxTargetRangeBonus")
+ expected = ModifiedAttributeDict()
+ expected.original = self.fit.ship.item.attributes
+ expected.boost(targetAttrName, modBonus, stackingPenalties = penalize)
+ expected.boost(targetAttrName, modBonus, stackingPenalties = penalize)
+ actual = self.fit.ship.getModifiedItemAttr(targetAttrName)
+ self.assertAlmostEquals(expected[targetAttrName], actual)
+
+ def test_maxLockedTargets(self):
+ self.buildTested = 171215
+ targetAttrName = "maxLockedTargets"
+ modBonus = self.testItem.getAttribute("maxLockedTargetsBonus")
+ expected = ModifiedAttributeDict()
+ expected.original = self.fit.ship.item.attributes
+ expected.increase(targetAttrName, modBonus)
+ expected.increase(targetAttrName, modBonus)
+ actual = self.fit.ship.getModifiedItemAttr(targetAttrName)
+ self.assertAlmostEquals(expected[targetAttrName], actual)
diff --git a/eos/tests/typeTests/modules/targetingSystemSubcontroller.py b/eos/tests/typeTests/modules/targetingSystemSubcontroller.py
new file mode 100755
index 000000000..0ba6d0859
--- /dev/null
+++ b/eos/tests/typeTests/modules/targetingSystemSubcontroller.py
@@ -0,0 +1,82 @@
+from eos.tests import TestBase
+from eos import db
+from eos.types import Fit, Ship, Module
+from eos.modifiedAttributeDict import ModifiedAttributeDict
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.fit = Fit()
+ self.fit.ship = Ship(db.getItem("Rifter"))
+ self.testItemT1 = db.getItem("Small Targeting System Subcontroller I")
+ self.testItemT2 = db.getItem("Small Targeting System Subcontroller II")
+ self.testModT1_1 = Module(self.testItemT1)
+ self.testModT1_2 = Module(self.testItemT1)
+ self.testModT2_1 = Module(self.testItemT2)
+ self.testModT2_2 = Module(self.testItemT2)
+
+ # T1 and T2 rigs have different effects for scanning resolution boost,
+ # so we have to test them separately
+ def test_scanResolutionT1(self):
+ self.buildTested = 171215
+ self.fit.modules.append(self.testModT1_1)
+ self.fit.modules.append(self.testModT1_2)
+ self.fit.calculateModifiedAttributes()
+ targetAttrName = "scanResolution"
+ penalize = True
+ modBonus = self.testItemT1.getAttribute("scanResolutionMultiplier")
+ expected = ModifiedAttributeDict()
+ expected.original = self.fit.ship.item.attributes
+ expected.multiply(targetAttrName, modBonus, stackingPenalties = penalize)
+ expected.multiply(targetAttrName, modBonus, stackingPenalties = penalize)
+ actual = self.fit.ship.getModifiedItemAttr(targetAttrName)
+ self.assertAlmostEquals(expected[targetAttrName], actual)
+
+ def test_scanResolutionT2(self):
+ self.buildTested = 171215
+ self.fit.modules.append(self.testModT2_1)
+ self.fit.modules.append(self.testModT2_2)
+ self.fit.calculateModifiedAttributes()
+ targetAttrName = "scanResolution"
+ penalize = True
+ modBonus = self.testItemT2.getAttribute("scanResolutionMultiplier")
+ expected = ModifiedAttributeDict()
+ expected.original = self.fit.ship.item.attributes
+ expected.multiply(targetAttrName, modBonus, stackingPenalties = penalize)
+ expected.multiply(targetAttrName, modBonus, stackingPenalties = penalize)
+ actual = self.fit.ship.getModifiedItemAttr(targetAttrName)
+ self.assertAlmostEquals(expected[targetAttrName], actual)
+
+ def test_scanResolutionT1T2(self):
+ self.buildTested = 171215
+ self.fit.modules.append(self.testModT1_1)
+ self.fit.modules.append(self.testModT2_1)
+ self.fit.calculateModifiedAttributes()
+ bonusAttrName = "scanResolutionMultiplier"
+ targetAttrName = "scanResolution"
+ penalize = False
+ mod1Bonus = self.testItemT1.getAttribute(bonusAttrName)
+ mod2Bonus = self.testItemT2.getAttribute(bonusAttrName)
+ expected = ModifiedAttributeDict()
+ expected.original = self.fit.ship.item.attributes
+ expected.multiply(targetAttrName, mod1Bonus, stackingPenalties = penalize)
+ expected.multiply(targetAttrName, mod2Bonus, stackingPenalties = penalize)
+ actual = self.fit.ship.getModifiedItemAttr(targetAttrName)
+ self.assertAlmostEquals(expected[targetAttrName], actual)
+
+ def test_shieldCapacity(self):
+ self.buildTested = 171215
+ self.fit.modules.append(self.testModT1_1)
+ self.fit.modules.append(self.testModT2_1)
+ self.fit.calculateModifiedAttributes()
+ bonusAttrName = "drawback"
+ targetAttrName = "shieldCapacity"
+ penalize = False
+ mod1Bonus = self.testItemT1.getAttribute(bonusAttrName)
+ mod2Bonus = self.testItemT2.getAttribute(bonusAttrName)
+ expected = ModifiedAttributeDict()
+ expected.original = self.fit.ship.item.attributes
+ expected.boost(targetAttrName, mod1Bonus, stackingPenalties = penalize)
+ expected.boost(targetAttrName, mod2Bonus, stackingPenalties = penalize)
+ actual = self.fit.ship.getModifiedItemAttr(targetAttrName)
+ self.assertAlmostEquals(expected[targetAttrName], actual)
diff --git a/eos/tests/typeTests/projectedDrones/TargetPaintDrone.py b/eos/tests/typeTests/projectedDrones/TargetPaintDrone.py
new file mode 100755
index 000000000..221a5a39a
--- /dev/null
+++ b/eos/tests/typeTests/projectedDrones/TargetPaintDrone.py
@@ -0,0 +1,19 @@
+from eos.tests import TestBase
+from eos import db
+from eos.types import Fit, Ship
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.i = db.getItem("Warrior TP-300")
+ self.f = Fit()
+ self.f.ship = Ship(db.getItem("Rifter"))
+ d = self.f.projectedDrones.appendItem(self.i, 2)
+ d.amountActive = 2
+ self.f.calculateModifiedAttributes()
+
+ def test_speedSlow(self):
+ original = self.f.ship.item.getAttribute("signatureRadius")
+ multiplier = 1.04
+ expected = original * (1 + (multiplier -1) * 0.86911998) * multiplier
+ self.assertAlmostEquals(expected, self.f.ship.getModifiedItemAttr("signatureRadius"), 3)
diff --git a/eos/tests/typeTests/projectedDrones/__init__.py b/eos/tests/typeTests/projectedDrones/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/projectedModules/__init__.py b/eos/tests/typeTests/projectedModules/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/projectedModules/stasisWebifier.py b/eos/tests/typeTests/projectedModules/stasisWebifier.py
new file mode 100755
index 000000000..18cc08922
--- /dev/null
+++ b/eos/tests/typeTests/projectedModules/stasisWebifier.py
@@ -0,0 +1,23 @@
+from eos.tests import TestBase
+from eos import db
+from eos.types import Module, Fit, Ship, State
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.i = db.getItem("Stasis Webifier I")
+ self.f = Fit()
+ self.f.ship = Ship(db.getItem("Rifter"))
+ self.m = Module(self.i)
+ self.m2 = Module(self.i)
+ self.m.state = State.ACTIVE
+ self.m2.state = State.ACTIVE
+ self.f.projectedModules.append(self.m)
+ self.f.projectedModules.append(self.m2)
+ self.f.calculateModifiedAttributes()
+
+ def test_speedSlow(self):
+ original = self.f.ship.item.getAttribute("maxVelocity")
+ multiplier = 0.5
+ expected = original * (1 + (multiplier -1) * 0.86911998) * multiplier
+ self.assertAlmostEquals(expected, self.f.ship.getModifiedItemAttr("maxVelocity"), 3)
diff --git a/eos/tests/typeTests/ships/__init__.py b/eos/tests/typeTests/ships/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/assaultShips/__init__.py b/eos/tests/typeTests/ships/assaultShips/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/assaultShips/enyo.py b/eos/tests/typeTests/ships/assaultShips/enyo.py
new file mode 100755
index 000000000..7109d246c
--- /dev/null
+++ b/eos/tests/typeTests/ships/assaultShips/enyo.py
@@ -0,0 +1,105 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Enyo"
+
+ # Gallente Frigate Skill Bonus:
+ # 5% bonus to Small Hybrid Turret Damage per level
+
+ def test_gallenteFrigate_damageMultiplier_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "75mm Gatling Rail I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Electron Blaster I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Assault Frigates Skill Bonus:
+ # 10% bonus to Small Hybrid Turret Optimal Range per level
+
+ def test_assaultShips_maxRange_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "125mm Railgun I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_maxRange_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "200mm Railgun I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Assault Frigates Skill Bonus:
+ # 7.5% bonus to Small Hybrid Turret Tracking Speed per level
+
+ def test_assaultShips_trackingSpeed_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Light Electron Blaster I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_trackingSpeed_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Heavy Electron Blaster I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/assaultShips/freki.py b/eos/tests/typeTests/ships/assaultShips/freki.py
new file mode 100755
index 000000000..c22347cf1
--- /dev/null
+++ b/eos/tests/typeTests/ships/assaultShips/freki.py
@@ -0,0 +1,200 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Freki"
+
+ # Minmatar Frigate Skill Bonus:
+ # 12.5% Small Projectile Turret damage per level
+
+ def test_minmatarFrigate_damageMultiplier_moduleProjectileWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "280mm Howitzer Artillery I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.125
+ fLvl = 4
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "425mm AutoCannon I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Frigate Skill Bonus:
+ # 30% bonus to Stasis Webifier Range per level
+
+ def test_minmatarFrigate_maxRange_moduleStasisWebSkillrqPropjamm(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Stasis Webifier I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.3
+ fLvl = 4
+ fIngame = 2.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_maxRange_moduleStasisWebNoSkillrq(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Civilian Stasis Webifier"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.3
+ fLvl = 4
+ fIngame = 2.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_maxRange_moduleOtherSkillrqPropjamm(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Warp Disruptor I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 50% Small Projectile Turret optimal range bonus
+
+ def test_static_maxRange_moduleProjectileWeaponSmall(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "250mm Light Artillery Cannon I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxRange_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "650mm Artillery Cannon I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 50% Small Projectile Turret falloff bonus
+
+ def test_static_falloff_moduleProjectileWeaponSmall(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "200mm AutoCannon I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_falloff_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "Dual 180mm AutoCannon I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 75% afterburner and microwarpdrive capacitor consumption bonus
+
+ def test_static_capacitorNeed_moduleAfterburnerSkillrqHighSpeedManeuvering(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "1MN MicroWarpdrive I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 0.25
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleAfterburnerSkillrqAfterburner(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "1MN Afterburner I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 0.25
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleAfterburnerNoSkillrq(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Afterburner"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 0.25
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "ECM Burst I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/assaultShips/harpy.py b/eos/tests/typeTests/ships/assaultShips/harpy.py
new file mode 100755
index 000000000..07a2a53d9
--- /dev/null
+++ b/eos/tests/typeTests/ships/assaultShips/harpy.py
@@ -0,0 +1,105 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Harpy"
+
+ # Caldari Frigate Skill Bonus:
+ # 10% bonus to Small Hybrid Turret Optimal range per level
+
+ def test_caldariFrigate_maxRange_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "150mm Railgun I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_maxRange_moduleHybridWeaponOtherl(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Dual 150mm Railgun I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Assault Frigates Skill Bonus:
+ # 10% bonus to Small Hybrid Turret Optimal Range per level
+
+ def test_assaultShips_maxRange_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Light Neutron Blaster I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_maxRange_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Heavy Electron Blaster I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Assault Frigates Skill Bonus:
+ # 5% bonus to Small Hybrid Turret Damage per level
+
+ def test_assaultShips_damageMultiplier_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Light Ion Blaster I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "250mm Railgun I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/assaultShips/hawk.py b/eos/tests/typeTests/ships/assaultShips/hawk.py
new file mode 100755
index 000000000..b3ee51d40
--- /dev/null
+++ b/eos/tests/typeTests/ships/assaultShips/hawk.py
@@ -0,0 +1,647 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Hawk"
+
+ # Caldari Frigate Skill Bonus:
+ # 5% bonus to Missile Kinetic Damage per level
+ # Actually it's 10%, CCP forgot to change description after boost
+
+ def test_caldariFrigate_kineticDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rage Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Precision Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Serpent F.O.F. Light Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Assault Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Rage Assault Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Heavy Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Fury Heavy Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Hydra F.O.F. Heavy Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Rage Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Precision Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Dragon F.O.F. Cruise Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rift Citadel Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rajas Citadel Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLightNoSkillrqMissileOp(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Civilian Bloodclaw Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "EMP S"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Assault Frigates Skill Bonus:
+ # 10% bonus to Missile Velocity per level
+
+ def test_assaultShips_maxVelocity_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Foxfire Rocket"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_maxVelocity_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Phalanx Javelin Rocket"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_maxVelocity_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Flameburst Light Missile"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_maxVelocity_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Piranha Precision Light Missile"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_maxVelocity_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Seeker F.O.F. Light Missile I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_maxVelocity_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Terror Assault Missile"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_maxVelocity_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Hellfire Rage Assault Missile"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_maxVelocity_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Havoc Heavy Missile"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_maxVelocity_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Thunderbolt Fury Heavy Missile"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_maxVelocity_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Hellhound F.O.F. Heavy Missile I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_maxVelocity_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Inferno Torpedo"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_maxVelocity_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Bane Javelin Torpedo"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_maxVelocity_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Devastator Cruise Missile"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_maxVelocity_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Paradise Precision Cruise Missile"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_maxVelocity_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Exterminator F.O.F. Light Missile I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_maxVelocity_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Rift Citadel Torpedo"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_maxVelocity_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Thunar Citadel Cruise Missile"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_maxVelocity_chargeMissileDefender(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Defender I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_maxVelocity_chargeMissileLightNoSkillrqMissileOp(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Civilian Bloodclaw Light Missile"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Assault Frigates Skill Bonus:
+ # 7.5% bonus to Shield Boost Amount per level
+
+ def test_assaultShips_shieldBonus_moduleShieldBoosterSkillrqShieldop(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Small Shield Booster I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+
+ def test_assaultShips_shieldBonus_moduleShieldBoosterSkillrqCapitalShieldop(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Capital Shield Booster I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_shieldBonus_moduleShieldBoosterNoSkillrq(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Civilian Shield Booster I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_shieldBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Small Shield Transporter I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/assaultShips/ishkur.py b/eos/tests/typeTests/ships/assaultShips/ishkur.py
new file mode 100755
index 000000000..50e32dee7
--- /dev/null
+++ b/eos/tests/typeTests/ships/assaultShips/ishkur.py
@@ -0,0 +1,89 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Ishkur"
+
+ # Gallente Frigate Skill Bonus:
+ # 5% bonus to Small Hybrid Turret damage
+
+ def test_gallenteFrigate_damageMultiplier_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Light Ion Blaster I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Electron Blaster I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Assault Frigates Skill Bonus:
+ # 10% bonus to Small Hybrid Turret Optimal Range per level
+
+ def test_assaultShips_maxRange_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Light Neutron Blaster I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_maxRange_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Dual 150mm Railgun I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Assault Frigates Skill Bonus:
+ # 5m3 Drone Bay Capacity per level
+
+ def test_assaultShips_droneCapacity_ship(self):
+ self.buildTested = 0
+ attr = "droneCapacity"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 30
+ fLvl = 4
+ fIngame = 45
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/assaultShips/jaguar.py b/eos/tests/typeTests/ships/assaultShips/jaguar.py
new file mode 100755
index 000000000..1192104a3
--- /dev/null
+++ b/eos/tests/typeTests/ships/assaultShips/jaguar.py
@@ -0,0 +1,105 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Jaguar"
+
+ # Minmatar Frigate Skill Bonus:
+ # 5% bonus to Small Projectile Turret Damage per level
+
+ def test_minmatarFrigate_damageMultiplier_moduleProjectileWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "150mm Light AutoCannon I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "220mm Vulcan AutoCannon I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Assault Frigates Skill Bonus:
+ # 10% bonus to Small Projectile Turret Optimal Range per level
+
+ def test_assaultShips_maxRange_moduleProjectileWeaponSmall(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "280mm Howitzer Artillery I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_maxRange_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "720mm Howitzer Artillery I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Assault Frigates Skill Bonus:
+ # 5% bonus to Small Projectile Damage per level
+
+ def test_assaultShips_damageMultiplier_moduleProjectileWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "125mm Gatling AutoCannon I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "425mm AutoCannon I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/assaultShips/malice.py b/eos/tests/typeTests/ships/assaultShips/malice.py
new file mode 100755
index 000000000..33f5e29d2
--- /dev/null
+++ b/eos/tests/typeTests/ships/assaultShips/malice.py
@@ -0,0 +1,286 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Malice"
+
+ # Amarr Frigate Skill Bonus:
+ # 5% bonus to Armor Resistances per level
+ # Bonus is bugged, it makes resistances worse
+
+ def test_amarrFrigate_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_armorEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_armorExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_armorKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_armorThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Frigate Skill Bonus:
+ # 20% bonus to energy vampire transfer amount per level
+
+ def test_amarrFrigate_powerTransferAmount_moduleEnergyVampire(self):
+ self.buildTested = 0
+ attr = "powerTransferAmount"
+ item = "Small Nosferatu I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_powerTransferAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "powerTransferAmount"
+ item = "Small Energy Transfer Array I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Frigate Skill Bonus:
+ # 20% bonus to energy vampire range per level
+
+ def test_amarrFrigate_powerTransferRange_moduleEnergyVampire(self):
+ self.buildTested = 0
+ attr = "powerTransferRange"
+ item = "Small Nosferatu I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_powerTransferRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "powerTransferRange"
+ item = "Medium Energy Transfer Array I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Frigate Skill Bonus:
+ # 20% bonus to energy neutralizer transfer amount per level
+
+ def test_amarrFrigate_energyDestabilizationAmount_moduleEnergyDestabilizer(self):
+ self.buildTested = 0
+ attr = "energyDestabilizationAmount"
+ item = "Medium Energy Neutralizer I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Frigate Skill Bonus:
+ # 20% bonus to energy neutralizer range per level
+
+ def test_amarrFrigate_energyDestabilizationRange_moduleEnergyDestabilizer(self):
+ self.buildTested = 0
+ attr = "energyDestabilizationRange"
+ item = "Small Energy Neutralizer I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 100% bonus to Small Energy Turret Damage
+
+ def test_static_damageMultiplier_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Medium Pulse Laser I"
+ ship_other = "Wolf"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_damageMultiplier_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Quad Light Beam Laser I"
+ ship_other = "Wolf"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 50% bonus to Small Energy Turret optimal range
+
+ def test_static_maxRange_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Medium Beam Laser I"
+ ship_other = "Wolf"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxRange_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Heavy Pulse Laser I"
+ ship_other = "Wolf"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/assaultShips/retribution.py b/eos/tests/typeTests/ships/assaultShips/retribution.py
new file mode 100755
index 000000000..1d6264c5d
--- /dev/null
+++ b/eos/tests/typeTests/ships/assaultShips/retribution.py
@@ -0,0 +1,105 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Retribution"
+
+ # Amarr Frigate Skill Bonus:
+ # 10% bonus to Small Energy Turret Cap Use per level
+
+ def test_amarrFrigate_capacitorNeed_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Medium Pulse Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Focused Medium Pulse Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Assault Frigates Skill Bonus:
+ # 10% bonus to Small Energy Turret Optimal Range per level
+
+ def test_assaultShips_maxRange_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Medium Beam Laser I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_maxRange_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Heavy Beam Laser I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Assault Frigates Skill Bonus:
+ # 5% bonus to Small Energy Turret Damage per level
+
+ def test_assaultShips_damageMultiplier_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Gatling Pulse Laser I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_damageMultiplier_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Focused Medium Pulse Laser I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/assaultShips/utu.py b/eos/tests/typeTests/ships/assaultShips/utu.py
new file mode 100755
index 000000000..4417afaf9
--- /dev/null
+++ b/eos/tests/typeTests/ships/assaultShips/utu.py
@@ -0,0 +1,484 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Utu"
+
+ # Gallente Frigate Skill Bonus:
+ # 10% bonus to drone damage per skill level
+
+ def test_gallenteFrigate_damageMultiplier_droneCombat(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Acolyte I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Frigate Skill Bonus:
+ # 10% bonus to Warp Scrambler and Warp Disruptor Range per level.
+
+ def test_gallenteFrigate_maxRange_moduleWarpScramblerSkillrqPropJamming(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Warp Scrambler I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_maxRange_moduleWarpScramblerNoSkillrqPropJamming(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Civilian Warp Disruptor"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_maxRange_moduleOtherSkillrqPropJamming(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Stasis Webifier I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 50% bonus to Small Hybrid Turret Optimal Range
+
+ def test_static_maxRange_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "150mm Railgun I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxRange_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Heavy Ion Blaster I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 50% bonus to Small Hybrid Turret Tracking
+
+ def test_static_trackingSpeed_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Light Ion Blaster I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_trackingSpeed_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "200mm Railgun I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 50% reduction in the amount of heat damage absorbed by modules
+
+ def test_static_heatDamage_moduleAfterburner(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "1MN MicroWarpdrive I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_heatDamage_moduleArmorHardener(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Armor Explosive Hardener I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_heatDamage_moduleArmorRepairProjector(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Remote Armor Repair System I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_heatDamage_moduleArmorRepairer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Armor Repairer I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_heatDamage_moduleCapacitorBooster(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Micro Capacitor Booster I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_heatDamage_moduleECCM(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "ECCM - Omni I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_heatDamage_moduleECM(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "ECM - Phase Inverter I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_heatDamage_moduleEnergyDestabilizer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Energy Neutralizer I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_heatDamage_moduleEnergyTransferArray(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Energy Transfer Array I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_heatDamage_moduleEnergyVampire(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Nosferatu I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_heatDamage_moduleEnergyWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Dual Light Beam Laser I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_heatDamage_moduleHullRepairer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Hull Repairer I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_heatDamage_moduleHybridWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "150mm Railgun I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_heatDamage_moduleMissileLauncherAssault(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Assault Missile Launcher I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_heatDamage_moduleMissileLauncherCitadel(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Citadel Cruise Launcher I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_heatDamage_moduleMissileLauncherCruise(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Cruise Missile Launcher I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_heatDamage_moduleMissileLauncherHeavy(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Missile Launcher I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_heatDamage_moduleMissileLauncherHeavyAssault(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Assault Missile Launcher I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_heatDamage_moduleMissileLauncherRocket(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Rocket Launcher I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_heatDamage_moduleMissileLauncherSiege(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Siege Missile Launcher I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_heatDamage_moduleMissileLauncherStandard(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Standard Missile Launcher I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_heatDamage_moduleProjectileWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "125mm Gatling AutoCannon I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_heatDamage_moduleShieldBooster(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Shield Booster I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_heatDamage_moduleShieldHardener(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Photon Scattering Field I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_heatDamage_moduleShieldTransporter(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Micro Shield Transporter I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_heatDamage_moduleStasisWeb(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Stasis Webifier I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_heatDamage_moduleWarpScrambler(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Warp Scrambler I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/assaultShips/vengeance.py b/eos/tests/typeTests/ships/assaultShips/vengeance.py
new file mode 100755
index 000000000..8ec49fed8
--- /dev/null
+++ b/eos/tests/typeTests/ships/assaultShips/vengeance.py
@@ -0,0 +1,325 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Vengeance"
+
+ # Amarr Frigate Skill Bonus:
+ # 5% bonus to Rocket Damage per level
+
+ def test_amarrFrigate_emDamage_chargeRocket(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Gremlin Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_emDamage_chargeRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Gremlin Rage Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_emDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "EMP S"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosiveDamage_chargeRocket(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Phalanx Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosiveDamage_chargeRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Phalanx Rage Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosiveDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Defender I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_kineticDamage_chargeRocket(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_kineticDamage_chargeRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Javelin Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_kineticDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Hail S"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_thermalDamage_chargeRocket(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Foxfire Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_thermalDamage_chargeRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Foxfire Rage Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_thermalDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Aurora S"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Assault Frigates Skill Bonus:
+ # 5% bonus to Armor Resistances per level
+
+ def test_assaultShips_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_armorEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_armorExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_armorKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_armorThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Assault Frigates Skill Bonus:
+ # 5% bonus to Capacitor Recharge Rate per level
+
+ def test_assaultShips_rechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "rechargeRate"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/assaultShips/wolf.py b/eos/tests/typeTests/ships/assaultShips/wolf.py
new file mode 100755
index 000000000..70ca98bb1
--- /dev/null
+++ b/eos/tests/typeTests/ships/assaultShips/wolf.py
@@ -0,0 +1,105 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Wolf"
+
+ # Minmatar Frigate Skill Bonus:
+ # 5% bonus to Small Projectile Turret Damage per level
+
+ def test_minmatarFrigate_damageMultiplier_moduleProjectileWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "200mm AutoCannon I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "425mm AutoCannon I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Assault Frigates Skill Bonus:
+ # 5% bonus to Small Projectile Turret Damage per level
+
+ def test_assaultShips_damageMultiplier_moduleProjectileWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "280mm Howitzer Artillery I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "650mm Artillery Cannon I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Assault Frigates Skill Bonus:
+ # 10% bonus to Small Projectile Falloff Range per level
+
+ def test_assaultShips_falloff_moduleProjectileWeaponSmall(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "150mm Light AutoCannon I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_assaultShips_falloff_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "220mm Vulcan AutoCannon I"
+ skill = "Assault Frigates"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battlecruisers/__init__.py b/eos/tests/typeTests/ships/battlecruisers/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/battlecruisers/brutix.py b/eos/tests/typeTests/ships/battlecruisers/brutix.py
new file mode 100755
index 000000000..732d732d3
--- /dev/null
+++ b/eos/tests/typeTests/ships/battlecruisers/brutix.py
@@ -0,0 +1,130 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Brutix"
+
+ # Battlecruiser Skill Bonus:
+ # 5% bonus to Medium Hybrid Turret damage per level
+
+ def test_battlecruisers_damageMultiplier_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Neutron Blaster I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "150mm Railgun I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Battlecruiser Skill Bonus:
+ # 7.5% bonus to Armor Repairer effectiveness per level
+
+ def test_battlecruisers_armorDamageAmount_moduleArmorRepairer(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Small Armor Repairer I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorDamageAmount_moduleArmorRepairerCapital(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Capital Armor Repairer I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorDamageAmount_moduleArmorRepairerCivilian(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Civilian Armor Repairer"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorDamageAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Small Remote Armor Repair System I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in the CPU need of Warfare Link modules
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Skirmish Warfare Link - Interdiction Maneuvers I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battlecruisers/cyclone.py b/eos/tests/typeTests/ships/battlecruisers/cyclone.py
new file mode 100755
index 000000000..aff01321c
--- /dev/null
+++ b/eos/tests/typeTests/ships/battlecruisers/cyclone.py
@@ -0,0 +1,130 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Cyclone"
+
+ # Battlecruiser Skill Bonus:
+ # 5% bonus to Medium Projectile Turret rate of fire per level
+
+ def test_battlecruisers_speed_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "220mm Vulcan AutoCannon I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "150mm Light AutoCannon I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Battlecruiser Skill Bonus:
+ # 7.5% bonus to shield boosting per level
+
+ def test_battlecruisers_shieldBonus_moduleShieldBooster(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Large Shield Booster I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldBonus_moduleShieldBoosterCapital(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Capital Shield Booster I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldBonus_moduleShieldBoosterCivilian(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Civilian Shield Booster I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Medium Shield Transporter I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in the CPU need of Warfare Link modules
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Siege Warfare Link - Shield Efficiency I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battlecruisers/drake.py b/eos/tests/typeTests/ships/battlecruisers/drake.py
new file mode 100755
index 000000000..59f73d208
--- /dev/null
+++ b/eos/tests/typeTests/ships/battlecruisers/drake.py
@@ -0,0 +1,246 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Drake"
+
+ # Battlecruiser Skill Bonus:
+ # 5% shield resistance per level
+
+ def test_battlecruisers_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Battlecruiser Skill Bonus:
+ # 5% bonus kinetic damage of heavy missiles and heavy assault missiles per level
+
+ def test_battlecruisers_kineticDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Assault Missile"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_kineticDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Rage Assault Missile"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_kineticDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Heavy Missile"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_kineticDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Precision Heavy Missile"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_kineticDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Hydra F.O.F. Heavy Missile I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_kineticDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Light Missile"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in the CPU need of Warfare Link modules
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Siege Warfare Link - Active Shielding I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battlecruisers/ferox.py b/eos/tests/typeTests/ships/battlecruisers/ferox.py
new file mode 100755
index 000000000..3a605beee
--- /dev/null
+++ b/eos/tests/typeTests/ships/battlecruisers/ferox.py
@@ -0,0 +1,186 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Ferox"
+
+ # Battlecruiser Skill Bonus:
+ # 10% bonus to Medium Hybrid Turret optimal range per level
+
+ def test_battlecruisers_maxRange_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "200mm Railgun I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_maxRange_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "125mm Railgun I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Battlecruiser Skill Bonus:
+ # 5% bonus to all Shield resistances per level
+
+ def test_battlecruisers_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in the CPU need of Warfare Link modules
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Mining Foreman Link - Laser Optimization I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battlecruisers/harbinger.py b/eos/tests/typeTests/ships/battlecruisers/harbinger.py
new file mode 100755
index 000000000..92e301e97
--- /dev/null
+++ b/eos/tests/typeTests/ships/battlecruisers/harbinger.py
@@ -0,0 +1,160 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Harbinger"
+
+ # Battlecruiser Skill Bonus:
+ # 10% reduction in laser capacitor need per level
+
+ def test_battlecruisers_capacitorNeed_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Gatling Pulse Laser I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_capacitorNeed_moduleEnergyWeaponMedium(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Heavy Beam Laser I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_capacitorNeed_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Dual Heavy Pulse Laser I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_capacitorNeed_moduleEnergyWeaponCapital(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Dual Giga Pulse Laser I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Battlecruiser Skill Bonus:
+ # 5% bonus to laser damage per level
+
+ def test_battlecruisers_damageMultiplier_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual Light Beam Laser I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_damageMultiplier_moduleEnergyWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Quad Light Beam Laser I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_damageMultiplier_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Mega Beam Laser I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_damageMultiplier_moduleEnergyWeaponCapital(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual Giga Beam Laser I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in the CPU need of Warfare Link modules
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Armored Warfare Link - Damage Control I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battlecruisers/hurricane.py b/eos/tests/typeTests/ships/battlecruisers/hurricane.py
new file mode 100755
index 000000000..75d8208d0
--- /dev/null
+++ b/eos/tests/typeTests/ships/battlecruisers/hurricane.py
@@ -0,0 +1,100 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Hurricane"
+
+ # Battlecruiser Skill Bonus:
+ # 5% increase in projectile weapons damage per level
+
+ def test_battlecruisers_damageMultiplier_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual 180mm AutoCannon I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "150mm Light AutoCannon I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Battlecruiser Skill Bonus:
+ # 5% increase in projectile weapons Rate of Fire per level
+
+ def test_battlecruisers_speed_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "425mm AutoCannon I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Dual 425mm AutoCannon I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in the CPU need of Warfare Link modules
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Mining Foreman Link - Laser Optimization I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battlecruisers/myrmidon.py b/eos/tests/typeTests/ships/battlecruisers/myrmidon.py
new file mode 100755
index 000000000..95b7b4655
--- /dev/null
+++ b/eos/tests/typeTests/ships/battlecruisers/myrmidon.py
@@ -0,0 +1,241 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Myrmidon"
+
+ # Battlecruiser Skill Bonus:
+ # 10% increase to drone hitpoints per level
+
+ def test_battlecruisers_hp_droneCombat(self):
+ self.buildTested = 0
+ item = "Hammerhead I"
+ skill = "Battlecruisers"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_hp_droneLogistic(self):
+ self.buildTested = 0
+ item = "Medium Armor Maintenance Bot I"
+ skill = "Battlecruisers"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_hp_droneEwar(self):
+ self.buildTested = 0
+ item = "Praetor TD-900"
+ skill = "Battlecruisers"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_hp_droneCapDrain(self):
+ self.buildTested = 0
+ item = "Infiltrator EV-600"
+ skill = "Battlecruisers"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_hp_droneWeb(self):
+ self.buildTested = 0
+ item = "Berserker SW-900"
+ skill = "Battlecruisers"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_hp_droneMining(self):
+ self.buildTested = 0
+ item = "Harvester Mining Drone"
+ skill = "Battlecruisers"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Battlecruiser Skill Bonus:
+ # 10% increase to damage dealt by drones per level
+
+ def test_battlecruisers_damageMultiplier_droneCombat(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Bouncer I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_damageMultiplier_other(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "150mm Light AutoCannon I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Battlecruiser Skill Bonus:
+ # 7.5% increase to armor repair amount per level
+
+ def test_battlecruisers_armorDamageAmount_moduleArmorRepairer(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Medium Armor Repairer I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorDamageAmount_moduleArmorRepairerCapital(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Capital Armor Repairer I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorDamageAmount_moduleArmorRepairerCivilian(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Civilian Armor Repairer"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorDamageAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Medium Remote Armor Repair System I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in the CPU need of Warfare Link modules
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Information Warfare Link - Sensor Integrity I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battlecruisers/naga.py b/eos/tests/typeTests/ships/battlecruisers/naga.py
new file mode 100755
index 000000000..869b4bced
--- /dev/null
+++ b/eos/tests/typeTests/ships/battlecruisers/naga.py
@@ -0,0 +1,160 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Naga"
+
+
+ # Battlecruiser Skill Bonus Per Level:
+ # 5% bonus to Large Hybrid Turret damage
+
+ def test_battlecruisers_damageMultiplier_moduleHybridWeaponLarge(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Electron Blaster Cannon I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Light Electron Blaster I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Battlecruiser Skill Bonus Per Level:
+ # 10% bonus to Large Hybrid Turret optimal range
+
+ def test_battlecruisers_maxRange_moduleHybridWeaponLarge(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "425mm Railgun I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_maxRange_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "200mm Railgun I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 95% reduction in the powergrid need of Large Hybrid Turrets
+
+ def test_static_power_moduleHybridWeaponLarge(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Ion Blaster Cannon I"
+ ship_other = "Raven"
+ iIngame = 1.0
+ fIngame = 0.05
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_power_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Dual 150mm Railgun I"
+ ship_other = "Raven"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 50% reduction in the CPU need of Large Hybrid Turrets
+
+ def test_static_cpu_moduleHybridWeaponLarge(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Neutron Blaster Cannon I"
+ ship_other = "Raven"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Light Electron Blaster I"
+ ship_other = "Raven"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 50% reduction in the capacitor need of Large Hybrid Turrets
+
+ def test_static_capacitorNeed_moduleHybridWeaponLarge(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Dual 250mm Railgun I"
+ ship_other = "Raven"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Heavy Ion Blaster I"
+ ship_other = "Raven"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battlecruisers/oracle.py b/eos/tests/typeTests/ships/battlecruisers/oracle.py
new file mode 100755
index 000000000..db1d33a2d
--- /dev/null
+++ b/eos/tests/typeTests/ships/battlecruisers/oracle.py
@@ -0,0 +1,159 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Oracle"
+
+ # Battlecruiser Skill Bonus Per Level:
+ # 10% bonus to Large Energy Turret capacitor use
+
+ def test_battlecruisers_capacitorNeed_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Mega Pulse Laser I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Heavy Beam Laser I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Battlecruiser Skill Bonus Per Level:
+ # 5% bonus to Large Energy Turret damage
+
+ def test_battlecruisers_damageMultiplier_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Tachyon Beam Laser I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_damageMultiplier_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Pulse Laser I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 95% reduction in the powergrid need of Large Energy Turrets
+
+ def test_static_power_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Dual Heavy Pulse Laser I"
+ ship_other = "Apocalypse"
+ iIngame = 1.0
+ fIngame = 0.05
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_power_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Dual Light Beam Laser I"
+ ship_other = "Apocalypse"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 50% reduction in the CPU need of Large Energy Turrets
+
+ def test_static_cpu_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Mega Beam Laser I"
+ ship_other = "Apocalypse"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Gatling Pulse Laser I"
+ ship_other = "Apocalypse"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 50% reduction in the capacitor need of Large Energy Turrets
+
+ def test_static_capacitorNeed_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Tachyon Beam Laser I"
+ ship_other = "Apocalypse"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Quad Light Beam Laser I"
+ ship_other = "Apocalypse"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battlecruisers/prophecy.py b/eos/tests/typeTests/ships/battlecruisers/prophecy.py
new file mode 100755
index 000000000..3a9dc7502
--- /dev/null
+++ b/eos/tests/typeTests/ships/battlecruisers/prophecy.py
@@ -0,0 +1,186 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Prophecy"
+
+ # Battlecruiser Skill Bonus:
+ # 10% reduction in Medium Energy Weapon capacitor use per level
+
+ def test_battlecruisers_capacitorNeed_moduleEnergyWeaponMedium(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Heavy Pulse Laser I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Gatling Pulse Laser I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Battlecruiser Skill Bonus:
+ # 5% bonus to all armor resistances per level
+
+ def test_battlecruisers_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in the CPU need of Warfare Link modules
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Information Warfare Link - Recon Operation I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battlecruisers/talos.py b/eos/tests/typeTests/ships/battlecruisers/talos.py
new file mode 100755
index 000000000..6ee5899ca
--- /dev/null
+++ b/eos/tests/typeTests/ships/battlecruisers/talos.py
@@ -0,0 +1,159 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Talos"
+
+ # Battlecruiser Skill Bonus Per Level:
+ # 5% bonus to Large Hybrid Turret damage
+
+ def test_battlecruisers_damageMultiplier_moduleHybridWeaponLarge(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Neutron Blaster Cannon I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Neutron Blaster I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Battlecruiser Skill Bonus Per Level:
+ # 7.5% bonus to Large Hybrid Turret tracking speed
+
+ def test_battlecruisers_trackingSpeed_moduleHybridWeaponLarge(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "350mm Railgun I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_trackingSpeed_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Light Electron Blaster I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 95% reduction in the powergrid need of Large Hybrid Turrets
+
+ def test_static_power_moduleHybridWeaponLarge(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Electron Blaster Cannon I"
+ ship_other = "Megathron"
+ iIngame = 1.0
+ fIngame = 0.05
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_power_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Heavy Neutron Blaster I"
+ ship_other = "Megathron"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 50% reduction in the CPU need of Large Hybrid Turrets
+
+ def test_static_cpu_moduleHybridWeaponLarge(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Dual 250mm Railgun I"
+ ship_other = "Megathron"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Dual 150mm Railgun I"
+ ship_other = "Megathron"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 50% reduction in the capacitor need of Large Hybrid Turrets
+
+ def test_static_capacitorNeed_moduleHybridWeaponLarge(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "425mm Railgun I"
+ ship_other = "Megathron"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Heavy Neutron Blaster I"
+ ship_other = "Megathron"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battlecruisers/tornado.py b/eos/tests/typeTests/ships/battlecruisers/tornado.py
new file mode 100755
index 000000000..ad7703e58
--- /dev/null
+++ b/eos/tests/typeTests/ships/battlecruisers/tornado.py
@@ -0,0 +1,130 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Tornado"
+
+ # Battlecruiser Skill Bonus Per Level:
+ # 5% bonus to Large Projectile Turret Rate of Fire
+
+ def test_battlecruisers_speed_moduleProjectileWeaponLarge(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Dual 425mm AutoCannon I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "280mm Howitzer Artillery I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Battlecruiser Skill Bonus Per Level:
+ # 5% bonus to Large Projectile Turret falloff
+
+ def test_battlecruisers_falloff_moduleProjectileWeaponLarge(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "800mm Repeating Artillery I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_falloff_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "720mm Howitzer Artillery I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 95% reduction in the powergrid need of Large Projectile Turrets
+
+ def test_static_power_moduleProjectileWeaponLarge(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "1200mm Artillery Cannon I"
+ ship_other = "Tempest"
+ iIngame = 1.0
+ fIngame = 0.05
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_power_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "650mm Artillery Cannon I"
+ ship_other = "Tempest"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 50% reduction in the CPU need of Large Projectile Turrets
+
+ def test_static_cpu_moduleProjectileWeaponLarge(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Dual 650mm Repeating Artillery I"
+ ship_other = "Tempest"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "220mm Vulcan AutoCannon I"
+ ship_other = "Tempest"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/__init__.py b/eos/tests/typeTests/ships/battleships/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/battleships/abaddon.py b/eos/tests/typeTests/ships/battleships/abaddon.py
new file mode 100755
index 000000000..6be55d4e3
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/abaddon.py
@@ -0,0 +1,158 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Abaddon"
+
+ # Amarr Battleship Skill Bonus:
+ # 5% bonus to Large Energy Turret damage per level
+
+ def test_amarrBattleship_damageMultiplier_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual Heavy Pulse Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrBattleship_damageMultiplier_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Beam Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Battleship Skill Bonus:
+ # 5% armor resistance per level
+
+ def test_amarrBattleship_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrBattleship_armorEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrBattleship_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrBattleship_armorExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrBattleship_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrBattleship_armorKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrBattleship_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrBattleship_armorThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/apocalypse.py b/eos/tests/typeTests/ships/battleships/apocalypse.py
new file mode 100755
index 000000000..d44e344c8
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/apocalypse.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Apocalypse"
+
+ # Amarr Battleship Skill Bonus:
+ # 10% bonus to Large Energy Turret capacitor use per level
+
+ def test_amarrBattleship_capacitorNeed_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Tachyon Beam Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrBattleship_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Dual Light Beam Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Battleship Skill Bonus:S
+ # 7.5% bonus to Large Energy Turret optimal range per level
+
+ def test_amarrBattleship_maxRange_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Mega Pulse Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrBattleship_maxRange_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Heavy Pulse Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/apocalypseImperialIssue.py b/eos/tests/typeTests/ships/battleships/apocalypseImperialIssue.py
new file mode 100755
index 000000000..8c7f337db
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/apocalypseImperialIssue.py
@@ -0,0 +1,56 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Apocalypse Imperial Issue"
+
+ # Amarr Battleship Skill Bonus:
+ # 10% bonus to Large Energy Turret capacitor use per level
+
+ def test_amarrBattleship_capacitorNeed_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Dual Heavy Beam Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrBattleship_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Gatling Pulse Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Battleship Skill Bonus:
+ # 5% maximum Capacitor Capacity per level
+
+ def test_amarrBattleship_capacitorCapacity_ship(self):
+ self.buildTested = 0
+ attr = "capacitorCapacity"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/apocalypseNavyIssue.py b/eos/tests/typeTests/ships/battleships/apocalypseNavyIssue.py
new file mode 100755
index 000000000..cd12b9a77
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/apocalypseNavyIssue.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Apocalypse Navy Issue"
+
+ # Amarr Battleship Skill Bonus:
+ # 10% bonus to Large Energy Turret capacitor use per level
+
+ def test_amarrBattleship_capacitorNeed_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Mega Beam Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrBattleship_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Dual Light Pulse Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Battleship Skill Bonus:
+ # 7.5% bonus to Large Energy Turret optimal range per level
+
+ def test_amarrBattleship_maxRange_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Tachyon Beam Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrBattleship_maxRange_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Medium Beam Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/armageddon.py b/eos/tests/typeTests/ships/battleships/armageddon.py
new file mode 100755
index 000000000..3aec54311
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/armageddon.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Armageddon"
+
+ # Amarr Battleship Skill Bonus:
+ # 10% bonus to Large Energy Turret capacitor use per level
+
+ def test_amarrBattleship_capacitorNeed_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Mega Beam Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrBattleship_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Quad Light Beam Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Battleship Skill Bonus:
+ # 5% Large Energy Turret rate of fire per level
+
+ def test_amarrBattleship_speed_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Tachyon Beam Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrBattleship_speed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Pulse Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/armageddonImperialIssue.py b/eos/tests/typeTests/ships/battleships/armageddonImperialIssue.py
new file mode 100755
index 000000000..eabfc6b5b
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/armageddonImperialIssue.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Armageddon Imperial Issue"
+
+ # Amarr Battleship Skill Bonus:
+ # 10% bonus to Large Energy Turret capacitor use per level
+
+ def test_amarrBattleship_capacitorNeed_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Mega Pulse Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrBattleship_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Focused Medium Pulse Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Battleship Skill Bonus:
+ # 5% Large Energy Turret rate of fire per level
+
+ def test_amarrBattleship_speed_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Mega Beam Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrBattleship_speed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Dual Light Pulse Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/armageddonNavyIssue.py b/eos/tests/typeTests/ships/battleships/armageddonNavyIssue.py
new file mode 100755
index 000000000..8688bb351
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/armageddonNavyIssue.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Armageddon Navy Issue"
+
+ # Amarr Battleship Skill Bonus:
+ # 10% bonus to Large Energy Turret capacitor use per level
+
+ def test_amarrBattleship_capacitorNeed_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Dual Heavy Beam Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrBattleship_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Focused Medium Beam Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Battleship Skill Bonus:
+ # 5% Large Energy Turret rate of fire per level
+
+ def test_amarrBattleship_speed_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Dual Heavy Pulse Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrBattleship_speed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Medium Pulse Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/bhaalgorn.py b/eos/tests/typeTests/ships/battleships/bhaalgorn.py
new file mode 100755
index 000000000..8224010f0
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/bhaalgorn.py
@@ -0,0 +1,149 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Bhaalgorn"
+
+ # Amarr Battleship Skill Bonus:
+ # 15% bonus to Energy Vampire drain amount per level
+
+ def test_amarrBattleship_powerTransferAmount_moduleEnergyVampire(self):
+ self.buildTested = 0
+ attr = "powerTransferAmount"
+ item = "Heavy Nosferatu I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrBattleship_powerTransferAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "powerTransferAmount"
+ item = "Large Energy Transfer Array I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Battleship Skill Bonus:
+ # 15% bonus to Energy Neutralizer drain amount per level
+
+ def test_amarrBattleship_energyDestabilizationAmount_moduleEnergyDestabilizer(self):
+ self.buildTested = 0
+ attr = "energyDestabilizationAmount"
+ item = "Medium Energy Neutralizer I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrBattleship_energyDestabilizationAmount_other(self):
+ self.buildTested = 0
+ attr = "energyDestabilizationAmount"
+ item = "Praetor EV-900"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Battleship Skill Bonus:
+ # 20% bonus to Stasis Webifier activation range per level
+
+ def test_minmatarBattleship_maxRange_moduleStasisWeb(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Stasis Webifier I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarBattleship_maxRange_moduleStasisCivilian(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Civilian Stasis Webifier"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarBattleship_maxRange_moduleOtherSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Warp Disruptor I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 100% bonus to Large Energy Turret damage
+
+ def test_static_damageMultiplier_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Tachyon Beam Laser I"
+ ship_other = "Tempest"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_damageMultiplier_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Pulse Laser I"
+ ship_other = "Tempest"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/dominix.py b/eos/tests/typeTests/ships/battleships/dominix.py
new file mode 100755
index 000000000..114b1ce9e
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/dominix.py
@@ -0,0 +1,183 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Dominix"
+
+ # Gallente Battleship Skill Bonus:
+ # 5% bonus to Large Hybrid Turret damage per skill level
+
+ def test_gallenteBattleship_damageMultiplier_moduleHybridWeaponLarge(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Neutron Blaster Cannon I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "250mm Railgun I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Battleship Skill Bonus:
+ # 10% bonus to drone hitpoints per skill level
+
+ def test_gallenteBattleship_hp_droneCombat(self):
+ self.buildTested = 0
+ item = "Ogre I"
+ skill = "Gallente Battleship"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_hp_droneLogistic(self):
+ self.buildTested = 0
+ item = "Heavy Shield Maintenance Bot I"
+ skill = "Gallente Battleship"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_hp_droneEwar(self):
+ self.buildTested = 0
+ item = "Wasp EC-900"
+ skill = "Gallente Battleship"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_hp_droneCapDrain(self):
+ self.buildTested = 0
+ item = "Praetor EV-900"
+ skill = "Gallente Battleship"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_hp_droneWeb(self):
+ self.buildTested = 0
+ item = "Berserker SW-900"
+ skill = "Gallente Battleship"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_hp_droneMining(self):
+ self.buildTested = 0
+ item = "Mining Drone I"
+ skill = "Gallente Battleship"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Battleship Skill Bonus:
+ # 10% bonus to drone damage per skill level
+
+ def test_gallenteBattleship_damageMultiplier_droneCombat(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Infiltrator I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_damageMultiplier_other(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "1200mm Artillery Cannon I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/dominixNavyIssue.py b/eos/tests/typeTests/ships/battleships/dominixNavyIssue.py
new file mode 100755
index 000000000..97e84ddcd
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/dominixNavyIssue.py
@@ -0,0 +1,183 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Dominix Navy Issue"
+
+ # Gallente Battleship Skill Bonus:
+ # 5% bonus to Large Hybrid Turret damage per skill level
+
+ def test_gallenteBattleship_damageMultiplier_moduleHybridWeaponLarge(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "425mm Railgun I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Ion Blaster I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Battleship Skill Bonus:
+ # 10% bonus to drone hitpoints per skill level
+
+ def test_gallenteBattleship_hp_droneCombat(self):
+ self.buildTested = 0
+ item = "Hobgoblin I"
+ skill = "Gallente Battleship"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_hp_droneLogistic(self):
+ self.buildTested = 0
+ item = "Medium Armor Maintenance Bot I"
+ skill = "Gallente Battleship"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_hp_droneEwar(self):
+ self.buildTested = 0
+ item = "Infiltrator TD-600"
+ skill = "Gallente Battleship"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_hp_droneCapDrain(self):
+ self.buildTested = 0
+ item = "Acolyte EV-300"
+ skill = "Gallente Battleship"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_hp_droneWeb(self):
+ self.buildTested = 0
+ item = "Berserker SW-900"
+ skill = "Gallente Battleship"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_hp_droneMining(self):
+ self.buildTested = 0
+ item = "Harvester Mining Drone"
+ skill = "Gallente Battleship"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Battleship Skill Bonus:
+ # 10% bonus to drone damage per skill level
+
+ def test_gallenteBattleship_damageMultiplier_droneCombat(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Wasp I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_damageMultiplier_other(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Pulse Laser I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/hyperion.py b/eos/tests/typeTests/ships/battleships/hyperion.py
new file mode 100755
index 000000000..1d622661d
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/hyperion.py
@@ -0,0 +1,102 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Hyperion"
+
+ # Gallente Battleship Skill Bonus:
+ # 5% large hybrid weapon damage per level
+
+ def test_gallenteBattleship_damageMultiplier_moduleHybridWeaponLarge(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Electron Blaster Cannon I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Neutron Blaster I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Battleship Skill Bonus:
+ # 7.5% bonus to armor repair amount of armor repair systems per level
+
+ def test_gallenteBattleship_armorDamageAmount_moduleArmorRepairer(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Large Armor Repairer I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_armorDamageAmount_moduleArmorRepairerCapital(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Capital Armor Repairer I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_armorDamageAmount_moduleArmorRepairerCivilian(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Civilian Armor Repairer"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_armorDamageAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Large Remote Armor Repair System I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/machariel.py b/eos/tests/typeTests/ships/battleships/machariel.py
new file mode 100755
index 000000000..2febb2c45
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/machariel.py
@@ -0,0 +1,101 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Machariel"
+
+ # Minmatar Battleship Skill Bonus:
+ # 5% bonus to Large Projectile Turret damage per level
+
+ def test_minmatarBattleship_damageMultiplier_moduleProjectileWeaponLarge(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "1400mm Howitzer Artillery I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarBattleship_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "220mm Vulcan AutoCannon I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Battleship Skill Bonus:
+ # 10% bonus to Large Projectile Turret falloff per level
+
+ def test_gallenteBattleship_falloff_moduleProjectileWeaponLarge(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "800mm Repeating Artillery I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_falloff_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "425mm AutoCannon I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 25% bonus to Large Projectile Turret rate of fire
+
+ def test_static_speed_moduleProjectileWeaponLarge(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Dual 425mm AutoCannon I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.75
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "650mm Artillery Cannon I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/maelstrom.py b/eos/tests/typeTests/ships/battleships/maelstrom.py
new file mode 100755
index 000000000..7d1ada535
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/maelstrom.py
@@ -0,0 +1,102 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Maelstrom"
+
+ # Minmatar Battleship Skill Bonus:
+ # 5% bonus to Large Projectile Turret Rate of Fire per level
+
+ def test_minmatarBattleship_speed_moduleProjectileWeaponLarge(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "1200mm Artillery Cannon I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarBattleship_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "280mm Howitzer Artillery I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Battleship Skill Bonus:
+ # 7.5% bonus to Shield Boost Amount per level
+
+ def test_minmatarBattleship_shieldBonus_moduleShieldBooster(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "X-Large Shield Booster I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarBattleship_shieldBonus_moduleShieldBoosterCapital(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Capital Shield Booster I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarBattleship_shieldBonus_moduleShieldBoosterCivilian(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Civilian Shield Booster I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarBattleship_shieldBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Large Shield Transporter I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/megathron.py b/eos/tests/typeTests/ships/battleships/megathron.py
new file mode 100755
index 000000000..275ae649d
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/megathron.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Megathron"
+
+ # Gallente Battleship Skill Bonus:
+ # 5% bonus to Large Hybrid Turret damage per level
+
+ def test_gallenteBattleship_damageMultiplier_moduleHybridWeaponLarge(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "350mm Railgun I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "75mm Gatling Rail I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Battleship Skill Bonus:
+ # 7.5% bonus to Large Hybrid Turret tracking speed per level
+
+ def test_gallenteBattleship_trackingSpeed_moduleHybridWeaponLarge(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Ion Blaster Cannon I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_trackingSpeed_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Heavy Ion Blaster I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/megathronFederateIssue.py b/eos/tests/typeTests/ships/battleships/megathronFederateIssue.py
new file mode 100755
index 000000000..7a7b67d34
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/megathronFederateIssue.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Megathron Federate Issue"
+
+ # Gallente Battleship Skill Bonus:
+ # 5% bonus to Large Hybrid Turret damage per level
+
+ def test_gallenteBattleship_damageMultiplier_moduleHybridWeaponLarge(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Neutron Blaster Cannon I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Neutron Blaster I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Battleship Skill Bonus:
+ # 7.5% bonus to Large Hybrid Turret tracking speed per level
+
+ def test_gallenteBattleship_trackingSpeed_moduleHybridWeaponLarge(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "425mm Railgun I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_trackingSpeed_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Dual 150mm Railgun I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/megathronNavyIssue.py b/eos/tests/typeTests/ships/battleships/megathronNavyIssue.py
new file mode 100755
index 000000000..995bfee56
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/megathronNavyIssue.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Megathron Navy Issue"
+
+ # Gallente Battleship Skill Bonus:
+ # 5% bonus to Large Hybrid Turret damage per level
+
+ def test_gallenteBattleship_damageMultiplier_moduleHybridWeaponLarge(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Ion Blaster Cannon I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual 150mm Railgun I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Battleship Skill Bonus:
+ # 7.5% bonus to Large Hybrid Turret tracking speed per level
+
+ def test_gallenteBattleship_trackingSpeed_moduleHybridWeaponLarge(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Ion Blaster Cannon I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_trackingSpeed_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Heavy Ion Blaster I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/nightmare.py b/eos/tests/typeTests/ships/battleships/nightmare.py
new file mode 100755
index 000000000..8fdc9448f
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/nightmare.py
@@ -0,0 +1,101 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Nightmare"
+
+ # Amarr Battleship Skill Bonus:
+ # 7.5% bonus to Large Energy Turret tracking per level
+
+ def test_amarrBattleship_trackingSpeed_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Mega Pulse Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrBattleship_trackingSpeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Focused Medium Pulse Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Battleship Skill Bonus:
+ # 5% bonus to Large Energy Turret damage per level
+
+ def test_caldariBattleship_damageMultiplier_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Mega Beam Laser I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_damageMultiplier_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Focused Medium Beam Laser I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 100% bonus to Large Energy Turret damage
+
+ def test_static_damageMultiplier_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual Heavy Pulse Laser I"
+ ship_other = "Tempest"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_damageMultiplier_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Quad Light Beam Laser I"
+ ship_other = "Tempest"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/rattlesnake.py b/eos/tests/typeTests/ships/battleships/rattlesnake.py
new file mode 100755
index 000000000..65e3eaf98
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/rattlesnake.py
@@ -0,0 +1,353 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Rattlesnake"
+
+ # Caldari Battleship Skill Bonus:
+ # 5% shield resistance per level
+
+ def test_caldariBattleship_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_shieldEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_shieldExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_shieldKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_shieldThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Battleship Skill Bonus:
+ # 10% bonus to drone hitpoints per skill level
+
+ def test_gallenteBattleship_hp_droneCombat(self):
+ self.buildTested = 0
+ item = "Berserker I"
+ skill = "Gallente Battleship"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_hp_droneLogistic(self):
+ self.buildTested = 0
+ item = "Heavy Armor Maintenance Bot I"
+ skill = "Gallente Battleship"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_hp_droneEwar(self):
+ self.buildTested = 0
+ item = "Ogre SD-900"
+ skill = "Gallente Battleship"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_hp_droneCapDrain(self):
+ self.buildTested = 0
+ item = "Acolyte EV-300"
+ skill = "Gallente Battleship"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_hp_droneWeb(self):
+ self.buildTested = 0
+ item = "Berserker SW-900"
+ skill = "Gallente Battleship"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_hp_droneMining(self):
+ self.buildTested = 0
+ item = "Harvester Mining Drone"
+ skill = "Gallente Battleship"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Battleship Skill Bonus:
+ # 10% bonus to drone damage per skill level
+
+ def test_gallenteBattleship_damageMultiplier_droneCombat(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Garde I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_damageMultiplier_other(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Medium Beam Laser I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 50% bonus to Torpedo velocity
+
+ def test_static_maxVelocity_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Juggernaut Torpedo"
+ ship_other = "Tempest"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxVelocity_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Bane Rage Torpedo"
+ ship_other = "Tempest"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 50% bonus to Cruise Missile velocity
+
+ def test_static_maxVelocity_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Devastator Cruise Missile"
+ ship_other = "Tempest"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxVelocity_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Cataclysm Precision Cruise Missile"
+ ship_other = "Tempest"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxVelocity_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Hunter F.O.F. Cruise Missile I"
+ ship_other = "Tempest"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxVelocity_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Scourge Heavy Missile"
+ ship_other = "Tempest"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/raven.py b/eos/tests/typeTests/ships/battleships/raven.py
new file mode 100755
index 000000000..6518936c3
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/raven.py
@@ -0,0 +1,153 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Raven"
+
+ # Caldari Battleship Skill Bonus:
+ # 5% bonus to Siege Launcher Rate Of Fire per level
+
+ def test_caldariBattleship_speed_moduleLauncherMissileSiege(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Siege Missile Launcher I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Battleship Skill Bonus:
+ # 5% bonus to Cruise Launcher Rate Of Fire per level
+
+ def test_caldariBattleship_speed_moduleLauncherMissileCruise(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Cruise Missile Launcher I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_speed_moduleLauncherMissileOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Assault Missile Launcher I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Battleship Skill Bonus:
+ # 10% bonus to Torpedo Velocity per level
+
+ def test_caldariBattleship_maxVelocity_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Juggernaut Torpedo"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_maxVelocity_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Inferno Javelin Torpedo"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Battleship Skill Bonus:
+ # 10% bonus to Cruise Missile Velocity per level
+
+ def test_caldariBattleship_maxVelocity_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Cataclysm Cruise Missile"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_maxVelocity_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Devastator Precision Cruise Missile"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_maxVelocity_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Phoenix F.O.F. Cruise Missile I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_maxVelocity_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Gremlin Rocket"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/ravenNavyIssue.py b/eos/tests/typeTests/ships/battleships/ravenNavyIssue.py
new file mode 100755
index 000000000..37e9c781d
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/ravenNavyIssue.py
@@ -0,0 +1,153 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Raven Navy Issue"
+
+ # Caldari Battleship Skill Bonus:
+ # 5% bonus to Siege Missile Launcher Rate Of Fire per level of skill
+
+ def test_caldariBattleship_speed_moduleLauncherMissileSiege(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Siege Missile Launcher I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Battleship Skill Bonus:
+ # 5% bonus to Cruise Missile Launcher Rate Of Fire per level of skill
+
+ def test_caldariBattleship_speed_moduleLauncherMissileCruise(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Cruise Missile Launcher I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_speed_moduleLauncherMissileOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Missile Launcher I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Battleship Skill Bonus:
+ # 10% bonus to Torpedo Velocity per level of skill
+
+ def test_caldariBattleship_maxVelocity_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Bane Torpedo"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_maxVelocity_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Mjolnir Rage Torpedo"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Battleship Skill Bonus:
+ # 10% bonus to Cruise Missile Velocity per level of skill
+
+ def test_caldariBattleship_maxVelocity_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Devastator Cruise Missile"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_maxVelocity_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Paradise Fury Cruise Missile"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_maxVelocity_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Hunter F.O.F. Cruise Missile I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_maxVelocity_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Terror Assault Missile"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/ravenStateIssue.py b/eos/tests/typeTests/ships/battleships/ravenStateIssue.py
new file mode 100755
index 000000000..b8acc5bf2
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/ravenStateIssue.py
@@ -0,0 +1,153 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Raven State Issue"
+
+ # Caldari Battleship Skill Bonus:
+ # 5% bonus to Siege Missile Launcher Rate Of Fire per level of skill
+
+ def test_caldariBattleship_speed_moduleLauncherMissileSiege(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Siege Missile Launcher I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Battleship Skill Bonus:
+ # 5% bonus to Cruise Missile Launcher Rate Of Fire per level of skill
+
+ def test_caldariBattleship_speed_moduleLauncherMissileCruise(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Cruise Missile Launcher I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_speed_moduleLauncherMissileOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Rocket Launcher I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Battleship Skill Bonus:
+ # 10% bonus to Torpedo Velocity per level of skill
+
+ def test_caldariBattleship_maxVelocity_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Inferno Torpedo"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_maxVelocity_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Juggernaut Javelin Torpedo"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Battleship Skill Bonus:
+ # 10% bonus to Cruise Missile Velocity per level of skill
+
+ def test_caldariBattleship_maxVelocity_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Wrath Cruise Missile"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_maxVelocity_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Devastator Fury Cruise Missile"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_maxVelocity_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Dragon F.O.F. Cruise Missile I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_maxVelocity_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Thunderbolt Heavy Missile"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/rokh.py b/eos/tests/typeTests/ships/battleships/rokh.py
new file mode 100755
index 000000000..9c24fa7ca
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/rokh.py
@@ -0,0 +1,158 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Rokh"
+
+ # Caldari Battleship Skill Bonus:
+ # 10% large hybrid optimal range per level
+
+ def test_caldariBattleship_maxRange_moduleHybridWeaponLarge(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "425mm Railgun I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_maxRange_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "75mm Gatling Rail I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Battleship Skill Bonus:
+ # 5% shield resistance per level
+
+ def test_caldariBattleship_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_shieldEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_shieldExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_shieldKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_shieldThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/scorpion.py b/eos/tests/typeTests/ships/battleships/scorpion.py
new file mode 100755
index 000000000..f00b3b730
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/scorpion.py
@@ -0,0 +1,228 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Scorpion"
+
+ # Caldari Battleship Skill Bonus:
+ # 15% bonus to ECM Target Jammer strength per level
+
+ def test_caldariBattleship_scanGravimetricStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrengthBonus"
+ item = "ECM - Multispectral Jammer I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_scanGravimetricStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_scanLadarStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanLadarStrengthBonus"
+ item = "ECM - Phase Inverter I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_scanLadarStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanLadarStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_scanMagnetometricStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrengthBonus"
+ item = "ECM - Spatial Destabilizer I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_scanMagnetometricStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_scanRadarStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanRadarStrengthBonus"
+ item = "ECM - White Noise Generator I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_scanRadarStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanRadarStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Battleship Skill Bonus:
+ # 20% bonus to ECM Target Jammer optimal range per level
+
+ def test_caldariBattleship_maxRange_moduleEcm(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "ECM - Ion Field Projector I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "ECCM Projector I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Battleship Skill Bonus:
+ # 20% bonus to ECM Target Jammer falloff range per level
+
+ def test_caldariBattleship_falloff_moduleEcm(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "ECM - Multispectral Jammer I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_falloff_moduleOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "ECCM Projector I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Battleship Skill Bonus:
+ # 20% Bonus to ECM Burst Range per level
+
+ def test_caldariBattleship_ecmBurstRange_moduleEcmBurst(self):
+ self.buildTested = 0
+ attr = "ecmBurstRange"
+ item = "ECM Burst I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_falloff_moduleEcmBurst(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "ECM Burst I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/scorpionIshukoneWatch.py b/eos/tests/typeTests/ships/battleships/scorpionIshukoneWatch.py
new file mode 100755
index 000000000..0cae52344
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/scorpionIshukoneWatch.py
@@ -0,0 +1,228 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Scorpion Ishukone Watch"
+
+ # Caldari Battleship Skill Bonus:
+ # 15% bonus to ECM Target Jammer strength per level
+
+ def test_caldariBattleship_scanGravimetricStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrengthBonus"
+ item = "ECM - White Noise Generator I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_scanGravimetricStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_scanLadarStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanLadarStrengthBonus"
+ item = "ECM - Phase Inverter I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_scanLadarStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanLadarStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_scanMagnetometricStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrengthBonus"
+ item = "ECM - Ion Field Projector I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_scanMagnetometricStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_scanRadarStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanRadarStrengthBonus"
+ item = "ECM - Multispectral Jammer I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_scanRadarStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanRadarStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Battleship Skill Bonus:
+ # 20% bonus to ECM Target Jammer optimal range per level
+
+ def test_caldariBattleship_maxRange_moduleEcm(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "ECM - Phase Inverter I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "ECCM Projector I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Battleship Skill Bonus:
+ # 20% bonus to ECM Target Jammer falloff range per level
+
+ def test_caldariBattleship_falloff_moduleEcm(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "ECM - Multispectral Jammer I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_falloff_moduleOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "ECCM Projector I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Battleship Skill Bonus:
+ # 20% Bonus to ECM Burst Range per level
+
+ def test_caldariBattleship_ecmBurstRange_moduleEcmBurst(self):
+ self.buildTested = 0
+ attr = "ecmBurstRange"
+ item = "ECM Burst I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_falloff_moduleEcmBurst(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "ECM Burst I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/scorpionNavyIssue.py b/eos/tests/typeTests/ships/battleships/scorpionNavyIssue.py
new file mode 100755
index 000000000..cf7863a00
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/scorpionNavyIssue.py
@@ -0,0 +1,176 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Scorpion Navy Issue"
+
+ # Caldari Battleship Skill Bonus:
+ # 5% bonus to Siege Launcher Rate Of Fire per level
+
+ def test_caldariBattleship_speed_moduleLauncherMissileSiege(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Siege Missile Launcher I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Battleship Skill Bonus:
+ # 5% bonus to Cruise Launcher Rate Of Fire per level
+
+ def test_caldariBattleship_speed_moduleLauncherMissileCruise(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Cruise Missile Launcher I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_speed_moduleLauncherMissileOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Assault Missile Launcher I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Battleship Skill Bonus:
+ # 5% shield resistance per level
+
+ def test_caldariBattleship_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_shieldEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_shieldExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_shieldKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_shieldThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/tempest.py b/eos/tests/typeTests/ships/battleships/tempest.py
new file mode 100755
index 000000000..b70456b0a
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/tempest.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Tempest"
+
+ # Minmatar Battleship Skill Bonus:
+ # 5% bonus to Large Projectile Turret Rate of Fire per level
+
+ def test_minmatarBattleship_speed_moduleProjectileWeaponLarge(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "1400mm Howitzer Artillery I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarBattleship_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Dual 180mm AutoCannon I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Battleship Skill Bonus:
+ # 5% bonus to Large Projectile Turret damage per level
+
+ def test_minmatarBattleship_damageMultiplier_moduleProjectileWeaponLarge(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "800mm Repeating Artillery I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarBattleship_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "250mm Light Artillery Cannon I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/tempestFleetIssue.py b/eos/tests/typeTests/ships/battleships/tempestFleetIssue.py
new file mode 100755
index 000000000..dce4082b4
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/tempestFleetIssue.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Tempest Fleet Issue"
+
+ # Minmatar Battleship Skill Bonus:
+ # 5% bonus to Large Projectile Turret rate of fire per level
+
+ def test_minmatarBattleship_speed_moduleProjectileWeaponLarge(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Dual 425mm AutoCannon I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarBattleship_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "200mm AutoCannon I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Battleship Skill Bonus:
+ # 5% bonus to Large Projectile Turret damage per level
+
+ def test_minmatarBattleship_damageMultiplier_moduleProjectileWeaponLarge(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual 650mm Repeating Artillery I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarBattleship_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "720mm Howitzer Artillery I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/tempestTribalIssue.py b/eos/tests/typeTests/ships/battleships/tempestTribalIssue.py
new file mode 100755
index 000000000..6a56ca80e
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/tempestTribalIssue.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Tempest Tribal Issue"
+
+ # Minmatar Battleship Skill Bonus:
+ # 5% bonus to Large Projectile Turret rate of fire per level
+
+ def test_minmatarBattleship_speed_moduleProjectileWeaponLarge(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "1200mm Artillery Cannon I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarBattleship_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "150mm Light AutoCannon I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Battleship Skill Bonus:
+ # 5% bonus to Large Projectile Turret damage per level
+
+ def test_minmatarBattleship_damageMultiplier_moduleProjectileWeaponLarge(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual 425mm AutoCannon I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarBattleship_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "425mm AutoCannon I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/typhoon.py b/eos/tests/typeTests/ships/battleships/typhoon.py
new file mode 100755
index 000000000..a51554f41
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/typhoon.py
@@ -0,0 +1,90 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Typhoon"
+
+ # Battleship Skill Bonus:
+ # 5% bonus to Large Projectile Turret Rate of Fire per level
+
+ def test_minmatarBattleship_speed_moduleProjectileWeaponLarge(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "800mm Repeating Artillery I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarBattleship_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "650mm Artillery Cannon I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Battleship Skill Bonus:
+ # 5% bonus to Siege missile launcher Rate of Fire per level
+
+ def test_minmatarBattleship_speed_moduleLauncherMissileSiege(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Siege Missile Launcher I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Battleship Skill Bonus:
+ # 5% bonus to Cruise missile launcher Rate of Fire per level
+
+ def test_minmatarBattleship_speed_moduleLauncherMissileCruise(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Cruise Missile Launcher I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarBattleship_speed_moduleLauncherMissileOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Missile Launcher I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/typhoonFleetIssue.py b/eos/tests/typeTests/ships/battleships/typhoonFleetIssue.py
new file mode 100755
index 000000000..bfff13127
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/typhoonFleetIssue.py
@@ -0,0 +1,90 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Typhoon Fleet Issue"
+
+ # Minmatar Battleship Skill Bonus:
+ # 5% bonus to Large Projectile Turret Rate of Fire per level
+
+ def test_minmatarBattleship_speed_moduleProjectileWeaponLarge(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Dual 425mm AutoCannon I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarBattleship_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "125mm Gatling AutoCannon I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Battleship Skill Bonus:
+ # 5% bonus to Siege missile launcher Rate of Fire per level
+
+ def test_minmatarBattleship_speed_moduleLauncherMissileSiege(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Siege Missile Launcher I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Battleship Skill Bonus:
+ # 5% bonus to Cruise missile launcher Rate of Fire per level
+
+ def test_minmatarBattleship_speed_moduleLauncherMissileCruise(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Cruise Missile Launcher I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarBattleship_speed_moduleLauncherMissileOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Assault Missile Launcher I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/battleships/vindicator.py b/eos/tests/typeTests/ships/battleships/vindicator.py
new file mode 100755
index 000000000..501f721a5
--- /dev/null
+++ b/eos/tests/typeTests/ships/battleships/vindicator.py
@@ -0,0 +1,116 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Vindicator"
+
+ # Gallente Battleship Skill Bonus:
+ # 7.5% bonus to Large Hybrid Turret tracking speed per level
+
+ def test_gallenteBattleship_trackingSpeed_moduleHybridWeaponLarge(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Electron Blaster Cannon I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_trackingSpeed_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "150mm Railgun I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Battleship Skill Bonus:
+ # 10% bonus to the velocity factor of stasis webifiers per level
+
+ def test_minmatarBattleship_speedFactor_moduleStasisWeb(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "Stasis Webifier I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarBattleship_speedFactor_moduleStasisCivilian(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "Civilian Stasis Webifier"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarBattleship_speedFactor_moduleOther(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "100MN Afterburner I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 37.5% bonus to Large Hybrid Turret damage
+
+ def test_static_damageMultiplier_moduleHybridWeaponLarge(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Neutron Blaster Cannon I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.375
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Light Neutron Blaster I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/blackOps/__init__.py b/eos/tests/typeTests/ships/blackOps/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/blackOps/panther.py b/eos/tests/typeTests/ships/blackOps/panther.py
new file mode 100755
index 000000000..c653de8e3
--- /dev/null
+++ b/eos/tests/typeTests/ships/blackOps/panther.py
@@ -0,0 +1,163 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Panther"
+
+ # Minmatar Battleship Skill Bonus:
+ # 5% bonus to large projectile turret rate of fire per level
+
+ def test_minmatarBattleship_speed_moduleProjectileWeaponLarge(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Dual 650mm Repeating Artillery I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarBattleship_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "425mm AutoCannon I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Battleship Skill Bonus:
+ # 5% bonus to large projectile turret damage per level
+
+ def test_minmatarBattleship_damageMultiplier_moduleProjectileWeaponLarge(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "1400mm Howitzer Artillery I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarBattleship_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "720mm Howitzer Artillery I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Black Ops Skill Bonus:
+ # 5% bonus to velocity per level
+
+ def test_blackOps_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Black Ops"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Black Ops Skill Bonus:
+ # Multiplies the cloaked velocity by 125% per level
+
+ def test_blackOps_maxVelocity_shipCloakActive(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Black Ops"
+ miscitm = ("Prototype Cloaking Device I", "active")
+ iLvl = 1
+ iIngame = 1.25
+ fLvl = 4
+ fIngame = 5.0
+ iEosNoCloak = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ iEosCloak = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship, miscitms=miscitm)
+ fEosNoCloak = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ fEosCloak = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship, miscitms=miscitm)
+ dIngame = fIngame / iIngame
+ # Also consider speed factor w/o cloak as other effect affects speed
+ dEos = (iEosNoCloak / fEosNoCloak) * (fEosCloak / iEosCloak)
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_blackOps_maxVelocity_shipCloakOnline(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Black Ops"
+ miscitm = ("Prototype Cloaking Device I", "online")
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEosNoCloak = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ iEosCloak = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship, miscitms=miscitm)
+ fEosNoCloak = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ fEosCloak = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship, miscitms=miscitm)
+ dIngame = fIngame / iIngame
+ # Also consider speed factor w/o cloak as other effect affects speed
+ dEos = (iEosNoCloak / fEosNoCloak) * (fEosCloak / iEosCloak)
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 5 seconds cloak reactivation delay
+
+ def test_static_moduleReactivationDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 5000.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ iItem = "Prototype Cloaking Device I"
+ iIngame = 5000.0
+ fItem = "Cynosural Field Generator I"
+ fIngame = 30000.0
+ iEos = self.getItemAttr(attr, iItem, ship=self.ship)
+ fEos = self.getItemAttr(attr, fItem, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Note:
+ # No targeting delay after decloaking
+
+ def test_static_cloakingTargetingDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cloakingTargetingDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 0.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
diff --git a/eos/tests/typeTests/ships/blackOps/redeemer.py b/eos/tests/typeTests/ships/blackOps/redeemer.py
new file mode 100755
index 000000000..e7bb63c41
--- /dev/null
+++ b/eos/tests/typeTests/ships/blackOps/redeemer.py
@@ -0,0 +1,173 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Redeemer"
+
+ # Amarr Battleship Skill Bonus:
+ # 10% reduction in large energy turret capacitor use per level
+
+ def test_amarrBattleship_capacitorNeed_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Dual Heavy Pulse Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrBattleship_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Dual Light Pulse Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Battleship Skill Bonus:
+ # 5% bonus to large energy turret rate of fire per level
+
+ def test_amarrBattleship_speed_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Mega Beam Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrBattleship_speed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Medium Beam Laser I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Black Ops Skill Bonus:
+ # 7.5% bonus to large energy turret tracking per level
+
+ def test_blackOps_trackingSpeed_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Dual Heavy Pulse Laser I"
+ skill = "Black Ops"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_blackOps_trackingSpeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Medium Pulse Laser I"
+ skill = "Black Ops"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Black Ops Skill Bonus:
+ # Multiplies the cloaked velocity by 125% per level
+
+ def test_blackOps_maxVelocity_shipCloakActive(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Black Ops"
+ miscitm = ("Prototype Cloaking Device I", "active")
+ iLvl = 1
+ iIngame = 1.25
+ fLvl = 4
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship, miscitms=miscitm)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship, miscitms=miscitm)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_blackOps_maxVelocity_shipCloakOnline(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Black Ops"
+ miscitm = ("Prototype Cloaking Device I", "online")
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship, miscitms=miscitm)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship, miscitms=miscitm)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 5 seconds cloak reactivation delay
+
+ def test_static_moduleReactivationDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 5000.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ iItem = "Prototype Cloaking Device I"
+ iIngame = 5000.0
+ fItem = "Cynosural Field Generator I"
+ fIngame = 30000.0
+ iEos = self.getItemAttr(attr, iItem, ship=self.ship)
+ fEos = self.getItemAttr(attr, fItem, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Note:
+ # No targeting delay after decloaking
+
+ def test_static_cloakingTargetingDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cloakingTargetingDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 0.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
diff --git a/eos/tests/typeTests/ships/blackOps/sin.py b/eos/tests/typeTests/ships/blackOps/sin.py
new file mode 100755
index 000000000..1e146618f
--- /dev/null
+++ b/eos/tests/typeTests/ships/blackOps/sin.py
@@ -0,0 +1,268 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Sin"
+
+ # Gallente Battleship Skill Bonus:
+ # 5% bonus to large hybrid turret damage per skill level
+
+ def test_gallenteBattleship_damageMultiplier_moduleHybridWeaponLarge(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Ion Blaster Cannon I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Ion Blaster I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Battleship Skill Bonus:
+ # 10% bonus to drone hit points per skill level
+
+ def test_gallenteBattleship_hp_droneCombat(self):
+ self.buildTested = 0
+ item = "Praetor I"
+ skill = "Gallente Battleship"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_hp_droneLogistic(self):
+ self.buildTested = 0
+ item = "Light Armor Maintenance Bot I"
+ skill = "Gallente Battleship"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_hp_droneEwar(self):
+ self.buildTested = 0
+ item = "Infiltrator TD-600"
+ skill = "Gallente Battleship"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_hp_droneCapDrain(self):
+ self.buildTested = 0
+ item = "Infiltrator EV-600"
+ skill = "Gallente Battleship"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_hp_droneWeb(self):
+ self.buildTested = 0
+ item = "Berserker SW-900"
+ skill = "Gallente Battleship"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_hp_droneMining(self):
+ self.buildTested = 0
+ item = "Mining Drone I"
+ skill = "Gallente Battleship"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Battleship Skill Bonus:
+ # 10% bonus to drone damage per skill level
+
+ def test_gallenteBattleship_damageMultiplier_droneCombat(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Valkyrie I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_damageMultiplier_other(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Medium Beam Laser I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Black Ops Skill Bonus:
+ # 5% bonus to agility per level
+
+ def test_blackOps_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Black Ops"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Black Ops Skill Bonus:
+ # Multiplies the cloaked velocity by 125% per level
+
+ def test_blackOps_maxVelocity_shipCloakActive(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Black Ops"
+ miscitm = ("Prototype Cloaking Device I", "active")
+ iLvl = 1
+ iIngame = 1.25
+ fLvl = 4
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship, miscitms=miscitm)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship, miscitms=miscitm)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_blackOps_maxVelocity_shipCloakOnline(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Black Ops"
+ miscitm = ("Prototype Cloaking Device I", "online")
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship, miscitms=miscitm)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship, miscitms=miscitm)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 5 seconds cloak reactivation delay
+
+ def test_static_moduleReactivationDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 5000.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ iItem = "Prototype Cloaking Device I"
+ iIngame = 5000.0
+ fItem = "Cynosural Field Generator I"
+ fIngame = 30000.0
+ iEos = self.getItemAttr(attr, iItem, ship=self.ship)
+ fEos = self.getItemAttr(attr, fItem, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Note:
+ # No targeting delay after decloaking
+
+ def test_static_cloakingTargetingDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cloakingTargetingDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 0.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
diff --git a/eos/tests/typeTests/ships/blackOps/widow.py b/eos/tests/typeTests/ships/blackOps/widow.py
new file mode 100755
index 000000000..b89e4a540
--- /dev/null
+++ b/eos/tests/typeTests/ships/blackOps/widow.py
@@ -0,0 +1,404 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Widow"
+
+ # Caldari Battleship Skill Bonus:
+ # 5% bonus to siege missile launcher rate of fire per level
+
+ def test_caldariBattleship_speed_moduleLauncherMissileSiege(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Siege Missile Launcher I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Battleship Skill Bonus:
+ # 5% bonus to cruise missile launcher rate of fire per level
+
+ def test_caldariBattleship_speed_moduleLauncherMissileCruise(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Cruise Missile Launcher I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_speed_moduleLauncherMissileOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Rocket Launcher I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Battleship Skill Bonus:
+ # 10% bonus to torpedo velocity per level
+
+ def test_caldariBattleship_maxVelocity_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Inferno Torpedo"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_maxVelocity_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Juggernaut Javelin Torpedo"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Battleship Skill Bonus:
+ # 10% bonus to cruise missile velocity per level
+
+ def test_caldariBattleship_maxVelocity_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Wrath Cruise Missile"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_maxVelocity_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Wrath Fury Cruise Missile"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_maxVelocity_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Dragon F.O.F. Cruise Missile I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_maxVelocity_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Sabretooth Light Missile"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Black Ops Skill Bonus:
+ # 30% bonus to ECM target jammer strength per level
+
+ def test_blackOps_scanGravimetricStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrengthBonus"
+ item = "ECM - Spatial Destabilizer I"
+ skill = "Black Ops"
+ iLvl = 1
+ iIngame = 1.3
+ fLvl = 4
+ fIngame = 2.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_blackOps_scanGravimetricStrengthBonus_moduleEcmBurst(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Black Ops"
+ iLvl = 1
+ iIngame = 1.3
+ fLvl = 4
+ fIngame = 2.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_blackOps_scanGravimetricStrengthBonus_other(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrengthBonus"
+ item = "Vespa EC-600"
+ skill = "Black Ops"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_blackOps_scanLadarStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanLadarStrengthBonus"
+ item = "ECM - Phase Inverter I"
+ skill = "Black Ops"
+ iLvl = 1
+ iIngame = 1.3
+ fLvl = 4
+ fIngame = 2.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_blackOps_scanLadarStrengthBonus_moduleEcmBurst(self):
+ self.buildTested = 0
+ attr = "scanLadarStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Black Ops"
+ iLvl = 1
+ iIngame = 1.3
+ fLvl = 4
+ fIngame = 2.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_blackOps_scanLadarStrengthBonus_other(self):
+ self.buildTested = 0
+ attr = "scanLadarStrengthBonus"
+ item = "Vespa EC-600"
+ skill = "Black Ops"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_blackOps_scanMagnetometricStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrengthBonus"
+ item = "ECM - Multispectral Jammer I"
+ skill = "Black Ops"
+ iLvl = 1
+ iIngame = 1.3
+ fLvl = 4
+ fIngame = 2.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_blackOps_scanMagnetometricStrengthBonus_moduleEcmBurst(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Black Ops"
+ iLvl = 1
+ iIngame = 1.3
+ fLvl = 4
+ fIngame = 2.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_blackOps_scanMagnetometricStrengthBonus_other(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrengthBonus"
+ item = "Vespa EC-600"
+ skill = "Black Ops"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_blackOps_scanRadarStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanRadarStrengthBonus"
+ item = "ECM - Ion Field Projector I"
+ skill = "Black Ops"
+ iLvl = 1
+ iIngame = 1.3
+ fLvl = 4
+ fIngame = 2.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_blackOps_scanRadarStrengthBonus_moduleEcmBurst(self):
+ self.buildTested = 0
+ attr = "scanRadarStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Black Ops"
+ iLvl = 1
+ iIngame = 1.3
+ fLvl = 4
+ fIngame = 2.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_blackOps_scanRadarStrengthBonus_other(self):
+ self.buildTested = 0
+ attr = "scanRadarStrengthBonus"
+ item = "Vespa EC-600"
+ skill = "Black Ops"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Black Ops Skill Bonus:
+ # Multiplies the cloaked velocity by 125% per level
+
+ def test_blackOps_maxVelocity_shipCloakActive(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Black Ops"
+ miscitm = ("Prototype Cloaking Device I", "active")
+ iLvl = 1
+ iIngame = 1.25
+ fLvl = 4
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship, miscitms=miscitm)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship, miscitms=miscitm)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_blackOps_maxVelocity_shipCloakOnline(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Black Ops"
+ miscitm = ("Prototype Cloaking Device I", "online")
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship, miscitms=miscitm)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship, miscitms=miscitm)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 5 seconds cloak reactivation delay
+
+ def test_static_moduleReactivationDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 5000.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ iItem = "Prototype Cloaking Device I"
+ iIngame = 5000.0
+ fItem = "Cynosural Field Generator I"
+ fIngame = 30000.0
+ iEos = self.getItemAttr(attr, iItem, ship=self.ship)
+ fEos = self.getItemAttr(attr, fItem, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Note:
+ # No targeting delay after decloaking
+
+ def test_static_cloakingTargetingDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cloakingTargetingDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 0.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
diff --git a/eos/tests/typeTests/ships/capitalIndustrialShips/__init__.py b/eos/tests/typeTests/ships/capitalIndustrialShips/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/capitalIndustrialShips/rorqual.py b/eos/tests/typeTests/ships/capitalIndustrialShips/rorqual.py
new file mode 100755
index 000000000..e418479b0
--- /dev/null
+++ b/eos/tests/typeTests/ships/capitalIndustrialShips/rorqual.py
@@ -0,0 +1,386 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Rorqual"
+
+ # Capital Industrial Ships skill bonuses:
+ # -5% reduction in fuel consumption for industrial cores per level
+
+ def test_capitalIndustrialShips_consumptionQuantity_moduleSiegeModuleSkillrqIndustrialReconfiguration(self):
+ self.buildTested = 0
+ attr = "consumptionQuantity"
+ item = "Industrial Core I"
+ skill = "Capital Industrial Ships"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capitalIndustrialShips_consumptionQuantity_moduleOther(self):
+ self.buildTested = 0
+ attr = "consumptionQuantity"
+ item = "Clone Vat Bay I"
+ skill = "Capital Industrial Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Capital Industrial Ships skill bonuses:
+ # 10% bonus to effectiveness of mining foreman gang links per level when in deployed mode
+
+ def test_capitalIndustrialShips_commandBonus_moduleGangCoordinatorSkillrqMiningDirectorSiegeActive(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Mining Foreman Link - Laser Optimization I"
+ skill = "Capital Industrial Ships"
+ miscitm = ("Industrial Core I", "active")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship, miscitms=miscitm)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship, miscitms=miscitm)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capitalIndustrialShips_commandBonus_moduleGangCoordinatorSkillrqMiningDirectorSiegeOnline(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Mining Foreman Link - Harvester Capacitor Efficiency I"
+ skill = "Capital Industrial Ships"
+ miscitm = ("Industrial Core I", "online")
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship, miscitms=miscitm)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship, miscitms=miscitm)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capitalIndustrialShips_commandBonus_moduleGangCoordinatorSkillrqOtherSiegeActive(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Armored Warfare Link - Damage Control I"
+ skill = "Capital Industrial Ships"
+ miscitm = ("Industrial Core I", "active")
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship, miscitms=miscitm)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship, miscitms=miscitm)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Capital Industrial Ships skill bonuses:
+ # 50% bonus to the range of Capital Shield Transporters per level
+
+ def test_capitalIndustrialShips_shieldTransferRange_moduleShieldTransporterCapital(self):
+ self.buildTested = 0
+ attr = "shieldTransferRange"
+ item = "Capital Shield Transporter I"
+ skill = "Capital Industrial Ships"
+ iLvl = 1
+ iIngame = 1.5
+ fLvl = 4
+ fIngame = 3.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capitalIndustrialShips_shieldTransferRange_moduleShieldTransporter(self):
+ self.buildTested = 0
+ attr = "shieldTransferRange"
+ item = "Large Shield Transporter I"
+ skill = "Capital Industrial Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Capital Industrial Ships skill bonuses:
+ # 20% bonus to drone hitpoints per level
+
+ def test_capitalIndustrialShips_hp_droneCombat(self):
+ self.buildTested = 0
+ item = "Bouncer I"
+ skill = "Capital Industrial Ships"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capitalIndustrialShips_hp_droneLogistic(self):
+ self.buildTested = 0
+ item = "Heavy Shield Maintenance Bot I"
+ skill = "Capital Industrial Ships"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capitalIndustrialShips_hp_droneEwar(self):
+ self.buildTested = 0
+ item = "Berserker TP-900"
+ skill = "Capital Industrial Ships"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capitalIndustrialShips_hp_droneCapDrain(self):
+ self.buildTested = 0
+ item = "Praetor EV-900"
+ skill = "Capital Industrial Ships"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capitalIndustrialShips_hp_droneWeb(self):
+ self.buildTested = 0
+ item = "Berserker SW-900"
+ skill = "Capital Industrial Ships"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capitalIndustrialShips_hp_droneMining(self):
+ self.buildTested = 0
+ item = "Harvester Mining Drone"
+ skill = "Capital Industrial Ships"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Capital Industrial Ships skill bonuses:
+ # 20% bonus to drone damage per level
+
+ def test_capitalIndustrialShips_damageMultiplier_droneCombat(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Warrior I"
+ skill = "Capital Industrial Ships"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capitalIndustrialShips_damageMultiplier_other(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heat Sink I"
+ skill = "Capital Industrial Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonuses:
+ # 900% bonus to the range of survey scanners
+
+ def test_static_surveyScanRange_moduleSurveyScanner(self):
+ self.buildTested = 0
+ attr = "surveyScanRange"
+ item = "Survey Scanner I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 10.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonuses:
+ # 200% bonus to the range of cargo scanners
+
+ def test_static_cargoScanRange_moduleCargoScanner(self):
+ self.buildTested = 0
+ attr = "cargoScanRange"
+ item = "Cargo Scanner I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 3.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_falloff_moduleCargoScanner(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "Cargo Scanner I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in CPU need for Gang Link modules
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Information Warfare Link - Recon Operation I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Can use 3 Gang Link modules simultaneously.
+
+ def test_static_maxGroupActive_moduleGangCoordinator(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ item = "Siege Warfare Link - Shield Efficiency I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 3.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxGroupActive_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ item = "100MN MicroWarpdrive I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Advanced Spaceship Command Skill Bonus:
+ # 5% Bonus to the agility of ship per skill level
+ # Moved from Advanced Spaceship Command skill tests, not listed as bonus of ship
+
+ def test_advancedSpaceshipCommand_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Advanced Spaceship Command"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/carriers/__init__.py b/eos/tests/typeTests/ships/carriers/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/carriers/archon.py b/eos/tests/typeTests/ships/carriers/archon.py
new file mode 100755
index 000000000..9dc0d268c
--- /dev/null
+++ b/eos/tests/typeTests/ships/carriers/archon.py
@@ -0,0 +1,284 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Archon"
+
+ # Amarr Carrier Skill Bonuses:
+ # 50% bonus to Capital Energy transfer range per level
+
+ def test_amarrCarrier_powerTransferRange_moduleEnergyTransferCapital(self):
+ self.buildTested = 0
+ attr = "powerTransferRange"
+ item = "Capital Energy Transfer Array I"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 1.5
+ fLvl = 4
+ fIngame = 3.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCarrier_powerTransferRange_moduleEnergyTransferOther(self):
+ self.buildTested = 0
+ attr = "powerTransferRange"
+ item = "Large Energy Transfer Array I"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Carrier Skill Bonuses:
+ # 50% bonus to Capital Armor transfer range per level
+
+ def test_amarrCarrier_maxRange_moduleRemoteRepairerCapital(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Capital Remote Armor Repair System I"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 1.5
+ fLvl = 4
+ fIngame = 3.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCarrier_maxRange_moduleRemoteRepairerOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Medium Remote Armor Repair System I"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Carrier Skill Bonuses:
+ # 5% bonus to all Armor resistances per level
+
+ def test_amarrCarrier_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCarrier_armorEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCarrier_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCarrier_armorExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCarrier_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCarrier_armorKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCarrier_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCarrier_armorThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Carrier Skill Bonuses:
+ # Can deploy 1 additional Fighter or Drone per level
+
+ def test_amarrCarrier_maxActiveDrones_ship(self):
+ self.buildTested = 0
+ attr = "maxActiveDrones"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 6.0
+ fLvl = 4
+ fIngame = 9.0
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in CPU need for Warfare Link modules
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Mining Foreman Link - Laser Optimization I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in CPU need for Drone Control Units
+ # Moved from Drone Control Unit module tests, not listed as bonus of ship
+
+ def test_static_cpu_moduleDroneControlUnit(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Drone Control Unit I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 200% bonus to Fighter control range
+
+ def test_static_droneControlRange_ship(self):
+ self.buildTested = 0
+ attr = "droneControlRange"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 3.0
+ iEos = self.getShipAttr(attr, ship=ship_other)
+ fEos = self.getShipAttr(attr, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Advanced Spaceship Command Skill Bonus:
+ # 5% Bonus to the agility of ship per skill level
+ # Moved from Advanced Spaceship Command skill tests, not listed as bonus of ship
+
+ def test_advancedSpaceshipCommand_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Advanced Spaceship Command"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/carriers/chimera.py b/eos/tests/typeTests/ships/carriers/chimera.py
new file mode 100755
index 000000000..11df27faf
--- /dev/null
+++ b/eos/tests/typeTests/ships/carriers/chimera.py
@@ -0,0 +1,284 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Chimera"
+
+ # Caldari Carrier Skill Bonuses:
+ # 50% bonus to Capital Energy transfer range per level
+
+ def test_caldariCarrier_powerTransferRange_moduleEnergyTransferCapital(self):
+ self.buildTested = 0
+ attr = "powerTransferRange"
+ item = "Capital Energy Transfer Array I"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 1.5
+ fLvl = 4
+ fIngame = 3.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCarrier_powerTransferRange_moduleEnergyTransferOther(self):
+ self.buildTested = 0
+ attr = "powerTransferRange"
+ item = "Small Energy Transfer Array I"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Carrier Skill Bonuses:
+ # 50% bonus to Capital Shield transfer range per level
+
+ def test_caldariCarrier_shieldTransferRange_moduleShieldTransporterCapital(self):
+ self.buildTested = 0
+ attr = "shieldTransferRange"
+ item = "Capital Shield Transporter I"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 1.5
+ fLvl = 4
+ fIngame = 3.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCarrier_shieldTransferRange_moduleShieldTransporterOther(self):
+ self.buildTested = 0
+ attr = "shieldTransferRange"
+ item = "Large Shield Transporter I"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Carrier Skill Bonuses:
+ # 5% bonus to all Shield resistances per level
+
+ def test_caldariCarrier_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCarrier_shieldEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCarrier_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCarrier_shieldExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCarrier_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCarrier_shieldKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCarrier_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCarrier_shieldThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Carrier Skill Bonuses:
+ # Can deploy 1 additional Fighter or Drone per level
+
+ def test_caldariCarrier_maxActiveDrones_ship(self):
+ self.buildTested = 0
+ attr = "maxActiveDrones"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 6.0
+ fLvl = 4
+ fIngame = 9.0
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in CPU need for Warfare Link modules
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Siege Warfare Link - Shield Harmonizing I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in CPU need for Drone Control Units
+ # Moved from Drone Control Unit module tests, not listed as bonus of ship
+
+ def test_static_cpu_moduleDroneControlUnit(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Drone Control Unit I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 200% bonus to Fighter control range
+
+ def test_static_droneControlRange_ship(self):
+ self.buildTested = 0
+ attr = "droneControlRange"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 3.0
+ iEos = self.getShipAttr(attr, ship=ship_other)
+ fEos = self.getShipAttr(attr, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Advanced Spaceship Command Skill Bonus:
+ # 5% Bonus to the agility of ship per skill level
+ # Moved from Advanced Spaceship Command skill tests, not listed as bonus of ship
+
+ def test_advancedSpaceshipCommand_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Advanced Spaceship Command"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/carriers/nidhoggur.py b/eos/tests/typeTests/ships/carriers/nidhoggur.py
new file mode 100755
index 000000000..a925a2448
--- /dev/null
+++ b/eos/tests/typeTests/ships/carriers/nidhoggur.py
@@ -0,0 +1,291 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Nidhoggur"
+
+ # Minmatar Carrier Skill Bonuses:
+ # 50% bonus to Capital Shield transfer range per level
+
+ def test_minmatarCarrier_shieldTransferRange_moduleShieldTransporterCapital(self):
+ self.buildTested = 0
+ attr = "shieldTransferRange"
+ item = "Capital Shield Transporter I"
+ skill = "Minmatar Carrier"
+ iLvl = 1
+ iIngame = 1.5
+ fLvl = 4
+ fIngame = 3.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCarrier_shieldTransferRange_moduleShieldTransporterOther(self):
+ self.buildTested = 0
+ attr = "shieldTransferRange"
+ item = "Small Shield Transporter I"
+ skill = "Minmatar Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Carrier Skill Bonuses:
+ # 50% bonus to Capital Armor transfer range per level
+
+ def test_minmatarCarrier_maxRange_moduleRemoteRepairerCapital(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Capital Remote Armor Repair System I"
+ skill = "Minmatar Carrier"
+ iLvl = 1
+ iIngame = 1.5
+ fLvl = 4
+ fIngame = 3.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCarrier_maxRange_moduleRemoteRepairerOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Large Remote Armor Repair System I"
+ skill = "Minmatar Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Carrier Skill Bonuses:
+ # 7.5% bonus to Shield transfer amount per level
+
+ def test_minmatarCarrier_shieldBonus_moduleShieldTransporterCapital(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Capital Shield Transporter I"
+ skill = "Minmatar Carrier"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCarrier_shieldBonus_moduleShieldTransporter(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Large Shield Transporter I"
+ skill = "Minmatar Carrier"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCarrier_shieldBonus_moduleShieldTransporterCivilian(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Civilian Remote Shield Transporter"
+ skill = "Minmatar Carrier"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCarrier_shieldBonus_other(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Medium Shield Maintenance Bot I"
+ skill = "Minmatar Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Carrier Skill Bonuses:
+ # 7.5% bonus to Armor transfer amount per level
+
+ def test_minmatarCarrier_armorDamageAmount_moduleRemoteArmorRepairerCapital(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Capital Remote Armor Repair System I"
+ skill = "Minmatar Carrier"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCarrier_armorDamageAmount_moduleRemoteArmorRepairer(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Large Remote Armor Repair System I"
+ skill = "Minmatar Carrier"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCarrier_armorDamageAmount_moduleRemoteArmorRepairerCivilian(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Civilian Remote Armor Repair System"
+ skill = "Minmatar Carrier"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCarrier_armorDamageAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Large Armor Repairer I"
+ skill = "Minmatar Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Carrier Skill Bonuses:
+ # Can deploy 1 additional Fighter or Drone per level
+
+ def test_minmatarCarrier_maxActiveDrones_ship(self):
+ self.buildTested = 0
+ attr = "maxActiveDrones"
+ skill = "Minmatar Carrier"
+ iLvl = 1
+ iIngame = 6.0
+ fLvl = 4
+ fIngame = 9.0
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in CPU need for Warfare Link modules
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Information Warfare Link - Sensor Integrity I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in CPU need for Drone Control Units
+ # Moved from Drone Control Unit module tests, not listed as bonus of ship
+
+ def test_static_cpu_moduleDroneControlUnit(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Drone Control Unit I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 200% bonus to Fighter control range
+
+ def test_static_droneControlRange_ship(self):
+ self.buildTested = 0
+ attr = "droneControlRange"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 3.0
+ iEos = self.getShipAttr(attr, ship=ship_other)
+ fEos = self.getShipAttr(attr, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Advanced Spaceship Command Skill Bonus:
+ # 5% Bonus to the agility of ship per skill level
+ # Moved from Advanced Spaceship Command skill tests, not listed as bonus of ship
+
+ def test_advancedSpaceshipCommand_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Advanced Spaceship Command"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/carriers/thanatos.py b/eos/tests/typeTests/ships/carriers/thanatos.py
new file mode 100755
index 000000000..171caeb4b
--- /dev/null
+++ b/eos/tests/typeTests/ships/carriers/thanatos.py
@@ -0,0 +1,198 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Thanatos"
+
+ # Gallente Carrier Skill Bonuses:
+ # 50% bonus to Capital Shield transfer range per level
+
+ def test_gallenteCarrier_shieldTransferRange_moduleShieldTransporterCapital(self):
+ self.buildTested = 0
+ attr = "shieldTransferRange"
+ item = "Capital Shield Transporter I"
+ skill = "Gallente Carrier"
+ iLvl = 1
+ iIngame = 1.5
+ fLvl = 4
+ fIngame = 3.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCarrier_shieldTransferRange_moduleShieldTransporterOther(self):
+ self.buildTested = 0
+ attr = "shieldTransferRange"
+ item = "Medium Shield Transporter I"
+ skill = "Gallente Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Carrier Skill Bonuses:
+ # 50% bonus to Capital Armor transfer range per level
+
+ def test_gallenteCarrier_maxRange_moduleRemoteRepairerCapital(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Capital Remote Armor Repair System I"
+ skill = "Gallente Carrier"
+ iLvl = 1
+ iIngame = 1.5
+ fLvl = 4
+ fIngame = 3.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCarrier_maxRange_moduleRemoteRepairerOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Large Remote Armor Repair System I"
+ skill = "Gallente Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Carrier Skill Bonuses:
+ # 5% bonus to deployed Fighters' damage per level
+
+ def test_gallenteCarrier_damageMultiplier_droneFighter(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Firbolg"
+ skill = "Gallente Carrier"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCarrier_damageMultiplier_droneOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Vespa I"
+ skill = "Gallente Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Carrier Skill Bonuses:
+ # Can deploy 1 additional Fighter or Drone per level
+
+ def test_gallenteCarrier_maxActiveDrones_ship(self):
+ self.buildTested = 0
+ attr = "maxActiveDrones"
+ skill = "Gallente Carrier"
+ iLvl = 1
+ iIngame = 6.0
+ fLvl = 4
+ fIngame = 9.0
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in CPU need for Warfare Link modules
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Armored Warfare Link - Passive Defense I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in CPU need for Drone Control Units
+ # Moved from Drone Control Unit module tests, not listed as bonus of ship
+
+ def test_static_cpu_moduleDroneControlUnit(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Drone Control Unit I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 200% bonus to Fighter control range
+
+ def test_static_droneControlRange_ship(self):
+ self.buildTested = 0
+ attr = "droneControlRange"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 3.0
+ iEos = self.getShipAttr(attr, ship=ship_other)
+ fEos = self.getShipAttr(attr, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Advanced Spaceship Command Skill Bonus:
+ # 5% Bonus to the agility of ship per skill level
+ # Moved from Advanced Spaceship Command skill tests, not listed as bonus of ship
+
+ def test_advancedSpaceshipCommand_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Advanced Spaceship Command"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/combatReconShips/__init__.py b/eos/tests/typeTests/ships/combatReconShips/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/combatReconShips/curse.py b/eos/tests/typeTests/ships/combatReconShips/curse.py
new file mode 100755
index 000000000..285ba7da9
--- /dev/null
+++ b/eos/tests/typeTests/ships/combatReconShips/curse.py
@@ -0,0 +1,375 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Curse"
+
+ # Amarr Cruiser Skill Bonus:
+ # 5% bonus to Tracking Disruptor effectiveness per level
+
+ def test_amarrCruiser_maxRangeBonus_moduleTrackingDisruptor(self):
+ self.buildTested = 0
+ attr = "maxRangeBonus"
+ item = "Tracking Disruptor I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_maxRangeBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRangeBonus"
+ item = "Medium Energy Locus Coordinator I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_falloffBonus_moduleTrackingDisruptor(self):
+ self.buildTested = 0
+ attr = "falloffBonus"
+ item = "Tracking Disruptor I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_falloffBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "falloffBonus"
+ item = "Tracking Computer I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_trackingSpeedBonus_moduleTrackingDisruptor(self):
+ self.buildTested = 0
+ attr = "trackingSpeedBonus"
+ item = "Tracking Disruptor I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_trackingSpeedBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeedBonus"
+ item = "Tracking Enhancer I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Cruiser Skill Bonus:
+ # 10% bonus to drone hit points per level
+
+ def test_amarrCruiser_hp_droneCombat(self):
+ self.buildTested = 0
+ item = "Acolyte I"
+ skill = "Amarr Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_hp_droneLogistic(self):
+ self.buildTested = 0
+ item = "Light Armor Maintenance Bot I"
+ skill = "Amarr Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_hp_droneEwar(self):
+ self.buildTested = 0
+ item = "Vespa EC-600"
+ skill = "Amarr Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_hp_droneCapDrain(self):
+ self.buildTested = 0
+ item = "Acolyte EV-300"
+ skill = "Amarr Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_hp_droneWeb(self):
+ self.buildTested = 0
+ item = "Berserker SW-900"
+ skill = "Amarr Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_hp_droneMining(self):
+ self.buildTested = 0
+ item = "Mining Drone I"
+ skill = "Amarr Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Cruiser Skill Bonus:
+ # 10% bonus to drone damage per level
+
+ def test_amarrCruiser_damageMultiplier_droneCombat(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Garde I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_damageMultiplier_other(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "200mm AutoCannon I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Recon Ships Skill Bonus:
+ # 40% bonus to Energy Vampire range per level
+
+ def test_reconShips_powerTransferRange_moduleEnergyVampire(self):
+ self.buildTested = 0
+ attr = "powerTransferRange"
+ item = "Small Nosferatu I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.4
+ fLvl = 4
+ fIngame = 2.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_powerTransferRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "powerTransferRange"
+ item = "Medium Energy Transfer Array I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Recon Ships Skill Bonus:
+ # 40% bonus to Energy Neutralizer range per level
+
+ def test_reconShips_energyDestabilizationRange_moduleEnergyDestabilizer(self):
+ self.buildTested = 0
+ attr = "energyDestabilizationRange"
+ item = "Heavy Energy Neutralizer I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.4
+ fLvl = 4
+ fIngame = 2.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_energyDestabilizationRange_other(self):
+ self.buildTested = 0
+ attr = "energyDestabilizationRange"
+ item = "Praetor EV-900"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Recon Ships Skill Bonus:
+ # 20% bonus to Energy Vampire transfer amount per level
+
+ def test_reconShips_powerTransferAmount_moduleEnergyVampire(self):
+ self.buildTested = 0
+ attr = "powerTransferAmount"
+ item = "Medium Nosferatu I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_powerTransferAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "powerTransferAmount"
+ item = "Small Energy Transfer Array I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Recon Ships Skill Bonus:
+ # 20% bonus to Energy Neutralizer transfer amount per level
+
+ def test_reconShips_energyDestabilizationAmount_moduleEnergyDestabilizer(self):
+ self.buildTested = 0
+ attr = "energyDestabilizationAmount"
+ item = "Medium Energy Neutralizer I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_energyDestabilizationAmount_other(self):
+ self.buildTested = 0
+ attr = "energyDestabilizationAmount"
+ item = "Infiltrator EV-600"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/combatReconShips/huginn.py b/eos/tests/typeTests/ships/combatReconShips/huginn.py
new file mode 100755
index 000000000..23d008dcc
--- /dev/null
+++ b/eos/tests/typeTests/ships/combatReconShips/huginn.py
@@ -0,0 +1,189 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Huginn"
+
+ # Minmatar Cruiser Skill Bonus:
+ # 5% bonus to Medium Projectile Turret rate of fire per level
+
+ def test_minmatarCruiser_speed_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "720mm Howitzer Artillery I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_speed_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "200mm AutoCannon I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Cruiser Skill Bonus:
+ # 7.5% bonus to target painter effectiveness per level
+
+ def test_minmatarCruiser_signatureRadiusBonus_moduleTargetPainter(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "Target Painter I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_signatureRadiusBonus_other(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "Valkyrie TP-600"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Recon Ships Skill Bonus:
+ # 60% bonus to stasis webifier range per level
+
+ def test_reconShips_maxRange_moduleStasisWeb(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Stasis Webifier I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.6
+ fLvl = 4
+ fIngame = 3.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_maxRange_moduleStasisWebCivilian(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Civilian Stasis Webifier"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.6
+ fLvl = 4
+ fIngame = 3.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Warp Disruptor I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Recon Ships Skill Bonus:
+ # 5% bonus to Assault Missile Launcher rate of fire per level
+
+ def test_reconShips_speed_moduleLauncherMissileAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Assault Missile Launcher I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Recon Ships Skill Bonus:
+ # 5% bonus to heavy assault missile launcher rate of fire per level
+
+ def test_reconShips_speed_moduleLauncherMissileHeavyAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Assault Missile Launcher I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Recon Ships Skill Bonus:
+ # 5% bonus to Heavy Missile Launcher rate of fire per level
+
+ def test_reconShips_speed_moduleLauncherMissileHeavy(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Missile Launcher I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_speed_moduleLauncherMissileOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Rocket Launcher I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/combatReconShips/lachesis.py b/eos/tests/typeTests/ships/combatReconShips/lachesis.py
new file mode 100755
index 000000000..833aff522
--- /dev/null
+++ b/eos/tests/typeTests/ships/combatReconShips/lachesis.py
@@ -0,0 +1,201 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Lachesis"
+
+ # Gallente Cruiser Skill Bonus:
+ # 5% bonus to Medium Hybrid Turret damage per level
+
+ def test_gallenteCruiser_damageMultiplier_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "200mm Railgun I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Light Neutron Blaster I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Cruiser Skill Bonus:
+ # 5% bonus to Remote Sensor Dampener effectiveness per level
+
+ def test_gallenteCruiser_maxTargetRangeBonus_moduleRemoteSensorDamper(self):
+ self.buildTested = 0
+ attr = "maxTargetRangeBonus"
+ item = "Remote Sensor Dampener I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_maxTargetRangeBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxTargetRangeBonus"
+ item = "Remote Sensor Booster I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_scanResolutionBonus_moduleRemoteSensorDamper(self):
+ self.buildTested = 0
+ attr = "scanResolutionBonus"
+ item = "Remote Sensor Dampener I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_scanResolutionBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanResolutionBonus"
+ item = "Remote Sensor Booster I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Recon Ships Skill Bonus:
+ # 20% bonus to warp disruptor range per level
+
+ def test_reconShips_maxRange_moduleWarpScrambler(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Warp Scrambler I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_maxRange_moduleWarpScramblerCivilian(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Civilian Warp Disruptor"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Stasis Webifier I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Recon Ships Skill Bonus:
+ # 5% bonus to Assault Missile Launcher rate of fire per level
+
+ def test_reconShips_speed_moduleLauncherMissileAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Assault Missile Launcher I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Recon Ships Skill Bonus:
+ # 5% bonus to Heavy Missile Launcher rate of fire per level
+
+ def test_reconShips_speed_moduleLauncherMissileHeavy(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Missile Launcher I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_speed_moduleLauncherMissileOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Assault Missile Launcher I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/combatReconShips/rook.py b/eos/tests/typeTests/ships/combatReconShips/rook.py
new file mode 100755
index 000000000..4a93a3685
--- /dev/null
+++ b/eos/tests/typeTests/ships/combatReconShips/rook.py
@@ -0,0 +1,309 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Rook"
+
+ # Caldari Cruiser Skill Bonus:
+ # 5% Bonus to Heavy Assault Missile Launcher Rate of Fire per level
+
+ def test_caldariCruiser_speed_moduleLauncherMissileHeavyAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Assault Missile Launcher I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Cruiser Skill Bonus:
+ # 5% Bonus to Heavy Missile Launcher Rate of Fire per level
+
+ def test_caldariCruiser_speed_moduleLauncherMissileHeavy(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Missile Launcher I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_speed_moduleLauncherMissileOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Cruise Missile Launcher I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Cruiser Skill Bonus:
+ # 10% Bonus to ECM Target Jammer capacitor use per level
+
+ def test_caldariCruiser_capacitorNeed_moduleECM(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "ECM - Multispectral Jammer I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "ECM Burst I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Recon Ships Skill Bonus:
+ # 30% Bonus to ECM Target Jammer strength per level
+
+ def test_reconShips_scanGravimetricStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrengthBonus"
+ item = "ECM - Ion Field Projector I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.3
+ fLvl = 4
+ fIngame = 2.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_scanGravimetricStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_scanLadarStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanLadarStrengthBonus"
+ item = "ECM - White Noise Generator I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.3
+ fLvl = 4
+ fIngame = 2.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_scanLadarStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanLadarStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_scanMagnetometricStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrengthBonus"
+ item = "ECM - Phase Inverter I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.3
+ fLvl = 4
+ fIngame = 2.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_scanMagnetometricStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_scanRadarStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanRadarStrengthBonus"
+ item = "ECM - Multispectral Jammer I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.3
+ fLvl = 4
+ fIngame = 2.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_scanRadarStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanRadarStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Recon Ships Skill Bonus:
+ # 10% Bonus to Heavy Assault Missile velocity per level
+
+ def test_reconShips_maxVelocity_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Torrent Assault Missile"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_maxVelocity_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Terror Javelin Assault Missile"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Recon Ships Skill Bonus:
+ # 10% Bonus to Heavy Missile velocity per level
+
+ def test_reconShips_maxVelocity_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Scourge Heavy Missile"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_maxVelocity_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Havoc Fury Heavy Missile"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_maxVelocity_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Hellhound F.O.F. Heavy Missile I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_maxVelocity_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Defender I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/commandShips/__init__.py b/eos/tests/typeTests/ships/commandShips/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/commandShips/absolution.py b/eos/tests/typeTests/ships/commandShips/absolution.py
new file mode 100755
index 000000000..5d54c6308
--- /dev/null
+++ b/eos/tests/typeTests/ships/commandShips/absolution.py
@@ -0,0 +1,253 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Absolution"
+
+ # Battlecruiser Skill Bonus:
+ # 10% reduction in Medium Energy Turret capacitor use per level
+
+ def test_battlecruisers_capacitorNeed_moduleEnergyWeaponMedium(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Focused Medium Pulse Laser I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Dual Light Beam Laser I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Battlecruiser Skill Bonus:
+ # 5% bonus to all armor resistances per level
+
+ def test_battlecruisers_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Command Ships Skill Bonus:
+ # 5% bonus to Medium Energy Turret damage per level
+
+ def test_commandShips_damageMultiplier_moduleEnergyWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Beam Laser I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_damageMultiplier_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Medium Beam Laser I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Command Ships Skill Bonus:
+ # 5% bonus to Medium Energy Turret rate of fire per level
+
+ def test_commandShips_speed_moduleEnergyWeaponMedium(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Pulse Laser I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_speed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Tachyon Beam Laser I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 99% reduction in Warfare Link module CPU need
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Mining Foreman Link - Mining Laser Field Enhancement I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/commandShips/astarte.py b/eos/tests/typeTests/ships/commandShips/astarte.py
new file mode 100755
index 000000000..e64d71e22
--- /dev/null
+++ b/eos/tests/typeTests/ships/commandShips/astarte.py
@@ -0,0 +1,197 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Astarte"
+
+ # Battlecruiser Skill Bonus:
+ # 5% bonus to Medium Hybrid Turret damage per level
+
+ def test_battlecruisers_damageMultiplier_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "200mm Railgun I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "125mm Railgun I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Battlecruiser Skill Bonus:
+ # 7.5% bonus to Armor Repairer effectiveness per level
+
+ def test_battlecruisers_armorDamageAmount_moduleArmorRepairer(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Medium Armor Repairer I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorDamageAmount_moduleArmorRepairerCapital(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Capital Armor Repairer I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorDamageAmount_moduleArmorRepairerCivilian(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Civilian Armor Repairer"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorDamageAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Medium Armor Maintenance Bot I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Command Ships Skill Bonus:
+ # 5% bonus to Medium Hybrid Turret damage per level
+
+ def test_commandShips_damageMultiplier_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Electron Blaster I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Light Ion Blaster I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Command Ships Skill Bonus:
+ # 10% bonus to Medium Hybrid turret falloff per level
+
+ def test_commandShips_falloff_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "Heavy Neutron Blaster I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_falloff_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "75mm Gatling Rail I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 99% reduction in Warfare Link module CPU need
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Armored Warfare Link - Damage Control I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/commandShips/claymore.py b/eos/tests/typeTests/ships/commandShips/claymore.py
new file mode 100755
index 000000000..a09ff91ec
--- /dev/null
+++ b/eos/tests/typeTests/ships/commandShips/claymore.py
@@ -0,0 +1,226 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Claymore"
+
+ # Battlecruiser Skill Bonus:
+ # 5% bonus to Medium Projectile Turret rate of fire per level
+
+ def test_battlecruisers_speed_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "220mm Vulcan AutoCannon I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "280mm Howitzer Artillery I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Battlecruiser Skill Bonus:
+ # 7.5% bonus to Shield Booster effectiveness per level
+
+ def test_battlecruisers_shieldBonus_moduleShieldBooster(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Small Shield Booster I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldBonus_moduleShieldBoosterCapital(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Capital Shield Booster I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldBonus_moduleShieldBoosterCivilian(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Civilian Shield Booster I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Small Shield Transporter I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Command Ships Skill Bonus:
+ # 7.5% bonus to Medium Projectile Turret tracking speed per level
+
+ def test_commandShips_trackingSpeed_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Dual 180mm AutoCannon I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_trackingSpeed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Dual 650mm Repeating Artillery I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Command Ships Skill Bonus:
+ # 3% bonus to effectiveness of Skirmish Warfare Links per level
+
+ def test_commandShips_commandBonus_moduleGangCoordinatorSkillrqArmored(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Skirmish Warfare Link - Interdiction Maneuvers I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_commandBonus_moduleGangCoordinatorSkillrqOther(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Information Warfare Link - Recon Operation I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 99% reduction in Warfare Link module CPU need
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Siege Warfare Link - Shield Efficiency I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # Can use 3 Warfare Link modules simultaneously
+
+ def test_static_maxGroupActive_moduleGangCoordinator(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ item = "Skirmish Warfare Link - Evasive Maneuvers I"
+ ship_other = "Prophecy"
+ iIngame = 1.0
+ fIngame = 3.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxGroupActive_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ item = "ECM Burst I"
+ ship_other = "Prophecy"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/commandShips/damnation.py b/eos/tests/typeTests/ships/commandShips/damnation.py
new file mode 100755
index 000000000..b8b0c9f57
--- /dev/null
+++ b/eos/tests/typeTests/ships/commandShips/damnation.py
@@ -0,0 +1,329 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Damnation"
+
+ # Battlecruiser Skill Bonus:
+ # 10% bonus to Heavy Assault Missile velocity per level
+
+ def test_battlecruisers_maxVelocity_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Hellfire Assault Missile"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_maxVelocity_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Terror Rage Assault Missile"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Battlecruiser Skill Bonus:
+ # 10% bonus to Heavy Missile velocity per level
+
+ def test_battlecruisers_maxVelocity_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Havoc Heavy Missile"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_maxVelocity_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Thunderbolt Fury Heavy Missile"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_maxVelocity_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Eradicator F.O.F. Heavy Missile I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_maxVelocity_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Flameburst Light Missile"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Battlecruiser Skill Bonus:
+ # 5% bonus to all armor resistances per level
+
+ def test_battlecruisers_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Command Ships Skill Bonus:
+ # 10% bonus to armor hitpoints per level
+
+ def test_commandShips_armorHP_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Command Ships Skill Bonus:
+ # 3% bonus to effectiveness of Armored Warfare Links per level
+
+ def test_commandShips_commandBonus_moduleGangCoordinatorSkillrqArmored(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Armored Warfare Link - Damage Control I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_commandBonus_moduleGangCoordinatorSkillrqOther(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Siege Warfare Link - Active Shielding I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 99% reduction in Warfare Link module CPU need
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Armored Warfare Link - Passive Defense I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # Can use 3 Warfare Link modules simultaneously
+
+ def test_static_maxGroupActive_moduleGangCoordinator(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ item = "Siege Warfare Link - Shield Harmonizing I"
+ ship_other = "Prophecy"
+ iIngame = 1.0
+ fIngame = 3.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxGroupActive_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ item = "10MN Afterburner I"
+ ship_other = "Prophecy"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/commandShips/eosCS.py b/eos/tests/typeTests/ships/commandShips/eosCS.py
new file mode 100755
index 000000000..ff6c58967
--- /dev/null
+++ b/eos/tests/typeTests/ships/commandShips/eosCS.py
@@ -0,0 +1,225 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Eos"
+
+ # Battlecruiser Skill Bonus:
+ # 5% bonus to Medium Hybrid Turret damage per level
+
+ def test_battlecruisers_damageMultiplier_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Ion Blaster I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "425mm Railgun I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Battlecruiser Skill Bonus:
+ # 7.5% bonus to Armor Repairer effectiveness per level
+
+ def test_battlecruisers_armorDamageAmount_moduleArmorRepairer(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Large Armor Repairer I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorDamageAmount_moduleArmorRepairerCapital(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Capital Armor Repairer I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorDamageAmount_moduleArmorRepairerCivilian(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Civilian Armor Repairer"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_armorDamageAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Large Remote Armor Repair System I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Command Ships Skill Bonus:
+ # +15 m3 extra Drone Bay space per level
+
+ def test_commandShips_droneCapacity_ship(self):
+ self.buildTested = 0
+ attr = "droneCapacity"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 15.0
+ fLvl = 4
+ fIngame = 60.0
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Command Ships Skill Bonus:
+ # 3% bonus to effectiveness of Information Warfare Links per level
+
+ def test_commandShips_commandBonus_moduleGangCoordinatorSkillrqInformation(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Information Warfare Link - Recon Operation I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_commandBonus_moduleGangCoordinatorSkillrqOther(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Armored Warfare Link - Passive Defense I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_commandBonusHidden_moduleGangCoordinatorSkillrqInformation(self):
+ self.buildTested = 0
+ attr = "commandBonusHidden"
+ item = "Information Warfare Link - Electronic Superiority I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 99% reduction in Warfare Link module CPU need
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Siege Warfare Link - Shield Harmonizing I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # Can use 3 Warfare Link modules simultaneously
+
+ def test_static_maxGroupActive_moduleGangCoordinator(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ item = "Information Warfare Link - Electronic Superiority I"
+ ship_other = "Brutix"
+ iIngame = 1.0
+ fIngame = 3.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxGroupActive_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ item = "Internal Force Field Array I"
+ ship_other = "Brutix"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/commandShips/nighthawk.py b/eos/tests/typeTests/ships/commandShips/nighthawk.py
new file mode 100755
index 000000000..ad672fd95
--- /dev/null
+++ b/eos/tests/typeTests/ships/commandShips/nighthawk.py
@@ -0,0 +1,575 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Nighthawk"
+
+ # Battlecruiser Skill Bonus:
+ # 5% bonus to assault missile launcher rate of fire per level
+
+ def test_battlecruisers_speed_moduleLauncherMissileAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Assault Missile Launcher I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Battlecruiser Skill Bonus:
+ # 5% bonus to heavy assault missile launcher rate of fire per level
+
+ def test_battlecruisers_speed_moduleLauncherMissileHeavyAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Assault Missile Launcher I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Battlecruiser Skill Bonus:
+ # 5% bonus to heavy missile launcher rate of fire per level
+
+ def test_battlecruisers_speed_moduleLauncherMissileHeavy(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Missile Launcher I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_speed_moduleLauncherMissileOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Standard Missile Launcher I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Battlecruiser Skill Bonus:
+ # 5% bonus to all shield resistances per level
+
+ def test_battlecruisers_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Command Ships Skill Bonus:
+ # 5% bonus to heavy missile Kinetic damage per level
+ # Actually this bonus affects all missiles
+
+ def test_commandShips_kineticDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rocket"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_kineticDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rage Rocket"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_kineticDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Light Missile"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_kineticDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Precision Light Missile"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_kineticDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Serpent F.O.F. Light Missile I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_kineticDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Assault Missile"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_kineticDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Javelin Assault Missile"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_kineticDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Heavy Missile"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_kineticDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Fury Heavy Missile"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_kineticDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Hydra F.O.F. Heavy Missile I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_kineticDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Torpedo"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_kineticDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Rage Torpedo"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_kineticDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Cruise Missile"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_kineticDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Precision Cruise Missile"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_kineticDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Dragon F.O.F. Cruise Missile I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_kineticDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rift Citadel Torpedo"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_kineticDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rajas Citadel Cruise Missile"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_kineticDamage_chargeMissileLightNoSkillrqMissileOp(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Civilian Bloodclaw Light Missile"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_kineticDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Hail M"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Command Ships Skill Bonus:
+ # 5% bonus to heavy missile explosion velocity per level
+
+ def test_commandShips_aoeVelocity_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Havoc Heavy Missile"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_aoeVelocity_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Scourge Precision Heavy Missile"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_aoeVelocity_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Stalker F.O.F. Heavy Missile I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_aoeVelocity_chargeOther(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Bloodclaw Light Missile"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 99% reduction in Warfare Link module CPU need
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Skirmish Warfare Link - Interdiction Maneuvers I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/commandShips/sleipnir.py b/eos/tests/typeTests/ships/commandShips/sleipnir.py
new file mode 100755
index 000000000..debfc2324
--- /dev/null
+++ b/eos/tests/typeTests/ships/commandShips/sleipnir.py
@@ -0,0 +1,197 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Sleipnir"
+
+ # Battlecruiser Skill Bonus:
+ # 5% bonus to Medium Projectile Turret rate of fire per level
+
+ def test_battlecruisers_speed_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "720mm Howitzer Artillery I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "250mm Light Artillery Cannon I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Battlecruiser Skill Bonus:
+ # 7.5% bonus to Shield Booster effectiveness per level
+
+ def test_battlecruisers_shieldBonus_moduleShieldBooster(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Medium Shield Booster I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldBonus_moduleShieldBoosterCapital(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Capital Shield Booster I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldBonus_moduleShieldBoosterCivilian(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Civilian Shield Booster I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Small Shield Transporter I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Command Ships Skill Bonus:
+ # 5% bonus to Medium Projectile Turret damage per level
+
+ def test_commandShips_damageMultiplier_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "650mm Artillery Cannon I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "125mm Gatling AutoCannon I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Command Ships Skill Bonus:
+ # 10% bonus to Medium Projectile Turret falloff per level
+
+ def test_commandShips_falloff_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "425mm AutoCannon I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_falloff_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "800mm Repeating Artillery I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 99% reduction in Warfare Link module CPU need
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Skirmish Warfare Link - Interdiction Maneuvers I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/commandShips/vulture.py b/eos/tests/typeTests/ships/commandShips/vulture.py
new file mode 100755
index 000000000..8a999bf72
--- /dev/null
+++ b/eos/tests/typeTests/ships/commandShips/vulture.py
@@ -0,0 +1,282 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Vulture"
+
+ # Battlecruiser Skill Bonus:
+ # 10% bonus to Medium Hybrid Turret optimal range per level
+
+ def test_battlecruisers_maxRange_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Heavy Ion Blaster I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_maxRange_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Neutron Blaster Cannon I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Battlecruiser Skill Bonus:
+ # 5% bonus to all shield resistances per level
+
+ def test_battlecruisers_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_battlecruisers_shieldThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Battlecruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Command Ships Skill Bonus:
+ # 10% bonus to Medium Hybrid Turret optimal range per level
+
+ def test_commandShips_maxRange_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Dual 150mm Railgun I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_maxRange_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Light Neutron Blaster I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Command Ships Skill Bonus:
+ # 3% bonus to effectiveness of Siege Warfare Links per level
+
+ def test_commandShips_commandBonus_moduleGangCoordinatorSkillrqArmored(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Siege Warfare Link - Shield Efficiency I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandShips_commandBonus_moduleGangCoordinatorSkillrqOther(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Mining Foreman Link - Harvester Capacitor Efficiency I"
+ skill = "Command Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 99% reduction in Warfare Link module CPU need
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Armored Warfare Link - Rapid Repair I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # Can use 3 Warfare Link modules simultaneously
+
+ def test_static_maxGroupActive_moduleGangCoordinator(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ item = "Information Warfare Link - Recon Operation I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 3.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxGroupActive_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ item = "ECM Burst I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/covertOps/__init__.py b/eos/tests/typeTests/ships/covertOps/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/covertOps/anathema.py b/eos/tests/typeTests/ships/covertOps/anathema.py
new file mode 100755
index 000000000..6fb3de4ed
--- /dev/null
+++ b/eos/tests/typeTests/ships/covertOps/anathema.py
@@ -0,0 +1,345 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Anathema"
+
+ # Amarr Frigate Skill Bonus:
+ # 5% bonus to rocket damage per level
+
+ def test_amarrFrigate_emDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Gremlin Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_emDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Gremlin Javelin Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_emDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Sabretooth Light Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosiveDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Phalanx Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosiveDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Phalanx Rage Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosiveDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Piranha Light Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_kineticDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_kineticDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rage Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_kineticDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Light Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_thermalDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Foxfire Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_thermalDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Foxfire Javelin Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_thermalDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Firefly F.O.F. Light Missile I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Frigate Skill Bonus:
+ # 5% reduction of capacitor recharge time per level
+
+ def test_amarrFrigate_rechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "rechargeRate"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Covert Ops Skill Bonus:
+ # -97.5% to -100% reduced CPU need for cloaking device
+ # Static part
+
+ def test_static_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 0.025
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Heat Sink I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Covert Ops Skill Bonus:
+ # -97.5% to -100% reduced CPU need for cloaking device
+ # Dynamic part
+
+ def test_covertOps_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 0.02
+ fLvl = 4
+ fIngame = 0.005
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_covertOps_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "ECCM - Ladar I"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Covert Ops Skill Bonus:
+ # 10% increase to scan strength of probes per level
+
+ def test_covertOps_baseSensorStrength_chargeScannerProbe(self):
+ self.buildTested = 0
+ attr = "baseSensorStrength"
+ item = "Combat Scanner Probe I"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Covert Ops Skill Bonus:
+ # -10% bonus to survey probe flight time per level
+
+ def test_covertOps_explosionDelay_chargeSurveyProbe(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Gaze Survey Probe I"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_covertOps_explosionDelay_chargeOther(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Core Scanner Probe I"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 5 seconds cloak reactivation delay
+
+ def test_static_moduleReactivationDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 5000.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ iItem = "Prototype Cloaking Device I"
+ iIngame = 5000.0
+ fItem = "Covert Cynosural Field Generator I"
+ fIngame = 30000.0
+ iEos = self.getItemAttr(attr, iItem, ship=self.ship)
+ fEos = self.getItemAttr(attr, fItem, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/covertOps/buzzard.py b/eos/tests/typeTests/ships/covertOps/buzzard.py
new file mode 100755
index 000000000..7c86827c2
--- /dev/null
+++ b/eos/tests/typeTests/ships/covertOps/buzzard.py
@@ -0,0 +1,571 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Buzzard"
+
+ # Caldari Frigate Skill Bonus:
+ # 5% bonus to Missile Kinetic Damage per level
+
+ def test_caldariFrigate_kineticDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rage Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Precision Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Serpent F.O.F. Light Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Assault Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Rage Assault Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Heavy Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Precision Heavy Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Hydra F.O.F. Heavy Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Rage Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Fury Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Dragon F.O.F. Cruise Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rift Citadel Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rajas Citadel Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLightNoSkillrqMissileOp(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Civilian Bloodclaw Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Fusion S"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Frigate Skill Bonus:
+ # -5% bonus to Missile Launcher Rate of Fire per level
+
+ def test_caldariFrigate_speed_moduleLauncherMissileRocket(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Rocket Launcher I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_speed_moduleLauncherMissileStandard(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Standard Missile Launcher I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_speed_moduleLauncherMissileStandardCivilian(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Civilian Standard Missile Launcher"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_speed_moduleLauncherMissileAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Assault Missile Launcher I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_speed_moduleLauncherMissileHeavyAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Assault Missile Launcher I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_speed_moduleLauncherMissileHeavy(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Missile Launcher I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_speed_moduleLauncherMissileSiege(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Siege Missile Launcher I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_speed_moduleLauncherMissileCitadel(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Citadel Cruise Launcher I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_speed_moduleOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "75mm Gatling Rail I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Covert Ops Skill Bonus:
+ # -97.5% to -100% reduced CPU need for cloaking device
+ # Static part
+
+ def test_static_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 0.025
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Photon Scattering Field I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Covert Ops Skill Bonus:
+ # -97.5% to -100% reduced CPU need for cloaking device
+ # Dynamic part
+
+ def test_covertOps_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 0.02
+ fLvl = 4
+ fIngame = 0.005
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_covertOps_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Power Diagnostic System I"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Covert Ops Skill Bonus:
+ # 10% increase to scan strength of probes per level
+
+ def test_covertOps_baseSensorStrength_chargeScannerProbe(self):
+ self.buildTested = 0
+ attr = "baseSensorStrength"
+ item = "Core Scanner Probe I"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Covert Ops Skill Bonus:
+ # -10% bonus to survey probe flight time per level
+
+ def test_covertOps_explosionDelay_chargeSurveyProbe(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Gaze Survey Probe I"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_covertOps_explosionDelay_chargeOther(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Combat Scanner Probe I"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 5 seconds cloak reactivation delay
+
+ def test_static_moduleReactivationDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 5000.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ iItem = "Prototype Cloaking Device I"
+ iIngame = 5000.0
+ fItem = "Covert Cynosural Field Generator I"
+ fIngame = 30000.0
+ iEos = self.getItemAttr(attr, iItem, ship=self.ship)
+ fEos = self.getItemAttr(attr, fItem, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/covertOps/cheetah.py b/eos/tests/typeTests/ships/covertOps/cheetah.py
new file mode 100755
index 000000000..693f5e040
--- /dev/null
+++ b/eos/tests/typeTests/ships/covertOps/cheetah.py
@@ -0,0 +1,211 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Cheetah"
+
+ # Minmatar Frigate Skill Bonus:
+ # 5% bonus to Small Projectile Turret Damage per level
+
+ def test_minmatarFrigate_damageMultiplier_moduleProjectileWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "200mm AutoCannon I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual 180mm AutoCannon I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Frigate Skill Bonus:
+ # 10% bonus to Small Projectile Turret Optimal Range per level
+
+ def test_minmatarFrigate_maxRange_moduleProjectileWeaponSmall(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "280mm Howitzer Artillery I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_maxRange_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "650mm Artillery Cannon I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Covert Ops Skill Bonus:
+ # -97.5% to -100% reduced CPU need for cloaking device
+ # Static part
+
+ def test_static_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 0.025
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Salvager I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Covert Ops Skill Bonus:
+ # -97.5% to -100% reduced CPU need for cloaking device
+ # Dynamic part
+
+ def test_covertOps_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 0.02
+ fLvl = 4
+ fIngame = 0.005
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_covertOps_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Gyrostabilizer I"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Covert Ops Skill Bonus:
+ # 10% increase to scan strength of probes per level
+
+ def test_covertOps_baseSensorStrength_chargeScannerProbe(self):
+ self.buildTested = 0
+ attr = "baseSensorStrength"
+ item = "Core Scanner Probe I"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Covert Ops Skill Bonus:
+ # -10% bonus to survey probe flight time per level
+
+ def test_covertOps_explosionDelay_chargeSurveyProbe(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Discovery Survey Probe I"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_covertOps_explosionDelay_chargeOther(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Combat Scanner Probe I"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 5 seconds cloak reactivation delay
+
+ def test_static_moduleReactivationDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 5000.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ iItem = "Prototype Cloaking Device I"
+ iIngame = 5000.0
+ fItem = "Covert Cynosural Field Generator I"
+ fIngame = 30000.0
+ iEos = self.getItemAttr(attr, iItem, ship=self.ship)
+ fEos = self.getItemAttr(attr, fItem, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/covertOps/helios.py b/eos/tests/typeTests/ships/covertOps/helios.py
new file mode 100755
index 000000000..34178b454
--- /dev/null
+++ b/eos/tests/typeTests/ships/covertOps/helios.py
@@ -0,0 +1,211 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Helios"
+
+ # Gallente Frigate Skill Bonus:
+ # 5% bonus to Small Hybrid Turret damage per level
+
+ def test_gallenteFrigate_damageMultiplier_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "125mm Railgun I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "250mm Railgun I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Frigate Skill Bonus:
+ # 10% bonus to Scout Drone Thermal damage per level
+
+ def test_gallenteFrigate_thermalDamage_droneScout(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Hobgoblin I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_thermalDamage_other(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Phased Plasma S"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Covert Ops Skill Bonus:
+ # -97.5% to -100% reduced CPU need for cloaking device
+ # Static part
+
+ def test_static_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 0.025
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Small Graviton Smartbomb I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Covert Ops Skill Bonus:
+ # -97.5% to -100% reduced CPU need for cloaking device
+ # Dynamic part
+
+ def test_covertOps_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 0.02
+ fLvl = 4
+ fIngame = 0.005
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_covertOps_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Shield Flux Coil I"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Covert Ops Skill Bonus:
+ # 10% increase to scan strength of probes per level
+
+ def test_covertOps_baseSensorStrength_chargeScannerProbe(self):
+ self.buildTested = 0
+ attr = "baseSensorStrength"
+ item = "Combat Scanner Probe I"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Covert Ops Skill Bonus:
+ # -10% bonus to survey probe flight time per level
+
+ def test_covertOps_explosionDelay_chargeSurveyProbe(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Quest Survey Probe I"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_covertOps_explosionDelay_chargeOther(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Combat Scanner Probe I"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 5 seconds cloak reactivation delay
+
+ def test_static_moduleReactivationDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 5000.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ iItem = "Prototype Cloaking Device I"
+ iIngame = 5000.0
+ fItem = "Covert Cynosural Field Generator I"
+ fIngame = 30000.0
+ iEos = self.getItemAttr(attr, iItem, ship=self.ship)
+ fEos = self.getItemAttr(attr, fItem, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/__init__.py b/eos/tests/typeTests/ships/cruisers/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/cruisers/arbitrator.py b/eos/tests/typeTests/ships/cruisers/arbitrator.py
new file mode 100755
index 000000000..e1df80564
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/arbitrator.py
@@ -0,0 +1,276 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Arbitrator"
+
+ # Amarr Cruiser Skill Bonus:
+ # 5% bonus to Tracking Disruptor effectiveness per skill level
+
+ def test_amarrCruiser_maxRangeBonus_moduleTrackingDisruptor(self):
+ self.buildTested = 0
+ attr = "maxRangeBonus"
+ item = "Tracking Disruptor I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_maxRangeBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRangeBonus"
+ item = "Tracking Computer I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_falloffBonus_moduleTrackingDisruptor(self):
+ self.buildTested = 0
+ attr = "falloffBonus"
+ item = "Tracking Disruptor I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_falloffBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "falloffBonus"
+ item = "Tracking Enhancer I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_trackingSpeedBonus_moduleTrackingDisruptor(self):
+ self.buildTested = 0
+ attr = "trackingSpeedBonus"
+ item = "Tracking Disruptor I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_trackingSpeedBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeedBonus"
+ item = "Tracking Link I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Cruiser Skill Bonus:
+ # 10% bonus to drone hitpoints per skill level
+
+ def test_amarrCruiser_hp_droneCombat(self):
+ self.buildTested = 0
+ item = "Curator I"
+ skill = "Amarr Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_hp_droneLogistic(self):
+ self.buildTested = 0
+ item = "Medium Armor Maintenance Bot I"
+ skill = "Amarr Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_hp_droneEwar(self):
+ self.buildTested = 0
+ item = "Infiltrator TD-600"
+ skill = "Amarr Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_hp_droneCapDrain(self):
+ self.buildTested = 0
+ item = "Praetor EV-900"
+ skill = "Amarr Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_hp_droneWeb(self):
+ self.buildTested = 0
+ item = "Berserker SW-900"
+ skill = "Amarr Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_hp_droneMining(self):
+ self.buildTested = 0
+ item = "Harvester Mining Drone"
+ skill = "Amarr Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Cruiser Skill Bonus:
+ # 10% bonus to drone damage per skill level
+
+ def test_amarrCruiser_damageMultiplier_droneCombat(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Berserker I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_damageMultiplier_other(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual 150mm Railgun I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Cruiser Skill Bonus:
+ # 10% bonus to drone mining yield per skill level
+
+ def test_amarrCruiser_miningAmount_droneMining(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Mining Drone I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_miningAmount_other(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Miner I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/ashimmu.py b/eos/tests/typeTests/ships/cruisers/ashimmu.py
new file mode 100755
index 000000000..f0a4f69be
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/ashimmu.py
@@ -0,0 +1,164 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Ashimmu"
+
+ # Amarr Cruiser Skill Bonus:
+ # 15% bonus to Energy Vampire drain amount per level
+
+ def test_amarrCruiser_powerTransferAmount_moduleEnergyVampire(self):
+ self.buildTested = 0
+ attr = "powerTransferAmount"
+ item = "Small Nosferatu I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_powerTransferAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "powerTransferAmount"
+ item = "Medium Energy Transfer Array I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Cruiser Skill Bonus:
+ # 15% bonus to Energy Neutralizer drain amount per level
+
+ def test_amarrCruiser_energyDestabilizationAmount_moduleEnergyDestabilizer(self):
+ self.buildTested = 0
+ attr = "energyDestabilizationAmount"
+ item = "Medium Energy Neutralizer I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_energyDestabilizationAmount_other(self):
+ self.buildTested = 0
+ attr = "energyDestabilizationAmount"
+ item = "Infiltrator EV-600"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Cruiser Skill Bonus:
+ # 10% bonus to the velocity factor of stasis webifiers per level
+
+ def test_minmatarCruiser_speedFactor_moduleStasisWeb(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "Stasis Webifier I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_speedFactor_moduleStasisWebCivilian(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "Civilian Stasis Webifier"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_speedFactor_moduleOther(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "10MN MicroWarpdrive I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_speedFactor_other(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "Berserker SW-900"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 100% bonus to Medium Energy Turret damage
+
+ def test_static_damageMultiplier_moduleEnergyWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Pulse Laser I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_damageMultiplier_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Gatling Pulse Laser I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/augoror.py b/eos/tests/typeTests/ships/cruisers/augoror.py
new file mode 100755
index 000000000..759fb89a3
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/augoror.py
@@ -0,0 +1,113 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Augoror"
+
+ # Amarr Cruiser Skill Bonus:
+ # 10% bonus to armor hitpoints per level
+
+ def test_amarrCruiser_armorHP_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Cruiser Skill Bonus:
+ # 10% bonus to capacitor need of energy transfer arrays per level
+
+ def test_amarrCruiser_capacitorNeed_moduleEnergyTransfer(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Medium Energy Transfer Array I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_capacitorNeed_moduleEnergyTransferCapital(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Capital Energy Transfer Array I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Medium Energy Neutralizer I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role bonus:
+ # 500% bonus to range of energy transfer arrays
+
+ def test_static_powerTransferRange_moduleEnergyTransfer(self):
+ self.buildTested = 0
+ attr = "powerTransferRange"
+ item = "Small Energy Transfer Array I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 6.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_powerTransferRange_moduleEnergyTransferCapital(self):
+ self.buildTested = 0
+ attr = "powerTransferRange"
+ item = "Capital Energy Transfer Array I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 6.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_powerTransferRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "powerTransferRange"
+ item = "Medium Nosferatu I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/augororNavyIssue.py b/eos/tests/typeTests/ships/cruisers/augororNavyIssue.py
new file mode 100755
index 000000000..26dd63d12
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/augororNavyIssue.py
@@ -0,0 +1,56 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Augoror Navy Issue"
+
+ # Amarr Cruiser Skill Bonus:
+ # 10% bonus to Medium Energy Turret Capacitor Usage per level
+
+ def test_amarrCruiser_capacitorNeed_moduleEnergyWeaponMedium(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Quad Light Beam Laser I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Medium Beam Laser I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Cruiser Skill Bonus:
+ # 10% bonus to Armor Hitpoints per level
+
+ def test_amarrCruiser_armorHP_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/bellicose.py b/eos/tests/typeTests/ships/cruisers/bellicose.py
new file mode 100755
index 000000000..4ea7319df
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/bellicose.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Bellicose"
+
+ # Minmatar Cruiser Skill Bonus:
+ # 5% bonus to Medium Projectile Turret Rate of Fire per skill level
+
+ def test_minmatarCruiser_speed_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "220mm Vulcan AutoCannon I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "280mm Howitzer Artillery I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Cruiser Skill Bonus:
+ # 7.5% bonus to target painter effectiveness per skill level
+
+ def test_minmatarCruiser_signatureRadiusBonus_moduleTargetPainter(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "Target Painter I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_signatureRadiusBonus_other(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "Warrior TP-300"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/blackbird.py b/eos/tests/typeTests/ships/cruisers/blackbird.py
new file mode 100755
index 000000000..f09ba1feb
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/blackbird.py
@@ -0,0 +1,195 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Blackbird"
+
+ # Caldari Cruiser Skill Bonus:
+ # 15% bonus to ECM Target Jammer strength per level
+
+ def test_caldariCruiser_scanGravimetricStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrengthBonus"
+ item = "ECM - Phase Inverter I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_scanGravimetricStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_scanLadarStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanLadarStrengthBonus"
+ item = "ECM - White Noise Generator I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_scanLadarStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanLadarStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_scanMagnetometricStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrengthBonus"
+ item = "ECM - Multispectral Jammer I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_scanMagnetometricStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_scanRadarStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanRadarStrengthBonus"
+ item = "ECM - Ion Field Projector I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_scanRadarStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanRadarStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Cruiser Skill Bonus:
+ # 10% bonus to ECM Target Jammer optimal range per level
+
+ def test_caldariCruiser_maxRange_moduleEcm(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "ECM - Phase Inverter I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "ECCM Projector I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Cruiser Skill Bonus:
+ # 10% bonus to ECM Target Jammer falloff per level
+
+ def test_caldariCruiser_falloff_moduleEcm(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "ECM - Ion Field Projector I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_falloff_moduleOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "ECM Burst I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/caracal.py b/eos/tests/typeTests/ships/cruisers/caracal.py
new file mode 100755
index 000000000..cf6125cbf
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/caracal.py
@@ -0,0 +1,453 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Caracal"
+
+ # Caldari Cruiser Skill Bonus:
+ # 5% bonus Kinetic Missile Damage per level
+
+ def test_caldariCruiser_kineticDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rocket"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Javelin Rocket"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Light Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Fury Light Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Serpent F.O.F. Light Missile I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Assault Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Rage Assault Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Heavy Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Fury Heavy Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Hydra F.O.F. Heavy Missile I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Torpedo"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Javelin Torpedo"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Cruise Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Fury Cruise Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Dragon F.O.F. Cruise Missile I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rift Citadel Torpedo"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rajas Citadel Cruise Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileLightNoSkillrqMissileOp(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Civilian Bloodclaw Light Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Antimatter Charge S"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Cruiser Skill Bonus:
+ # 10% bonus to Light Missile Velocity per level
+
+ def test_caldariCruiser_maxVelocity_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Piranha Light Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Sabretooth Fury Light Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Seeker F.O.F. Light Missile I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Cruiser Skill Bonus:
+ # 10% bonus to Heavy Assault Missile Velocity per level
+
+ def test_caldariCruiser_maxVelocity_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Fulmination Assault Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Hellfire Javelin Assault Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Cruiser Skill Bonus:
+ # 10% bonus to Heavy Missile Velocity per level
+
+ def test_caldariCruiser_maxVelocity_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Scourge Heavy Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Widowmaker Fury Heavy Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Eradicator F.O.F. Heavy Missile I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeMissileNoSkillrq(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Civilian Bloodclaw Light Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Gremlin Rocket"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/caracalNavyIssue.py b/eos/tests/typeTests/ships/cruisers/caracalNavyIssue.py
new file mode 100755
index 000000000..01d21430b
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/caracalNavyIssue.py
@@ -0,0 +1,447 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Caracal Navy Issue"
+
+ # Caldari Cruiser Skill Bonus:
+ # 5% bonus Kinetic Missile Damage per level
+
+ def test_caldariCruiser_kineticDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rocket"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rage Rocket"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Light Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Fury Light Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Serpent F.O.F. Light Missile I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Assault Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Javelin Assault Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Heavy Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Precision Heavy Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Hydra F.O.F. Heavy Missile I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Torpedo"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Rage Torpedo"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Cruise Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Fury Cruise Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Dragon F.O.F. Cruise Missile I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rift Citadel Torpedo"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rajas Citadel Cruise Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileLightNoSkillrqMissileOp(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Civilian Bloodclaw Light Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Void M"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Cruiser Skill Bonus:
+ # 10% bonus to Missile Velocity per level
+
+ def test_caldariCruiser_maxVelocity_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Flameburst Light Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Piranha Fury Light Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Exterminator F.O.F. Light Missile I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Torrent Assault Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Terror Javelin Assault Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Thunderbolt Heavy Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Havoc Precision Heavy Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Stalker F.O.F. Heavy Missile I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeMissileNoSkillrq(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Civilian Bloodclaw Light Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Defender I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/celestis.py b/eos/tests/typeTests/ships/cruisers/celestis.py
new file mode 100755
index 000000000..ac70f7024
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/celestis.py
@@ -0,0 +1,102 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Celestis"
+
+ # Gallente Cruiser Skill Bonus:
+ # 5% bonus to Medium Hybrid Turret Damage per skill level
+
+ def test_gallenteCruiser_damageMultiplier_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Electron Blaster I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Light Neutron Blaster I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Cruiser Skill Bonus:
+ # 5% bonus to Remote Sensor Dampener effectiveness per skill level
+
+ def test_gallenteCruiser_maxTargetRangeBonus_moduleRemoteSensorDamper(self):
+ self.buildTested = 0
+ attr = "maxTargetRangeBonus"
+ item = "Remote Sensor Dampener I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_maxTargetRangeBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxTargetRangeBonus"
+ item = "Remote Sensor Booster I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_scanResolutionBonus_moduleRemoteSensorDamper(self):
+ self.buildTested = 0
+ attr = "scanResolutionBonus"
+ item = "Remote Sensor Dampener I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_scanResolutionBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanResolutionBonus"
+ item = "Remote Sensor Booster I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/cynabal.py b/eos/tests/typeTests/ships/cruisers/cynabal.py
new file mode 100755
index 000000000..ddf1df1cd
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/cynabal.py
@@ -0,0 +1,101 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Cynabal"
+
+ # Minmatar Cruiser Skill Bonus:
+ # 10% bonus to Medium Projectile Turret damage per level
+
+ def test_minmatarCruiser_damageMultiplier_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "720mm Howitzer Artillery I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "150mm Light AutoCannon I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Cruiser Skill Bonus:
+ # 10% bonus to Medium Projectile Turret falloff per level
+
+ def test_gallenteCruiser_falloff_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "425mm AutoCannon I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_falloff_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "Dual 425mm AutoCannon I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 25% bonus to Medium Projectile Turret rate of fire
+
+ def test_static_speed_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Dual 180mm AutoCannon I"
+ ship_other = "Thorax"
+ iIngame = 1.0
+ fIngame = 0.75
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "200mm AutoCannon I"
+ ship_other = "Thorax"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/exequror.py b/eos/tests/typeTests/ships/cruisers/exequror.py
new file mode 100755
index 000000000..51c177dd8
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/exequror.py
@@ -0,0 +1,154 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Exequror"
+
+ # Gallente Cruiser Skill Bonus:
+ # 10% bonus to Cargo Capacity per level
+
+ def test_gallenteCruiser_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Cruiser Skill Bonus:
+ # 10% bonus to capacitor need of remote armor repair system per level
+
+ def test_gallenteCruiser_capacitorNeed_moduleRemoteArmorRepairer(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Medium Remote Armor Repair System I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_capacitorNeed_moduleRemoteArmorRepairerCapital(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Capital Remote Armor Repair System I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_capacitorNeed_moduleRemoteArmorRepairerCivilian(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Remote Armor Repair System"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Warp Scrambler I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 500% bonus to range of remote armor repair systems
+
+ def test_static_maxRange_moduleRemoteArmorRepairer(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Large Remote Armor Repair System I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 6.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxRange_moduleRemoteArmorRepairerCapital(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Capital Remote Armor Repair System I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 6.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxRange_moduleRemoteArmorRepairerCivilian(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Civilian Remote Armor Repair System"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 6.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "200mm AutoCannon I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxRange_other(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Medium Armor Maintenance Bot I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/exequrorNavyIssue.py b/eos/tests/typeTests/ships/cruisers/exequrorNavyIssue.py
new file mode 100755
index 000000000..4915bfdaf
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/exequrorNavyIssue.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Exequror Navy Issue"
+
+ # Gallente Cruiser Skill Bonus:
+ # 5% bonus to Medium Hybrid Turret damage per level
+
+ def test_gallenteCruiser_damageMultiplier_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "250mm Railgun I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual 250mm Railgun I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Cruiser Skill Bonus:
+ # 5% bonus to Medium Hybrid Turret rate of fire per level
+
+ def test_gallenteCruiser_speed_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Ion Blaster I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_speed_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Neutron Blaster Cannon I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/gila.py b/eos/tests/typeTests/ships/cruisers/gila.py
new file mode 100755
index 000000000..efd855c01
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/gila.py
@@ -0,0 +1,408 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Gila"
+
+ # Caldari Cruiser Skill Bonus:
+ # 5% shield resistance per level
+
+ def test_caldariCruiser_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Cruiser Skill Bonus:
+ # 10% bonus to drone hitpoints per skill level
+
+ def test_gallenteCruiser_hp_droneCombat(self):
+ self.buildTested = 0
+ item = "Curator I"
+ skill = "Gallente Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_hp_droneLogistic(self):
+ self.buildTested = 0
+ item = "Heavy Armor Maintenance Bot I"
+ skill = "Gallente Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_hp_droneEwar(self):
+ self.buildTested = 0
+ item = "Hammerhead SD-600"
+ skill = "Gallente Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_hp_droneCapDrain(self):
+ self.buildTested = 0
+ item = "Acolyte EV-300"
+ skill = "Gallente Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_hp_droneWeb(self):
+ self.buildTested = 0
+ item = "Berserker SW-900"
+ skill = "Gallente Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_hp_droneMining(self):
+ self.buildTested = 0
+ item = "Mining Drone I"
+ skill = "Gallente Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Cruiser Skill Bonus:
+ # 10% bonus to drone damage per skill level
+
+ def test_gallenteCruiser_damageMultiplier_droneCombat(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Warden I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_damageMultiplier_other(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Ion Blaster I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 50% bonus to light Missile velocity
+
+ def test_static_maxVelocity_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Bloodclaw Light Missile"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxVelocity_chargeMissileLightCivilian(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Civilian Bloodclaw Light Missile"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxVelocity_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Flameburst Fury Light Missile"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxVelocity_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Firefly F.O.F. Light Missile I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 50% bonus to Heavy Assault Missile velocity
+
+ def test_static_maxVelocity_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Terror Assault Missile"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxVelocity_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Fulmination Javelin Assault Missile"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 50% bonus to Heavy Missile velocity
+
+ def test_static_maxVelocity_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Thunderbolt Heavy Missile"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxVelocity_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Scourge Fury Heavy Missile"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxVelocity_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Hellhound F.O.F. Heavy Missile I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxVelocity_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Foxfire Rocket"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/guardianVexor.py b/eos/tests/typeTests/ships/cruisers/guardianVexor.py
new file mode 100755
index 000000000..67fbcebba
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/guardianVexor.py
@@ -0,0 +1,56 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Guardian-Vexor"
+
+ # Gallente Cruiser Skill Bonus:
+ # 5% bonus to Medium Hybrid Turret damage per level
+
+ def test_gallenteCruiser_damageMultiplier_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Neutron Blaster I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Ion Blaster Cannon I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Cruiser Skill Bonus:
+ # +1 extra Drone controlled per level
+
+ def test_gallenteCruiser_maxActiveDrones_ship(self):
+ self.buildTested = 0
+ attr = "maxActiveDrones"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 6
+ fLvl = 4
+ fIngame = 9
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/maller.py b/eos/tests/typeTests/ships/cruisers/maller.py
new file mode 100755
index 000000000..29c78cb1a
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/maller.py
@@ -0,0 +1,158 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Maller"
+
+ # Amarr Cruiser Skill Bonus:
+ # 10% bonus to Medium Energy Turret capacitor use per level
+
+ def test_amarrCruiser_capacitorNeed_moduleEnergyWeaponMedium(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Heavy Beam Laser I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Dual Light Beam Laser I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Cruiser Skill Bonus:
+ # 5% bonus to all Armor Resistances per level
+
+ def test_amarrCruiser_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/moa.py b/eos/tests/typeTests/ships/cruisers/moa.py
new file mode 100755
index 000000000..b0f204ec8
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/moa.py
@@ -0,0 +1,158 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Moa"
+
+ # Caldari Cruiser Skill Bonus:
+ # 10% bonus to Medium Hybrid Turret optimal range per level
+
+ def test_caldariCruiser_maxRange_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "250mm Railgun I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxRange_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Dual 250mm Railgun I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Cruiser Skill Bonus:
+ # 5% bonus to shield resistance per level
+
+ def test_caldariCruiser_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/omen.py b/eos/tests/typeTests/ships/cruisers/omen.py
new file mode 100755
index 000000000..9806ca26e
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/omen.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Omen"
+
+ # Amarr Cruiser Skill Bonus:
+ # 10% bonus to Medium Energy Turret capacitor use per level
+
+ def test_amarrCruiser_capacitorNeed_moduleEnergyWeaponMedium(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Focused Medium Pulse Laser I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Mega Pulse Laser I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Cruiser Skill Bonus:
+ # 5% bonus to Medium Energy Turret rate of fire per level
+
+ def test_amarrCruiser_speed_moduleEnergyWeaponMedium(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Focused Medium Beam Laser I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_speed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Gatling Pulse Laser I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/omenNavyIssue.py b/eos/tests/typeTests/ships/cruisers/omenNavyIssue.py
new file mode 100755
index 000000000..c004fe85a
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/omenNavyIssue.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Omen Navy Issue"
+
+ # Amarr Cruiser Skill Bonus:
+ # 10% bonus to Medium Energy Turret capacitor use per level
+
+ def test_amarrCruiser_capacitorNeed_moduleEnergyWeaponMedium(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Heavy Pulse Laser I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Dual Heavy Beam Laser I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Cruiser Skill Bonus:
+ # 7.5% bonus to Medium Energy Turret rate of fire per level
+
+ def test_amarrCruiser_speed_moduleEnergyWeaponMedium(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Beam Laser I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 0.925
+ fLvl = 4
+ fIngame = 0.7
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_speed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Mega Beam Laser I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/osprey.py b/eos/tests/typeTests/ships/cruisers/osprey.py
new file mode 100755
index 000000000..26ac6814e
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/osprey.py
@@ -0,0 +1,187 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Osprey"
+
+ # Caldari Cruiser Skill Bonus:
+ # 20% bonus to mining laser yield per level
+
+ def test_caldariCruiser_miningAmount_moduleMiningLaser(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Miner I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_miningAmount_moduleMiningLaserDeepCore(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Deep Core Mining Laser I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_miningAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Gas Cloud Harvester I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_miningAmount_other(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Mining Drone I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Cruiser Skill Bonus:
+ # 10% reduction in Shield Transport capacitor use per level
+
+ def test_caldariCruiser_capacitorNeed_moduleShieldTransporter(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Medium Shield Transporter I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_capacitorNeed_moduleShieldTransporterCapital(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Capital Shield Transporter I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_capacitorNeed_moduleShieldTransporterCivilian(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Remote Shield Transporter"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Remote Sensor Dampener I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 500% bonus to range of shield transporters
+
+ def test_static_shieldTransferRange_moduleShieldTransporter(self):
+ self.buildTested = 0
+ attr = "shieldTransferRange"
+ item = "Large Shield Transporter I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 6.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_shieldTransferRange_moduleShieldTransporterCapital(self):
+ self.buildTested = 0
+ attr = "shieldTransferRange"
+ item = "Capital Shield Transporter I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 6.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_shieldTransferRange_moduleShieldTransporterCivilian(self):
+ self.buildTested = 0
+ attr = "shieldTransferRange"
+ item = "Civilian Remote Shield Transporter"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 6.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_shieldTransferRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "shieldTransferRange"
+ item = "Heavy Shield Maintenance Bot I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/ospreyNavyIssue.py b/eos/tests/typeTests/ships/cruisers/ospreyNavyIssue.py
new file mode 100755
index 000000000..fc6088960
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/ospreyNavyIssue.py
@@ -0,0 +1,171 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Osprey Navy Issue"
+
+ # Caldari Cruiser Skill Bonus:
+ # 5% bonus to Assault Missile Launcher rate of fire per level
+
+ def test_caldariCruiser_speed_moduleLauncherMissileAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Assault Missile Launcher I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Cruiser Skill Bonus:
+ # 5% bonus to Heavy Assault Missile Launcher rate of fire per level
+
+ def test_caldariCruiser_speed_moduleLauncherMissileHeavyAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Assault Missile Launcher I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Cruiser Skill Bonus:
+ # 5% bonus to Heavy Missile Launcher rate of fire per level
+
+ def test_caldariCruiser_speed_moduleLauncherMissileHeavy(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Missile Launcher I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_speed_moduleLauncherMissileOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Rocket Launcher I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Cruiser Skill Bonus:
+ # 10% bonus to Heavy Assault Missile velocity per level
+
+ def test_caldariCruiser_maxVelocity_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Hellfire Assault Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Fulmination Javelin Assault Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Cruiser Skill Bonus:
+ # 10% bonus to Heavy Missile velocity per level
+
+ def test_caldariCruiser_maxVelocity_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Widowmaker Heavy Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Scourge Fury Heavy Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Stalker F.O.F. Heavy Missile I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Flameburst Light Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/phantasm.py b/eos/tests/typeTests/ships/cruisers/phantasm.py
new file mode 100755
index 000000000..25a668014
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/phantasm.py
@@ -0,0 +1,101 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Phantasm"
+
+ # Amarr Cruiser Skill Bonus:
+ # 7.5% bonus to Medium Energy Turret tracking per level
+
+ def test_amarrCruiser_trackingSpeed_moduleEnergyWeaponMedium(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Heavy Beam Laser I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_trackingSpeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Medium Pulse Laser I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Cruiser Skill Bonus:
+ # 5% bonus to Medium Energy Turret damage per level
+
+ def test_caldariCruiser_damageMultiplier_moduleEnergyWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Quad Light Beam Laser I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_damageMultiplier_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Gatling Pulse Laser I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 100% bonus to Medium Energy Turret damage
+
+ def test_static_damageMultiplier_moduleEnergyWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Beam Laser I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_damageMultiplier_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Medium Beam Laser I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/rupture.py b/eos/tests/typeTests/ships/cruisers/rupture.py
new file mode 100755
index 000000000..792339d2e
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/rupture.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Rupture"
+
+ # Minmatar Cruiser Skill Bonus:
+ # 5% bonus to Medium Projectile Turret firing speed per level
+
+ def test_minmatarCruiser_speed_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Dual 180mm AutoCannon I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Dual 425mm AutoCannon I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Cruiser Skill Bonus:
+ # 5% bonus to Medium Projectile Turret damage per level
+
+ def test_minmatarCruiser_damageMultiplier_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "425mm AutoCannon I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "200mm AutoCannon I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/scythe.py b/eos/tests/typeTests/ships/cruisers/scythe.py
new file mode 100755
index 000000000..b2b372d1b
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/scythe.py
@@ -0,0 +1,191 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Scythe"
+
+ # Minmatar Cruiser Skill Bonus:
+ # 20% bonus to mining laser yield per level
+
+ def test_minmatarCruiser_miningAmount_moduleMiningLaser(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Miner I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_miningAmount_moduleMiningLaserDeepCore(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Deep Core Mining Laser I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_miningAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Gas Cloud Harvester I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_miningAmount_other(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Mining Drone I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Cruiser Skill Bonus:
+ # 3.5% bonus to tracking links per level
+
+ def test_minmatarCruiser_maxRangeBonus_moduleTrackingLink(self):
+ self.buildTested = 0
+ attr = "maxRangeBonus"
+ item = "Tracking Link I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.035
+ fLvl = 4
+ fIngame = 1.14
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_maxRangeBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRangeBonus"
+ item = "Tracking Disruptor I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_falloffBonus_moduleTrackingLink(self):
+ self.buildTested = 0
+ attr = "falloffBonus"
+ item = "Tracking Link I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.035
+ fLvl = 4
+ fIngame = 1.14
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_falloffBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "falloffBonus"
+ item = "Tracking Computer I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_trackingSpeedBonus_moduleTrackingLink(self):
+ self.buildTested = 0
+ attr = "trackingSpeedBonus"
+ item = "Tracking Link I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.035
+ fLvl = 4
+ fIngame = 1.14
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_trackingSpeedBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeedBonus"
+ item = "Tracking Enhancer I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 500% bonus to range of tracking links
+
+ def test_static_maxRange_moduleTrackingLink(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Tracking Link I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 6.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Remote Sensor Booster I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/scytheFleetIssue.py b/eos/tests/typeTests/ships/cruisers/scytheFleetIssue.py
new file mode 100755
index 000000000..3230ff84d
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/scytheFleetIssue.py
@@ -0,0 +1,108 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Scythe Fleet Issue"
+
+ # Minmatar Cruiser Skill Bonus:
+ # 5% bonus to Medium Projectile Turret rate of fire per level
+
+ def test_minmatarCruiser_speed_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "720mm Howitzer Artillery I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "150mm Light AutoCannon I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Cruiser Skill Bonus:
+ # 5% bonus to Assault Missile Launcher rate of fire per level
+
+ def test_minmatarCruiser_speed_moduleLauncherMissileAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Assault Missile Launcher I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Cruiser Skill Bonus:
+ # 5% bonus to Heavy Assault Missile Launcher rate of fire per level
+
+ def test_minmatarCruiser_speed_moduleLauncherMissileHeavyAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Assault Missile Launcher I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Cruiser Skill Bonus:
+ # 5% bonus to Heavy Missile Launcher rate of fire per level
+
+ def test_minmatarCruiser_speed_moduleLauncherMissileHeavy(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Missile Launcher I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_speed_moduleLauncherMissileOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Standard Missile Launcher I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/stabber.py b/eos/tests/typeTests/ships/cruisers/stabber.py
new file mode 100755
index 000000000..7de00f24a
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/stabber.py
@@ -0,0 +1,86 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Stabber"
+
+ # Minmatar Cruiser Skill Bonus:
+ # 5% bonus to Medium Projectile Turret firing speed per level
+
+ def test_minmatarCruiser_speed_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "650mm Artillery Cannon I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "125mm Gatling AutoCannon I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Cruiser Skill Bonus:
+ # 5% bonus to max velocity per level
+
+ def test_minmatarruiser_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_maxVelocity_drone(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Warrior I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_maxVelocity_charge(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Hellfire Assault Missile"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/stabberFleetIssue.py b/eos/tests/typeTests/ships/cruisers/stabberFleetIssue.py
new file mode 100755
index 000000000..685e6dc90
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/stabberFleetIssue.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Stabber Fleet Issue"
+
+ # Minmatar Cruiser Skill Bonus:
+ # 5% bonus to Medium Projectile Turret firing speed per level
+
+ def test_minmatarCruiser_speed_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "425mm AutoCannon I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Dual 425mm AutoCannon I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Cruiser Skill Bonus:
+ # 10% bonus to Medium Projectile Turret tracking speed per level
+
+ def test_minmatarCruiser_trackingSpeed_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Dual 180mm AutoCannon I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_trackingSpeed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "280mm Howitzer Artillery I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/thorax.py b/eos/tests/typeTests/ships/cruisers/thorax.py
new file mode 100755
index 000000000..3376461e0
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/thorax.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Thorax"
+
+ # Gallente Cruiser Skill Bonus:
+ # 5% bonus to Medium Hybrid Turret damage per level
+
+ def test_gallenteCruiser_damageMultiplier_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Electron Blaster I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Light Electron Blaster I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Cruiser Skill Bonus:
+ # 5% increase to MicroWarpdrive capacitor bonus per level
+
+ def test_gallenteCruiser_capacitorCapacityMultiplier_moduleAfterburnerSkillrqHSM(self):
+ self.buildTested = 0
+ attr = "capacitorCapacityMultiplier"
+ item = "10MN MicroWarpdrive II"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 0.88
+ fLvl = 4
+ fIngame = 1.03
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_capacitorCapacityMultiplier_moduleAfterburnerSkillrqAB(self):
+ self.buildTested = 0
+ attr = "capacitorCapacityMultiplier"
+ item = "10MN Afterburner I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/vexor.py b/eos/tests/typeTests/ships/cruisers/vexor.py
new file mode 100755
index 000000000..aa64256e6
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/vexor.py
@@ -0,0 +1,216 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Vexor"
+
+ # Gallente Cruiser Skill Bonus:
+ # 5% bonus to Medium Hybrid Turret damage per skill level
+
+ def test_gallenteCruiser_damageMultiplier_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Ion Blaster I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Light Ion Blaster I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Cruiser Skill Bonus:
+ # 10% bonus to drone hitpoints per skill level
+
+ def test_gallenteCruiser_hp_droneCombat(self):
+ self.buildTested = 0
+ item = "Acolyte I"
+ skill = "Gallente Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_hp_droneLogistic(self):
+ self.buildTested = 0
+ item = "Medium Armor Maintenance Bot I"
+ skill = "Gallente Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_hp_droneEwar(self):
+ self.buildTested = 0
+ item = "Berserker TP-900"
+ skill = "Gallente Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_hp_droneCapDrain(self):
+ self.buildTested = 0
+ item = "Infiltrator EV-600"
+ skill = "Gallente Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_hp_droneWeb(self):
+ self.buildTested = 0
+ item = "Berserker SW-900"
+ skill = "Gallente Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_hp_droneMining(self):
+ self.buildTested = 0
+ item = "Harvester Mining Drone"
+ skill = "Gallente Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Cruiser Skill Bonus:
+ # 10% bonus to drone damage per skill level
+
+ def test_gallenteCruiser_damageMultiplier_droneCombat(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Hornet I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_damageMultiplier_other(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual 650mm Repeating Artillery I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Cruiser Skill Bonus:
+ # 10% bonus to drone mining yield per skill level
+
+ def test_gallenteCruiser_miningAmount_droneMining(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Mining Drone I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_miningAmount_other(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Miner I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/vexorNavyIssue.py b/eos/tests/typeTests/ships/cruisers/vexorNavyIssue.py
new file mode 100755
index 000000000..aecb8902e
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/vexorNavyIssue.py
@@ -0,0 +1,216 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Vexor Navy Issue"
+
+ # Gallente Cruiser Skill Bonus:
+ # 5% bonus to Medium Hybrid Turret damage per skill level
+
+ def test_gallenteCruiser_damageMultiplier_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "200mm Railgun I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "75mm Gatling Rail I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Cruiser Skill Bonus:
+ # 10% bonus to drone hitpoints per skill level
+
+ def test_gallenteCruiser_hp_droneCombat(self):
+ self.buildTested = 0
+ item = "Praetor I"
+ skill = "Gallente Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_hp_droneLogistic(self):
+ self.buildTested = 0
+ item = "Medium Shield Maintenance Bot I"
+ skill = "Gallente Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_hp_droneEwar(self):
+ self.buildTested = 0
+ item = "Hobgoblin SD-300"
+ skill = "Gallente Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_hp_droneCapDrain(self):
+ self.buildTested = 0
+ item = "Acolyte EV-300"
+ skill = "Gallente Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_hp_droneWeb(self):
+ self.buildTested = 0
+ item = "Berserker SW-900"
+ skill = "Gallente Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_hp_droneMining(self):
+ self.buildTested = 0
+ item = "Mining Drone I"
+ skill = "Gallente Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Cruiser Skill Bonus:
+ # 10% bonus to drone damage per skill level
+
+ def test_gallenteCruiser_damageMultiplier_droneCombat(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Infiltrator I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_damageMultiplier_other(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Small Hybrid Collision Accelerator I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Cruiser Skill Bonus:
+ # 10% bonus to drone mining yield per skill level
+
+ def test_gallenteCruiser_miningAmount_droneMining(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Harvester Mining Drone"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_miningAmount_other(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Miner I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/cruisers/vigilant.py b/eos/tests/typeTests/ships/cruisers/vigilant.py
new file mode 100755
index 000000000..a5bdb3d42
--- /dev/null
+++ b/eos/tests/typeTests/ships/cruisers/vigilant.py
@@ -0,0 +1,131 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Vigilant"
+
+ # Gallente Cruiser Skill Bonus:
+ # 10% bonus to Medium Hybrid Turret falloff per level
+
+ def test_gallenteCruiser_falloff_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "Heavy Neutron Blaster I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_falloff_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "150mm Railgun I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Cruiser Skill Bonus:
+ # 10% bonus to the velocity factor of stasis webifiers per level
+
+ def test_minmatarCruiser_speedFactor_moduleStasisWeb(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "Stasis Webifier I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_speedFactor_moduleStasisWebCivilian(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "Civilian Stasis Webifier"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_speedFactor_moduleOther(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "10MN Afterburner I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_speedFactor_other(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "Berserker SW-900"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 75% bonus to Medium Hybrid Turret damage
+
+ def test_static_damageMultiplier_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "250mm Railgun I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.75
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "350mm Railgun I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/destroyers/__init__.py b/eos/tests/typeTests/ships/destroyers/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/destroyers/catalyst.py b/eos/tests/typeTests/ships/destroyers/catalyst.py
new file mode 100755
index 000000000..58a78b29e
--- /dev/null
+++ b/eos/tests/typeTests/ships/destroyers/catalyst.py
@@ -0,0 +1,101 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Catalyst"
+
+ # Destroyer Skill Bonus:
+ # 10% Bonus to Small Hybrid Turret tracking speed per level
+
+ def test_destroyers_trackingSpeed_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Light Ion Blaster I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_trackingSpeed_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Dual 150mm Railgun I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Destroyer Skill Bonus:
+ # 10% bonus to Small Hybrid Turret falloff per level
+
+ def test_destroyers_falloff_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "75mm Gatling Rail I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_falloff_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "Heavy Electron Blaster I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonuses:
+ # Bonus: 50% bonus to optimal range for small hybrid turrets
+
+ def test_static_maxRange_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Light Neutron Blaster I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxRange_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Neutron Blaster Cannon I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/destroyers/coercer.py b/eos/tests/typeTests/ships/destroyers/coercer.py
new file mode 100755
index 000000000..a46b5e565
--- /dev/null
+++ b/eos/tests/typeTests/ships/destroyers/coercer.py
@@ -0,0 +1,101 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Coercer"
+
+ # Destroyer Skill Bonus:
+ # 10% bonus to Small Energy Turret tracking speed per level
+
+ def test_destroyers_trackingSpeed_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Gatling Pulse Laser I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_trackingSpeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Quad Light Beam Laser I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Destroyer Skill Bonus:
+ # 10% bonus to Small Energy Turret Capacitor usage per level
+
+ def test_destroyers_capacitorNeed_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Dual Light Beam Laser I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Heavy Pulse Laser I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonuses:
+ # 50% bonus to optimal range for small energy turrets
+
+ def test_static_maxRange_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Medium Pulse Laser I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxRange_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Heavy Beam Laser I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/destroyers/cormorant.py b/eos/tests/typeTests/ships/destroyers/cormorant.py
new file mode 100755
index 000000000..2866c5d38
--- /dev/null
+++ b/eos/tests/typeTests/ships/destroyers/cormorant.py
@@ -0,0 +1,101 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Cormorant"
+
+ # Destroyer Skill Bonus:
+ # 10% bonus to Small Hybrid Turret tracking speed per level
+
+ def test_destroyers_trackingSpeed_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "125mm Railgun I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_trackingSpeed_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Heavy Ion Blaster I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Destroyer Skill Bonus:
+ # 10% bonus to Small Hybrid Turret optimal range per level
+
+ def test_destroyers_maxRange_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Light Neutron Blaster I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_maxRange_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Dual 150mm Railgun I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonuses:
+ # Bonus: 50% bonus to optimal range for small hybrid turrets
+
+ def test_static_maxRange_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "75mm Gatling Rail I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxRange_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "200mm Railgun I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/destroyers/thrasher.py b/eos/tests/typeTests/ships/destroyers/thrasher.py
new file mode 100755
index 000000000..03df384fb
--- /dev/null
+++ b/eos/tests/typeTests/ships/destroyers/thrasher.py
@@ -0,0 +1,101 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Thrasher"
+
+ # Destroyer Skill Bonus:
+ # 10% bonus to Small Projectile Turret tracking speed per level
+
+ def test_destroyers_trackingSpeed_moduleProjectileWeaponSmall(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "125mm Gatling AutoCannon I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_trackingSpeed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "425mm AutoCannon I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Destroyer Skill Bonus:
+ # 5% bonus to Small Projectile Turret damage per level
+
+ def test_destroyers_damageMultiplier_moduleProjectileWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "280mm Howitzer Artillery I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual 180mm AutoCannon I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonuses:
+ # Bonus: 50% bonus to optimal range for small projectile turrets
+
+ def test_static_maxRange_moduleProjectileWeaponSmall(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "150mm Light AutoCannon I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxRange_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "220mm Vulcan AutoCannon I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/dreadnoughts/__init__.py b/eos/tests/typeTests/ships/dreadnoughts/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/dreadnoughts/moros.py b/eos/tests/typeTests/ships/dreadnoughts/moros.py
new file mode 100755
index 000000000..3ed849598
--- /dev/null
+++ b/eos/tests/typeTests/ships/dreadnoughts/moros.py
@@ -0,0 +1,90 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Moros"
+
+ # Gallente Dreadnought Skill Bonus:
+ # 5% bonus to Capital Hybrid Turret damage per level
+
+ def test_gallenteDreadnought_damageMultiplier_moduleHybridWeaponCapital(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual 1000mm Railgun I"
+ skill = "Gallente Dreadnought"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteDreadnought_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Neutron Blaster Cannon I"
+ skill = "Gallente Dreadnought"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Dreadnought Skill Bonus:
+ # 5% bonus to Capital Hybrid Turret damage per level
+
+ def test_gallenteDreadnought_speed_moduleHybridWeaponCapital(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Ion Siege Blaster Cannon I"
+ skill = "Gallente Dreadnought"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteDreadnought_speed_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Electron Blaster I"
+ skill = "Gallente Dreadnought"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Advanced Spaceship Command Skill Bonus:
+ # 5% Bonus to the agility of ship per skill level
+ # Moved from Advanced Spaceship Command skill tests, not listed as bonus of ship
+
+ def test_advancedSpaceshipCommand_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Advanced Spaceship Command"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/dreadnoughts/naglfar.py b/eos/tests/typeTests/ships/dreadnoughts/naglfar.py
new file mode 100755
index 000000000..125f85fad
--- /dev/null
+++ b/eos/tests/typeTests/ships/dreadnoughts/naglfar.py
@@ -0,0 +1,90 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Naglfar"
+
+ # Minmatar Dreadnought Skill Bonus:
+ # 5% bonus to Capital Projectile damage per level
+
+ def test_minmatarDreadnought_damageMultiplier_moduleProjectileWeaponCapital(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "6x2500mm Repeating Artillery I"
+ skill = "Minmatar Dreadnought"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarDreadnought_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "125mm Gatling AutoCannon I"
+ skill = "Minmatar Dreadnought"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Dreadnought Skill Bonus:
+ # 5% bonus to Capital Projectile rate of fire per level
+
+ def test_minmatarDreadnought_speed_moduleProjectileWeaponCapital(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Quad 3500mm Siege Artillery I"
+ skill = "Minmatar Dreadnought"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarDreadnought_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "1400mm Howitzer Artillery I"
+ skill = "Minmatar Dreadnought"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Advanced Spaceship Command Skill Bonus:
+ # 5% Bonus to the agility of ship per skill level
+ # Moved from Advanced Spaceship Command skill tests, not listed as bonus of ship
+
+ def test_advancedSpaceshipCommand_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Advanced Spaceship Command"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/dreadnoughts/phoenix.py b/eos/tests/typeTests/ships/dreadnoughts/phoenix.py
new file mode 100755
index 000000000..7372cf3c3
--- /dev/null
+++ b/eos/tests/typeTests/ships/dreadnoughts/phoenix.py
@@ -0,0 +1,120 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Phoenix"
+
+ # Caldari Dreadnought Skill Bonus:
+ # 5% bonus to kinetic missile damage per skill level
+
+ def test_caldariDreadnought_kineticDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rift Citadel Torpedo"
+ skill = "Caldari Dreadnought"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariDreadnought_kineticDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rajas Citadel Cruise Missile"
+ skill = "Caldari Dreadnought"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariDreadnought_kineticDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Torpedo"
+ skill = "Caldari Dreadnought"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Dreadnought Skill Bonus:
+ # 5% bonus to Capital Launcher rate of fire per skill level
+
+ def test_caldariDreadnought_speed_moduleLauncherMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Citadel Torpedo Launcher I"
+ skill = "Caldari Dreadnought"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariDreadnought_speed_moduleLauncherMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Citadel Cruise Launcher I"
+ skill = "Caldari Dreadnought"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariDreadnought_speed_moduleLauncherMissileOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Assault Missile Launcher I"
+ skill = "Caldari Dreadnought"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Advanced Spaceship Command Skill Bonus:
+ # 5% Bonus to the agility of ship per skill level
+ # Moved from Advanced Spaceship Command skill tests, not listed as bonus of ship
+
+ def test_advancedSpaceshipCommand_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Advanced Spaceship Command"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/dreadnoughts/revelation.py b/eos/tests/typeTests/ships/dreadnoughts/revelation.py
new file mode 100755
index 000000000..8760c3987
--- /dev/null
+++ b/eos/tests/typeTests/ships/dreadnoughts/revelation.py
@@ -0,0 +1,90 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Revelation"
+
+ # Amarr Dreadnought Skill Bonus:
+ # 10% reduction in Capital Energy Turret capacitor use per skill level
+
+ def test_amarrDreadnought_capacitorNeed_moduleEnergyWeaponCapital(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Dual Giga Beam Laser I"
+ skill = "Amarr Dreadnought"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrDreadnought_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Tachyon Beam Laser I"
+ skill = "Amarr Dreadnought"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Dreadnought Skill Bonus:
+ # 5% bonus to Capital Energy Turret rate of fire per skill level
+
+ def test_amarrDreadnought_speed_moduleEnergyWeaponCapital(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Dual Giga Pulse Laser I"
+ skill = "Amarr Dreadnought"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrDreadnought_speed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Focused Medium Beam Laser I"
+ skill = "Amarr Dreadnought"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Advanced Spaceship Command Skill Bonus:
+ # 5% Bonus to the agility of ship per skill level
+ # Moved from Advanced Spaceship Command skill tests, not listed as bonus of ship
+
+ def test_advancedSpaceshipCommand_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Advanced Spaceship Command"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/electronicAttackShips/__init__.py b/eos/tests/typeTests/ships/electronicAttackShips/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/electronicAttackShips/hyena.py b/eos/tests/typeTests/ships/electronicAttackShips/hyena.py
new file mode 100755
index 000000000..732fd5e79
--- /dev/null
+++ b/eos/tests/typeTests/ships/electronicAttackShips/hyena.py
@@ -0,0 +1,137 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Hyena"
+
+ # Minmatar Frigate Skill Bonus:
+ # 5% increase to MicroWarpdrive capacitor bonus per level
+
+ def test_minmatarFrigate_capacitorCapacityMultiplier_moduleAfterburnerSkillrqHSM(self):
+ self.buildTested = 0
+ attr = "capacitorCapacityMultiplier"
+ item = "1MN MicroWarpdrive II"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 0.88
+ fLvl = 4
+ fIngame = 1.03
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_capacitorCapacityMultiplier_moduleAfterburnerSkillrqAB(self):
+ self.buildTested = 0
+ attr = "capacitorCapacityMultiplier"
+ item = "1MN Afterburner I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Frigate Skill Bonus:
+ # 7.5% bonus to effectiveness of target painters per level
+
+ def test_minmatarFrigate_signatureRadiusBonus_moduleTargetPainter(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "Target Painter I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_signatureRadiusBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "1MN MicroWarpdrive I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Electronic Attack Ships Skill Bonus:
+ # 20% bonus to stasis webifier range per level
+
+ def test_electronicAttackShips_maxRange_moduleStasisWeb(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Stasis Webifier I"
+ skill = "Electronic Attack Ships"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_electronicAttackShips_maxRange_moduleStasisWebCivilian(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Civilian Stasis Webifier"
+ skill = "Electronic Attack Ships"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_electronicAttackShips_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Warp Disruptor I"
+ skill = "Electronic Attack Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Electronic Attack Ships Skill Bonus:
+ # 3% reduction in signature radius per level
+
+ def test_electronicAttackShips_signatureRadius_ship(self):
+ self.buildTested = 0
+ attr = "signatureRadius"
+ skill = "Electronic Attack Ships"
+ iLvl = 1
+ iIngame = 0.97
+ fLvl = 4
+ fIngame = 0.88
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/electronicAttackShips/keres.py b/eos/tests/typeTests/ships/electronicAttackShips/keres.py
new file mode 100755
index 000000000..4f4decf4e
--- /dev/null
+++ b/eos/tests/typeTests/ships/electronicAttackShips/keres.py
@@ -0,0 +1,198 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Keres"
+
+ # Gallente Frigate Skill Bonus:
+ # 5% bonus to remote sensor dampener effectiveness per level
+
+ def test_gallenteFrigate_maxTargetRangeBonus_moduleRemoteSensorDamper(self):
+ self.buildTested = 0
+ attr = "maxTargetRangeBonus"
+ item = "Remote Sensor Dampener I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_maxTargetRangeBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxTargetRangeBonus"
+ item = "Remote Sensor Booster I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_scanResolutionBonus_moduleRemoteSensorDamper(self):
+ self.buildTested = 0
+ attr = "scanResolutionBonus"
+ item = "Remote Sensor Dampener I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_scanResolutionBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanResolutionBonus"
+ item = "Remote Sensor Booster I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Frigate Skill Bonus:
+ # 10% reduction in remote sensor dampener capacitor need per level
+
+ def test_gallenteFrigate_capacitorNeed_moduleRemoteSensorDamper(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Remote Sensor Dampener I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Tracking Link I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Electronic Attack Ships Skill Bonus:
+ # 10% bonus to warp disruptor range
+
+ def test_electronicAttackShips_maxRange_moduleWarpScrambler(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Warp Scrambler I"
+ skill = "Electronic Attack Ships"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_electronicAttackShips_maxRange_moduleWarpScramblerCivilian(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Civilian Warp Disruptor"
+ skill = "Electronic Attack Ships"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_electronicAttackShips_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Stasis Webifier I"
+ skill = "Electronic Attack Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Electronic Attack Ships Skill Bonus:
+ # 10% reduction in warp disruptor capacitor need per level
+
+ def test_electronicAttackShips_capacitorNeed_moduleWarpScrambler(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Warp Disruptor I"
+ skill = "Electronic Attack Ships"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_electronicAttackShips_capacitorNeed_moduleWarpScramblerCivilian(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Warp Disruptor"
+ skill = "Electronic Attack Ships"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_electronicAttackShips_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Stasis Webifier I"
+ skill = "Electronic Attack Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/electronicAttackShips/kitsune.py b/eos/tests/typeTests/ships/electronicAttackShips/kitsune.py
new file mode 100755
index 000000000..66e23c64e
--- /dev/null
+++ b/eos/tests/typeTests/ships/electronicAttackShips/kitsune.py
@@ -0,0 +1,227 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Kitsune"
+
+ # Caldari Frigate Skill Bonus:
+ # 20% bonus to ECM target jammer strength per level
+
+ def test_caldariFrigate_scanGravimetricStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrengthBonus"
+ item = "ECM - Ion Field Projector I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_scanGravimetricStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_scanLadarStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanLadarStrengthBonus"
+ item = "ECM - White Noise Generator I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_scanLadarStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanLadarStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_scanMagnetometricStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrengthBonus"
+ item = "ECM - Spatial Destabilizer I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_scanMagnetometricStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_scanRadarStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanRadarStrengthBonus"
+ item = "ECM - Phase Inverter I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_scanRadarStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanRadarStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Frigate Skill Bonus:
+ # 10% reduction in ECM target jammers' capacitor need per level
+
+ def test_caldariFrigate_capacitorNeed_moduleEcm(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "ECM - Multispectral Jammer I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "ECM Burst I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Electronic Attack Ships Skill Bonus:
+ # 10% bonus to ECM target jammer optimal range per level
+
+ def test_electronicAttackShips_maxRange_moduleEcm(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "ECM - Multispectral Jammer I"
+ skill = "Electronic Attack Ships"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_electronicAttackShips_falloff_moduleEcm(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "ECM - Multispectral Jammer I"
+ skill = "Electronic Attack Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_electronicAttackShips_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "ECCM Projector I"
+ skill = "Electronic Attack Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Electronic Attack Ships Skill Bonus:
+ # 5% bonus to capacitor capacity per level
+
+ def test_electronicAttackShips_capacitorCapacity_ship(self):
+ self.buildTested = 0
+ attr = "capacitorCapacity"
+ skill = "Electronic Attack Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/electronicAttackShips/sentinel.py b/eos/tests/typeTests/ships/electronicAttackShips/sentinel.py
new file mode 100755
index 000000000..a41bd7f3c
--- /dev/null
+++ b/eos/tests/typeTests/ships/electronicAttackShips/sentinel.py
@@ -0,0 +1,248 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Sentinel"
+
+ # Amarr Frigate Skill Bonus:
+ # 20% bonus to energy vampire transfer amount per level
+
+ def test_amarrFrigate_powerTransferAmount_moduleEnergyVampire(self):
+ self.buildTested = 0
+ attr = "powerTransferAmount"
+ item = "Small Nosferatu I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_powerTransferAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "powerTransferAmount"
+ item = "Small Energy Transfer Array I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Frigate Skill Bonus:
+ # 20% bonus to energy neutralizer transfer amount per level
+
+ def test_amarrFrigate_energyDestabilizationAmount_moduleEnergyDestabilizer(self):
+ self.buildTested = 0
+ attr = "energyDestabilizationAmount"
+ item = "Small Energy Neutralizer I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_energyDestabilizationAmount_other(self):
+ self.buildTested = 0
+ attr = "energyDestabilizationAmount"
+ item = "Infiltrator EV-600"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Frigate Skill Bonus:
+ # 5% bonus to effectiveness of tracking disruptors per level
+
+ def test_amarrFrigate_maxRangeBonus_moduleTrackingDisruptor(self):
+ self.buildTested = 0
+ attr = "maxRangeBonus"
+ item = "Tracking Disruptor I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_maxRangeBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRangeBonus"
+ item = "Tracking Link I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_falloffBonus_moduleTrackingDisruptor(self):
+ self.buildTested = 0
+ attr = "falloffBonus"
+ item = "Tracking Disruptor I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_falloffBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "falloffBonus"
+ item = "Tracking Computer I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_trackingSpeedBonus_moduleTrackingDisruptor(self):
+ self.buildTested = 0
+ attr = "trackingSpeedBonus"
+ item = "Tracking Disruptor I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_trackingSpeedBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeedBonus"
+ item = "Tracking Enhancer I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Electronic Attack Ships Skill Bonus:
+ # 40% bonus to energy vampire range per level
+
+ def test_electronicAttackShips_powerTransferRange_moduleEnergyVampire(self):
+ self.buildTested = 0
+ attr = "powerTransferRange"
+ item = "Small Nosferatu I"
+ skill = "Electronic Attack Ships"
+ iLvl = 1
+ iIngame = 1.4
+ fLvl = 4
+ fIngame = 2.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_electronicAttackShips_powerTransferRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "powerTransferRange"
+ item = "Small Energy Transfer Array I"
+ skill = "Electronic Attack Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Electronic Attack Ships Skill Bonus:
+ # 40% bonus to energy neutralizer range per level
+
+ def test_electronicAttackShips_energyDestabilizationRange_moduleEnergyDestabilizer(self):
+ self.buildTested = 0
+ attr = "energyDestabilizationRange"
+ item = "Small Energy Neutralizer I"
+ skill = "Electronic Attack Ships"
+ iLvl = 1
+ iIngame = 1.4
+ fLvl = 4
+ fIngame = 2.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_electronicAttackShips_energyDestabilizationRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "energyDestabilizationRange"
+ item = "Infiltrator EV-600"
+ skill = "Electronic Attack Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Electronic Attack Ships Skill Bonus:
+ # 5% reduction in capacitor recharge time per level
+
+ def test_electronicAttackShips_rechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "rechargeRate"
+ skill = "Electronic Attack Ships"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/exhumers/__init__.py b/eos/tests/typeTests/ships/exhumers/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/exhumers/hulk.py b/eos/tests/typeTests/ships/exhumers/hulk.py
new file mode 100755
index 000000000..bd3ac4551
--- /dev/null
+++ b/eos/tests/typeTests/ships/exhumers/hulk.py
@@ -0,0 +1,225 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Hulk"
+
+ # Mining Barge Skill Bonus:
+ # 3% better yield for Strip Miners per level
+
+ def test_miningBarge_miningAmount_moduleFrequencyMiningLaser(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Modulated Strip Miner II"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_moduleStripMiner(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Strip Miner I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_moduleIceHarvester(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Ice Harvester I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_moduleOtherSkillrqDeepCoreMining(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Deep Core Mining Laser I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Gas Cloud Harvester I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_otherSkillrqMining(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Mining Drone I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Exhumers Skill Bonus:
+ # 3% better yield for Strip Miners per level
+
+ def test_exhumers_miningAmount_moduleFrequencyMiningLaser(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Modulated Strip Miner II"
+ skill = "Exhumers"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_exhumers_miningAmount_moduleStripMiner(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Strip Miner I"
+ skill = "Exhumers"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_exhumers_miningAmount_moduleIceHarvester(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Ice Harvester I"
+ skill = "Exhumers"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_exhumers_miningAmount_moduleOtherSkillrqDeepCoreMining(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Deep Core Mining Laser I"
+ skill = "Exhumers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_exhumers_miningAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Gas Cloud Harvester I"
+ skill = "Exhumers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_exhumers_miningAmount_otherSkillrqMining(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Mining Drone I"
+ skill = "Exhumers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Exhumers Skill Bonus:
+ # 3% reduction in Ice Harvester duration per level
+
+ def test_exhumers_duration_moduleIceHarvester(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Ice Harvester I"
+ skill = "Exhumers"
+ iLvl = 1
+ iIngame = 0.97
+ fLvl = 4
+ fIngame = 0.88
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_exhumers_duration_moduleOther(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Strip Miner I"
+ skill = "Exhumers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/exhumers/mackinaw.py b/eos/tests/typeTests/ships/exhumers/mackinaw.py
new file mode 100755
index 000000000..c940e8746
--- /dev/null
+++ b/eos/tests/typeTests/ships/exhumers/mackinaw.py
@@ -0,0 +1,190 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Mackinaw"
+
+ # Mining Barge Skill Bonus:
+ # 3% better yield for Strip Miners per level
+
+ def test_miningBarge_miningAmount_moduleFrequencyMiningLaser(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Modulated Strip Miner II"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_moduleStripMiner(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Strip Miner I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_moduleIceHarvester(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Ice Harvester I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_moduleOtherSkillrqDeepCoreMining(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Deep Core Mining Laser I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Gas Cloud Harvester I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_otherSkillrqMining(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Mining Drone I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Exhumers Skill Bonus:
+ # 5% reduction in Ice Harvester duration per level
+
+ def test_exhumers_duration_moduleIceHarvester(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Ice Harvester I"
+ skill = "Exhumers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_exhumers_duration_moduleOther(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Strip Miner I"
+ skill = "Exhumers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 100% bonus Ice Harvester yield
+
+ def test_static_miningAmount_moduleIceHarvester(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Ice Harvester I"
+ ship_other = "Hulk"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_miningAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Strip Miner I"
+ ship_other = "Hulk"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 25% penalty to ice harvester duration
+
+ def test_static_duration_moduleIceHarvester(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Ice Harvester I"
+ ship_other = "Hulk"
+ iIngame = 1.0
+ fIngame = 1.25
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_duration_moduleOther(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Strip Miner I"
+ ship_other = "Hulk"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/exhumers/skiff.py b/eos/tests/typeTests/ships/exhumers/skiff.py
new file mode 100755
index 000000000..eb0e2627a
--- /dev/null
+++ b/eos/tests/typeTests/ships/exhumers/skiff.py
@@ -0,0 +1,160 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Skiff"
+
+ # Mining Barge Skill Bonus:
+ # 3% better yield for Strip Miners per level
+
+ def test_miningBarge_miningAmount_moduleFrequencyMiningLaser(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Modulated Strip Miner II"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_moduleStripMiner(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Strip Miner I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_moduleIceHarvester(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Ice Harvester I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_moduleOtherSkillrqDeepCoreMining(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Deep Core Mining Laser I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Gas Cloud Harvester I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_otherSkillrqMining(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Mining Drone I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Exhumers Skill Bonus:
+ # 60% bonus to Mercoxit Mining Crystal yield multiplier per level
+
+ def test_exhumers_specialisationAsteroidYieldMultiplier_chargeMiningCrystalMercoxit(self):
+ self.buildTested = 0
+ attr = "specialisationAsteroidYieldMultiplier"
+ item = "Mercoxit Mining Crystal I"
+ skill = "Exhumers"
+ iLvl = 1
+ iIngame = 1.6
+ fLvl = 4
+ fIngame = 3.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_exhumers_specialisationAsteroidYieldMultiplier_chargeOther(self):
+ self.buildTested = 0
+ attr = "specialisationAsteroidYieldMultiplier"
+ item = "Bistot Mining Crystal I"
+ skill = "Exhumers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Exhumers Skill Bonus:
+ # 20% reduced chance of Mercoxit gas cloud forming per level
+
+ def test_exhumers_damageCloudChance_moduleDeepCoreMiner(self):
+ self.buildTested = 0
+ attr = "damageCloudChance"
+ item = "Deep Core Mining Laser I"
+ skill = "Exhumers"
+ iLvl = 1
+ iIngame = 0.8
+ fLvl = 4
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # +2 warp strength
+
+ def test_static_warpScrambleStatus_ship(self):
+ self.buildTested = 0
+ attr = "warpScrambleStatus"
+ ingame = -2.0
+ eos = self.getShipAttr(attr, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
diff --git a/eos/tests/typeTests/ships/forceReconShips/__init__.py b/eos/tests/typeTests/ships/forceReconShips/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/forceReconShips/arazu.py b/eos/tests/typeTests/ships/forceReconShips/arazu.py
new file mode 100755
index 000000000..18e9bc70a
--- /dev/null
+++ b/eos/tests/typeTests/ships/forceReconShips/arazu.py
@@ -0,0 +1,270 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Arazu"
+
+ # Gallente Cruiser Skill Bonus:
+ # 5% bonus to Medium Hybrid Turret damage per level
+
+ def test_gallenteCruiser_damageMultiplier_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "250mm Railgun I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Light Neutron Blaster I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Cruiser Skill Bonus:
+ # 5% bonus to Remote Sensor Dampener effectiveness per level
+
+ def test_gallenteCruiser_maxTargetRangeBonus_moduleRemoteSensorDamper(self):
+ self.buildTested = 0
+ attr = "maxTargetRangeBonus"
+ item = "Remote Sensor Dampener I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_maxTargetRangeBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxTargetRangeBonus"
+ item = "Remote Sensor Booster I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_scanResolutionBonus_moduleRemoteSensorDamper(self):
+ self.buildTested = 0
+ attr = "scanResolutionBonus"
+ item = "Remote Sensor Dampener I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_scanResolutionBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanResolutionBonus"
+ item = "Remote Sensor Booster I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Recon Ships Skill Bonus:
+ # 20% bonus to warp disruptor range per level
+
+ def test_reconShips_maxRange_moduleWarpScrambler(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Warp Disruptor I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_maxRange_moduleWarpScramblerCivilian(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Civilian Warp Disruptor"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Stasis Webifier I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Recon Ships Skill Bonus:
+ # -96% to -100% reduced CPU need for cloaking device per level
+ # Static part
+
+ def test_static_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 0.05
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Energized Magnetic Membrane I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Recon Ships Skill Bonus:
+ # -96% to -100% reduced CPU need for cloaking device per level
+ # Dynamic part
+
+ def test_reconShips_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 0.04
+ fLvl = 4
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Reinforced Bulkheads I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 5 seconds cloak reactivation delay
+
+ def test_static_moduleReactivationDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 5000.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ iItem = "Prototype Cloaking Device I"
+ iIngame = 5000.0
+ fItem = "Covert Cynosural Field Generator I"
+ fIngame = 30000.0
+ iEos = self.getItemAttr(attr, iItem, ship=self.ship)
+ fEos = self.getItemAttr(attr, fItem, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 80% reduction in liquid ozone consumption for cynosural field generation
+
+ def test_static_consumptionQuantity_moduleCynosuralField(self):
+ self.buildTested = 0
+ attr = "consumptionQuantity"
+ item = "Covert Cynosural Field Generator I"
+ ship_other = "Helios"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 50% reduction in cynosural field duration
+
+ def test_static_duration_moduleCynosuralField(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Cynosural Field Generator I"
+ ship_other = "Helios"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/forceReconShips/falcon.py b/eos/tests/typeTests/ships/forceReconShips/falcon.py
new file mode 100755
index 000000000..cf29b872a
--- /dev/null
+++ b/eos/tests/typeTests/ships/forceReconShips/falcon.py
@@ -0,0 +1,315 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Falcon"
+
+ # Caldari Cruiser Skill Bonus:
+ # 5% Bonus to Medium Hybrid Damage Per Level
+
+ def test_caldariCruiser_damageMultiplier_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual 150mm Railgun I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "75mm Gatling Rail I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Cruiser Skill Bonus:
+ # 10% Bonus to ECM Target Jammer capacitor use per level
+
+ def test_caldariCruiser_capacitorNeed_moduleECM(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "ECM - Phase Inverter I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "ECM Burst I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Recon Ships Skill Bonus:
+ # 30% bonus to ECM Target Jammer strength per level
+
+ def test_reconShips_scanGravimetricStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrengthBonus"
+ item = "ECM - White Noise Generator I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.3
+ fLvl = 4
+ fIngame = 2.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_scanGravimetricStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_scanLadarStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanLadarStrengthBonus"
+ item = "ECM - Multispectral Jammer I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.3
+ fLvl = 4
+ fIngame = 2.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_scanLadarStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanLadarStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_scanMagnetometricStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrengthBonus"
+ item = "ECM - Ion Field Projector I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.3
+ fLvl = 4
+ fIngame = 2.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_scanMagnetometricStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_scanRadarStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanRadarStrengthBonus"
+ item = "ECM - Spatial Destabilizer I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.3
+ fLvl = 4
+ fIngame = 2.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_scanRadarStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanRadarStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Recon Ships Skill Bonus:
+ # -96% to -100% reduced CPU need for cloaking device per level
+ # Static part
+
+ def test_static_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 0.05
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Warp Disruptor I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Recon Ships Skill Bonus:
+ # -96% to -100% reduced CPU need for cloaking device per level
+ # Dynamic part
+
+ def test_reconShips_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 0.04
+ fLvl = 4
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Warp Core Stabilizer I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 5 seconds cloak reactivation delay
+
+ def test_static_moduleReactivationDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 5000.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ iItem = "Prototype Cloaking Device I"
+ iIngame = 5000.0
+ fItem = "Covert Cynosural Field Generator I"
+ fIngame = 30000.0
+ iEos = self.getItemAttr(attr, iItem, ship=self.ship)
+ fEos = self.getItemAttr(attr, fItem, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 80% reduction in liquid ozone consumption for cynosural field generation
+
+ def test_static_consumptionQuantity_moduleCynosuralField(self):
+ self.buildTested = 0
+ attr = "consumptionQuantity"
+ item = "Cynosural Field Generator I"
+ ship_other = "Buzzard"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 50% reduction in cynosural field duration
+
+ def test_static_duration_moduleCynosuralField(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Covert Cynosural Field Generator I"
+ ship_other = "Buzzard"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/forceReconShips/pilgrim.py b/eos/tests/typeTests/ships/forceReconShips/pilgrim.py
new file mode 100755
index 000000000..65ecdb6df
--- /dev/null
+++ b/eos/tests/typeTests/ships/forceReconShips/pilgrim.py
@@ -0,0 +1,448 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Pilgrim"
+
+ # Amarr Cruiser Skill Bonus:
+ # 5% bonus to Tracking Disruptor effectiveness per level
+
+ def test_amarrCruiser_maxRangeBonus_moduleTrackingDisruptor(self):
+ self.buildTested = 0
+ attr = "maxRangeBonus"
+ item = "Tracking Disruptor I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_maxRangeBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRangeBonus"
+ item = "Tracking Link I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_falloffBonus_moduleTrackingDisruptor(self):
+ self.buildTested = 0
+ attr = "falloffBonus"
+ item = "Tracking Disruptor I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_falloffBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "falloffBonus"
+ item = "Tracking Enhancer I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_trackingSpeedBonus_moduleTrackingDisruptor(self):
+ self.buildTested = 0
+ attr = "trackingSpeedBonus"
+ item = "Tracking Disruptor I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_trackingSpeedBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeedBonus"
+ item = "Tracking Computer I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Cruiser Skill Bonus:
+ # 10% bonus to drone hit points per level
+
+ def test_amarrCruiser_hp_droneCombat(self):
+ self.buildTested = 0
+ item = "Berserker I"
+ skill = "Amarr Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_hp_droneLogistic(self):
+ self.buildTested = 0
+ item = "Medium Shield Maintenance Bot I"
+ skill = "Amarr Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_hp_droneEwar(self):
+ self.buildTested = 0
+ item = "Acolyte TD-300"
+ skill = "Amarr Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_hp_droneCapDrain(self):
+ self.buildTested = 0
+ item = "Infiltrator EV-600"
+ skill = "Amarr Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_hp_droneWeb(self):
+ self.buildTested = 0
+ item = "Berserker SW-900"
+ skill = "Amarr Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_hp_droneMining(self):
+ self.buildTested = 0
+ item = "Harvester Mining Drone"
+ skill = "Amarr Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Cruiser Skill Bonus:
+ # 10% bonus to drone damage per level
+
+ def test_amarrCruiser_damageMultiplier_droneCombat(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Infiltrator I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_damageMultiplier_other(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Pulse Laser I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Recon Ships Skill Bonus:
+ # 20% bonus to Energy Vampire transfer amount per level
+
+ def test_reconShips_powerTransferAmount_moduleEnergyVampire(self):
+ self.buildTested = 0
+ attr = "powerTransferAmount"
+ item = "Heavy Nosferatu I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_powerTransferAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "powerTransferAmount"
+ item = "Large Energy Transfer Array I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Recon Ships Skill Bonus:
+ # 20% bonus to Energy Neutralizer transfer amount per level
+
+ def test_reconShips_energyDestabilizationAmount_moduleEnergyDestabilizer(self):
+ self.buildTested = 0
+ attr = "energyDestabilizationAmount"
+ item = "Small Energy Neutralizer I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_energyDestabilizationAmount_other(self):
+ self.buildTested = 0
+ attr = "energyDestabilizationAmount"
+ item = "Praetor EV-900"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Recon Ships Skill bonus:
+ # 0.01% bonus to Energy Neutralizer range per level
+
+ def test_reconShips_energyDestabilizationRange_moduleEnergyDestabilizer(self):
+ self.buildTested = 0
+ attr = "energyDestabilizationRange"
+ item = "Heavy Energy Neutralizer I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.0001
+ fLvl = 4
+ fIngame = 1.0004
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Recon Ships Skill Bonus:
+ # -96% to -100% reduced CPU need for cloaking device per level
+ # Static part
+
+ def test_static_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 0.05
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "ECCM Projector I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Recon Ships Skill Bonus:
+ # -96% to -100% reduced CPU need for cloaking device per level
+ # Dynamic part
+
+ def test_reconShips_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 0.04
+ fLvl = 4
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Large EMP Smartbomb I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 5 seconds cloak reactivation delay
+
+ def test_static_moduleReactivationDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 5000.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ iItem = "Prototype Cloaking Device I"
+ iIngame = 5000.0
+ fItem = "Covert Cynosural Field Generator I"
+ fIngame = 30000.0
+ iEos = self.getItemAttr(attr, iItem, ship=self.ship)
+ fEos = self.getItemAttr(attr, fItem, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 80% reduction in liquid ozone consumption for cynosural field generation
+
+ def test_static_consumptionQuantity_moduleCynosuralField(self):
+ self.buildTested = 0
+ attr = "consumptionQuantity"
+ item = "Covert Cynosural Field Generator I"
+ ship_other = "Anathema"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 50% reduction in cynosural field duration
+
+ def test_static_duration_moduleCynosuralField(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Covert Cynosural Field Generator I"
+ ship_other = "Anathema"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/forceReconShips/rapier.py b/eos/tests/typeTests/ships/forceReconShips/rapier.py
new file mode 100755
index 000000000..d0c2a438c
--- /dev/null
+++ b/eos/tests/typeTests/ships/forceReconShips/rapier.py
@@ -0,0 +1,240 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Rapier"
+
+ # Minmatar Cruiser Skill Bonus:
+ # 5% bonus to Medium Projectile Turret rate of fire per level per level
+
+ def test_minmatarCruiser_speed_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Dual 180mm AutoCannon I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "280mm Howitzer Artillery I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Cruiser Skill Bonus:
+ # 7.5% bonus to target painter effectiveness per level
+
+ def test_minmatarCruiser_signatureRadiusBonus_moduleTargetPainter(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "Target Painter I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_signatureRadiusBonus_other(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "Valkyrie TP-600"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Recon Ships Skill Bonus:
+ # 60% bonus to stasis webifier range per level
+
+ def test_reconShips_maxRange_moduleStasisWeb(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Stasis Webifier I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.6
+ fLvl = 4
+ fIngame = 3.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_maxRange_moduleStasisWebCivilian(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Civilian Stasis Webifier"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.6
+ fLvl = 4
+ fIngame = 3.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Warp Scrambler I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Recon Ships Skill Bonus:
+ # -96% to -100% reduced CPU need for cloaking device per level
+ # Static part
+
+ def test_static_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 0.05
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Damage Control I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Recon Ships Skill Bonus:
+ # -96% to -100% reduced CPU need for cloaking device per level
+ # Dynamic part
+
+ def test_reconShips_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 0.04
+ fLvl = 4
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_reconShips_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Mining Laser Upgrade I"
+ skill = "Recon Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 5 seconds cloak reactivation delay
+
+ def test_static_moduleReactivationDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 5000.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ iItem = "Prototype Cloaking Device I"
+ iIngame = 5000.0
+ fItem = "Cynosural Field Generator I"
+ fIngame = 30000.0
+ iEos = self.getItemAttr(attr, iItem, ship=self.ship)
+ fEos = self.getItemAttr(attr, fItem, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 80% reduction in liquid ozone consumption for cynosural field generation
+
+ def test_static_consumptionQuantity_moduleCynosuralField(self):
+ self.buildTested = 0
+ attr = "consumptionQuantity"
+ item = "Cynosural Field Generator I"
+ ship_other = "Cheetah"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 50% reduction in cynosural field duration
+
+ def test_static_duration_moduleCynosuralField(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Cynosural Field Generator I"
+ ship_other = "Cheetah"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/freighters/__init__.py b/eos/tests/typeTests/ships/freighters/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/freighters/charon.py b/eos/tests/typeTests/ships/freighters/charon.py
new file mode 100755
index 000000000..35a19cf73
--- /dev/null
+++ b/eos/tests/typeTests/ships/freighters/charon.py
@@ -0,0 +1,58 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Charon"
+
+ # Caldari Freighter Skill Bonus:
+ # 5% bonus to cargo hold capacity per level
+
+ def test_caldariFreighter_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Caldari Freighter"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Freighter Skill Bonus:
+ # 5% bonus to maximum velocity per level
+
+ def test_caldariFreighter_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Caldari Freighter"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Advanced Spaceship Command Skill Bonus:
+ # 5% Bonus to the agility of ship per skill level
+ # Moved from Advanced Spaceship Command skill tests, not listed as bonus of ship
+
+ def test_advancedSpaceshipCommand_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Advanced Spaceship Command"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/freighters/fenrir.py b/eos/tests/typeTests/ships/freighters/fenrir.py
new file mode 100755
index 000000000..2f0e93dfb
--- /dev/null
+++ b/eos/tests/typeTests/ships/freighters/fenrir.py
@@ -0,0 +1,58 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Fenrir"
+
+ # Minmatar Freighter Skill Bonus:
+ # 5% bonus to cargo hold capacity per level
+
+ def test_minmatarFreighter_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Minmatar Freighter"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Freighter Skill Bonus:
+ # 5% bonus to maximum velocity per level
+
+ def test_minmatarFreighter_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Minmatar Freighter"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Advanced Spaceship Command Skill Bonus:
+ # 5% Bonus to the agility of ship per skill level
+ # Moved from Advanced Spaceship Command skill tests, not listed as bonus of ship
+
+ def test_advancedSpaceshipCommand_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Advanced Spaceship Command"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/freighters/obelisk.py b/eos/tests/typeTests/ships/freighters/obelisk.py
new file mode 100755
index 000000000..0d3480ae0
--- /dev/null
+++ b/eos/tests/typeTests/ships/freighters/obelisk.py
@@ -0,0 +1,58 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Obelisk"
+
+ # Gallente Freighter Skill Bonus:
+ # 5% bonus to cargo hold capacity per level
+
+ def test_gallenteFreighter_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Gallente Freighter"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Freighter Skill Bonus:
+ # 5% bonus to maximum velocity per level
+
+ def test_gallenteFreighter_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Gallente Freighter"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Advanced Spaceship Command Skill Bonus:
+ # 5% Bonus to the agility of ship per skill level
+ # Moved from Advanced Spaceship Command skill tests, not listed as bonus of ship
+
+ def test_advancedSpaceshipCommand_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Advanced Spaceship Command"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/freighters/providence.py b/eos/tests/typeTests/ships/freighters/providence.py
new file mode 100755
index 000000000..1bee21d81
--- /dev/null
+++ b/eos/tests/typeTests/ships/freighters/providence.py
@@ -0,0 +1,58 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Providence"
+
+ # Amarr Freighter Skill Bonus:
+ # 5% bonus to cargo hold capacity per level
+
+ def test_amarrFreighter_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Amarr Freighter"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Freighter Skill Bonus:
+ # 5% bonus to maximum velocity per level
+
+ def test_amarrFreighter_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Amarr Freighter"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Advanced Spaceship Command Skill Bonus:
+ # 5% Bonus to the agility of ship per skill level
+ # Moved from Advanced Spaceship Command skill tests, not listed as bonus of ship
+
+ def test_advancedSpaceshipCommand_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Advanced Spaceship Command"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/__init__.py b/eos/tests/typeTests/ships/frigates/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/frigates/atron.py b/eos/tests/typeTests/ships/frigates/atron.py
new file mode 100755
index 000000000..5a7d2cb70
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/atron.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Atron"
+
+ # Gallente Frigate Skill Bonus:
+ # 10% bonus to Small Hybrid Turret falloff per skill level
+
+ def test_gallenteFrigate_falloff_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "Light Ion Blaster I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_falloff_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "Heavy Ion Blaster I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Frigate Skill Bonus:
+ # 5% Small Hybrid Turret damage per skill level
+
+ def test_gallenteFrigate_damageMultiplier_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "125mm Railgun I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual 150mm Railgun I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/bantam.py b/eos/tests/typeTests/ships/frigates/bantam.py
new file mode 100755
index 000000000..28114780a
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/bantam.py
@@ -0,0 +1,115 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Bantam"
+
+ # Caldari Frigate Skill Bonus:
+ # 5% bonus to cargo capacity per skill level
+
+ def test_caldariFrigate_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_capacity_other(self):
+ self.buildTested = 0
+ attr = "capacity"
+ item = "Dual Light Pulse Laser I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Frigate Skill Bonus:
+ # 20% bonus to mining laser yield per skill level
+
+ def test_caldariFrigate_miningAmount_moduleMiningLaser(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Miner I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_miningAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Ice Harvester I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_miningAmount_other(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Mining Drone I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # -60% mining laser capacitor use
+
+ def test_static_capacitorNeed_moduleMiningLaser(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Miner I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Explosion Dampening Field I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/breacher.py b/eos/tests/typeTests/ships/frigates/breacher.py
new file mode 100755
index 000000000..a89224852
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/breacher.py
@@ -0,0 +1,1128 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Breacher"
+
+ # Minmatar Frigate Skill Bonus:
+ # 5% bonus to EM missile damage per level
+
+ def test_minmatarFrigate_emDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Gremlin Rocket"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_emDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Gremlin Javelin Rocket"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_emDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Sabretooth Light Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_emDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Sabretooth Precision Light Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_emDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Seeker F.O.F. Light Missile I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_emDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Torrent Assault Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_emDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Torrent Rage Assault Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_emDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Thunderbolt Heavy Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_emDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Thunderbolt Fury Heavy Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_emDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Stalker F.O.F. Heavy Missile I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_emDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Mjolnir Torpedo"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_emDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Mjolnir Javelin Torpedo"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_emDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Paradise Cruise Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_emDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Paradise Precision Cruise Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_emDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Hunter F.O.F. Cruise Missile I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_emDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Thor Citadel Torpedo"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_emDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Thunar Citadel Cruise Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_emDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Proton S"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Frigate Skill Bonus:
+ # 10% bonus to Explosive missile damage per level
+
+ def test_minmatarFrigate_explosiveDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Phalanx Rocket"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_explosiveDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Phalanx Javelin Rocket"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_explosiveDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Piranha Light Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_explosiveDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Piranha Fury Light Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_explosiveDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Exterminator F.O.F. Light Missile I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_explosiveDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Fulmination Assault Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_explosiveDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Fulmination Javelin Assault Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_explosiveDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Havoc Heavy Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_explosiveDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Havoc Fury Heavy Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_explosiveDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Eradicator F.O.F. Heavy Missile I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_explosiveDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Bane Torpedo"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_explosiveDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Bane Rage Torpedo"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_explosiveDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Devastator Cruise Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_explosiveDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Devastator Precision Cruise Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_explosiveDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Obliterator F.O.F. Cruise Missile I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_explosiveDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Doom Citadel Torpedo"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_explosiveDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Catastrophe Citadel Cruise Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_explosiveDamage_chargeMissileDefender(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Defender I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_explosiveDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Hail S"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Frigate Skill Bonus:
+ # 5% bonus to Kinetic missile damage per level
+
+ def test_minmatarFrigate_kineticDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rocket"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_kineticDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Javelin Rocket"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_kineticDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Light Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_kineticDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Fury Light Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_kineticDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Serpent F.O.F. Light Missile I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_kineticDamage_chargeMissileLightSkillrqNone(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Civilian Bloodclaw Light Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_kineticDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Assault Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_kineticDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Javelin Assault Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_kineticDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Heavy Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_kineticDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Fury Heavy Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_kineticDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Hydra F.O.F. Heavy Missile I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_kineticDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Torpedo"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_kineticDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Javelin Torpedo"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_kineticDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Cruise Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_kineticDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Precision Cruise Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_kineticDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Dragon F.O.F. Cruise Missile I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_kineticDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rift Citadel Torpedo"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_kineticDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rajas Citadel Cruise Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_kineticDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Nuclear S"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Frigate Skill Bonus:
+ # 5% bonus to Thermal missile damage per level
+
+ def test_minmatarFrigate_thermalDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Foxfire Rocket"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_thermalDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Foxfire Javelin Rocket"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_thermalDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Flameburst Light Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_thermalDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Flameburst Fury Light Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_thermalDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Firefly F.O.F. Light Missile I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_thermalDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Hellfire Assault Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_thermalDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Hellfire Javelin Assault Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_thermalDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Widowmaker Heavy Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_thermalDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Widowmaker Fury Heavy Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_thermalDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Hellhound F.O.F. Heavy Missile I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_thermalDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Inferno Torpedo"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_thermalDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Inferno Rage Torpedo"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_thermalDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Cataclysm Cruise Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_thermalDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Cataclysm Fury Cruise Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_thermalDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Phoenix F.O.F. Cruise Missile I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_thermalDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Purgatory Citadel Torpedo"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_thermalDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Sol Citadel Cruise Missile"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_thermalDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Standard S"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/burst.py b/eos/tests/typeTests/ships/frigates/burst.py
new file mode 100755
index 000000000..6d0bd1833
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/burst.py
@@ -0,0 +1,115 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Burst"
+
+ # Minmatar Frigate Skill Bonus:
+ # 5% bonus to cargo capacity per skill level
+
+ def test_minmatarFrigate_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_capacity_other(self):
+ self.buildTested = 0
+ attr = "capacity"
+ item = "150mm Railgun I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Frigate Skill Bonus:
+ # 20% bonus to mining laser yield per skill level
+
+ def test_minmatarFrigate_miningAmount_moduleMiningLaser(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Miner I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_miningAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Ice Harvester I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_miningAmount_other(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Mining Drone I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # -60% mining laser capacitor use
+
+ def test_static_capacitorNeed_moduleMiningLaser(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Miner I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Medium Shield Booster I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/caldariNavyHookbill.py b/eos/tests/typeTests/ships/frigates/caldariNavyHookbill.py
new file mode 100755
index 000000000..4000120fa
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/caldariNavyHookbill.py
@@ -0,0 +1,1176 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Caldari Navy Hookbill"
+
+ # Caldari Frigate Skill Bonus:
+ # 10% bonus to missile velocity per level
+
+ def test_caldariFrigate_maxVelocity_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Thorn Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_maxVelocity_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Gremlin Rage Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_maxVelocity_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Piranha Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_maxVelocity_chargeMissileLightCivilian(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Civilian Bloodclaw Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_maxVelocity_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Sabretooth Fury Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_maxVelocity_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Exterminator F.O.F. Light Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_maxVelocity_chargeOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Havoc Heavy Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Frigate Skill Bonus:
+ # 10% bonus to EM missile damage per level
+
+ def test_caldariFrigate_emDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Gremlin Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Gremlin Rage Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Sabretooth Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Sabretooth Precision Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Seeker F.O.F. Light Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Torrent Assault Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Torrent Javelin Assault Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Thunderbolt Heavy Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Thunderbolt Fury Heavy Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Stalker F.O.F. Heavy Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Mjolnir Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Mjolnir Rage Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Paradise Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Paradise Precision Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Hunter F.O.F. Cruise Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Thor Citadel Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Thunar Citadel Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Frigate Skill Bonus:
+ # 10% bonus to Explosive missile damage per level
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Phalanx Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Phalanx Rage Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Piranha Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Piranha Fury Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Exterminator F.O.F. Light Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Fulmination Assault Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Fulmination Javelin Assault Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Havoc Heavy Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Havoc Fury Heavy Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Eradicator F.O.F. Heavy Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Bane Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Bane Rage Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Devastator Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Devastator Precision Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Obliterator F.O.F. Cruise Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Doom Citadel Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Catastrophe Citadel Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileDefender(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Defender I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Frigate Skill Bonus:
+ # 20% bonus to Kinetic missile damage per level
+
+ def test_caldariFrigate_kineticDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Javelin Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Precision Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Serpent F.O.F. Light Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLightSkillrqNone(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Civilian Bloodclaw Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Assault Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Javelin Assault Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Heavy Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Precision Heavy Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Hydra F.O.F. Heavy Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Javelin Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Fury Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Dragon F.O.F. Cruise Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rift Citadel Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rajas Citadel Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Frigate Skill Bonus:
+ # 10% bonus to Thermal missile damage per level
+
+ def test_caldariFrigate_thermalDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Foxfire Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Foxfire Javelin Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Flameburst Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Flameburst Fury Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Firefly F.O.F. Light Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Hellfire Assault Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Hellfire Rage Assault Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Widowmaker Heavy Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Widowmaker Fury Heavy Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Hellhound F.O.F. Heavy Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Inferno Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Inferno Javelin Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Cataclysm Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Cataclysm Fury Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Phoenix F.O.F. Cruise Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Purgatory Citadel Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Sol Citadel Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/condor.py b/eos/tests/typeTests/ships/frigates/condor.py
new file mode 100755
index 000000000..d9b1c65e7
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/condor.py
@@ -0,0 +1,405 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Condor"
+
+ # Caldari Frigate Skill Bonus:
+ # 5% bonus to light missile and rocket kinetic damage per skill level
+
+ def test_caldariFrigate_kineticDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rage Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Fury Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Serpent F.O.F. Light Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Assault Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Javelin Assault Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Heavy Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Precision Heavy Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Hydra F.O.F. Heavy Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Rage Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Fury Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Dragon F.O.F. Cruise Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rift Citadel Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rajas Citadel Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLightNoSkillrqMissileOp(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Civilian Bloodclaw Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Carbonized Lead S"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Frigate Skill Bonus:
+ # 10% bonus to rocket velocity per skill level
+
+ def test_caldariFrigate_maxVelocity_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Foxfire Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_maxVelocity_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Phalanx Javelin Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Frigate Skill Bonus:
+ # 10% bonus to light missile velocity per skill level
+
+ def test_caldariFrigate_maxVelocity_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Flameburst Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_maxVelocity_chargeMissileLightCivilian(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Civilian Bloodclaw Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_maxVelocity_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Piranha Fury Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_maxVelocity_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Firefly F.O.F. Light Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_maxVelocity_chargeOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Defender I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/crucifier.py b/eos/tests/typeTests/ships/frigates/crucifier.py
new file mode 100755
index 000000000..5a8aa19f7
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/crucifier.py
@@ -0,0 +1,132 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Crucifier"
+
+ # Amarr Frigate Skill Bonus:
+ # 10% bonus to Small Energy Turret capacitor use per skill level
+
+ def test_amarrFrigate_capacitorNeed_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Medium Beam Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Focused Medium Pulse Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Frigate Skill Bonus:
+ # 5% bonus to Tracking Disruptor effectiveness per skill level
+
+ def test_amarrFrigate_maxRangeBonus_moduleTrackingDisruptor(self):
+ self.buildTested = 0
+ attr = "maxRangeBonus"
+ item = "Tracking Disruptor I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_maxRangeBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRangeBonus"
+ item = "Tracking Enhancer I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_falloffBonus_moduleTrackingDisruptor(self):
+ self.buildTested = 0
+ attr = "falloffBonus"
+ item = "Tracking Disruptor I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_falloffBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "falloffBonus"
+ item = "Small Projectile Ambit Extension I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_trackingSpeedBonus_moduleTrackingDisruptor(self):
+ self.buildTested = 0
+ attr = "trackingSpeedBonus"
+ item = "Tracking Disruptor I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_trackingSpeedBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeedBonus"
+ item = "Tracking Link I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/cruor.py b/eos/tests/typeTests/ships/frigates/cruor.py
new file mode 100755
index 000000000..46e740467
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/cruor.py
@@ -0,0 +1,134 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Cruor"
+
+ # Amarr Frigate Skill Bonus:
+ # 15% bonus to Energy Vampire drain amount per level
+
+ def test_amarrFrigate_powerTransferAmount_moduleEnergyVampire(self):
+ self.buildTested = 0
+ attr = "powerTransferAmount"
+ item = "Small Nosferatu I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_powerTransferAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "powerTransferAmount"
+ item = "Small Energy Transfer Array I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Frigate Skill Bonus:
+ # 15% bonus to Energy Neutralizer drain amount per level
+
+ def test_amarrFrigate_energyDestabilizationAmount_moduleEnergyDestabilizer(self):
+ self.buildTested = 0
+ attr = "energyDestabilizationAmount"
+ item = "Small Energy Neutralizer I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Frigate Skill Bonus:
+ # 10% bonus to the velocity factor of stasis webifiers per level
+
+ def test_minmatarFrigate_speedFactor_moduleStasisWeb(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "Stasis Webifier I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_speedFactor_moduleStasisWebCivilian(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "Civilian Stasis Webifier"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_speedFactor_moduleOther(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "1MN Afterburner I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 100% bonus to Small Energy Turret damage
+
+ def test_static_damageMultiplier_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Medium Pulse Laser I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_damageMultiplier_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Pulse Laser I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/daredevil.py b/eos/tests/typeTests/ships/frigates/daredevil.py
new file mode 100755
index 000000000..bc06d3759
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/daredevil.py
@@ -0,0 +1,116 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Daredevil"
+
+ # Gallente Frigate Skill Bonus:
+ # 10% bonus to Small Hybrid Turret falloff per level
+
+ def test_gallenteFrigate_falloff_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "Light Neutron Blaster I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_falloff_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "200mm Railgun I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Frigate Skill Bonus:
+ # 10% bonus to the velocity factor of stasis webifiers per level
+
+ def test_minmatarFrigate_speedFactor_moduleStasisWeb(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "Stasis Webifier I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_speedFactor_moduleStasisWebCivilian(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "Civilian Stasis Webifier"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_speedFactor_moduleOther(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "1MN MicroWarpdrive I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 200% bonus to Small Hybrid Turret damage
+
+ def test_static_damageMultiplier_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "150mm Railgun I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 3.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Neutron Blaster I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/dramiel.py b/eos/tests/typeTests/ships/frigates/dramiel.py
new file mode 100755
index 000000000..99ca5b898
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/dramiel.py
@@ -0,0 +1,101 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Dramiel"
+
+ # Minmatar Frigate Skill Bonus:
+ # 10% bonus to Small Projectile Turret falloff per level
+
+ def test_minmatarFrigate_falloff_moduleProjectileWeaponSmall(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "150mm Light AutoCannon I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_falloff_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "650mm Artillery Cannon I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Frigate Skill Bonus:
+ # 7.5% bonus to Small Projectile Turret tracking speed per level
+
+ def test_gallenteFrigate_trackingSpeed_moduleProjectileWeaponSmall(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "125mm Gatling AutoCannon I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_trackingSpeed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Dual 180mm AutoCannon I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 100% bonus to Small Projectile Turret damage
+
+ def test_static_damageMultiplier_moduleProjectileWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "280mm Howitzer Artillery I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "650mm Artillery Cannon I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/executioner.py b/eos/tests/typeTests/ships/frigates/executioner.py
new file mode 100755
index 000000000..f3c50f518
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/executioner.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Executioner"
+
+ # Amarr Frigate Skill Bonus:
+ # 10% bonus to Small Energy Turret capacitor use per skill level
+
+ def test_amarrFrigate_capacitorNeed_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Dual Light Beam Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Quad Light Beam Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Frigate Skill Bonus:
+ # 5% Small Energy Turret damage per skill level
+
+ def test_amarrFrigate_damageMultiplier_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Gatling Pulse Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_damageMultiplier_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Focused Medium Pulse Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/federationNavyComet.py b/eos/tests/typeTests/ships/frigates/federationNavyComet.py
new file mode 100755
index 000000000..47ea60344
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/federationNavyComet.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Federation Navy Comet"
+
+ # Gallente Frigate Skill Bonus:
+ # 7.5% bonus to Small Hybrid Weapon tracking speed per level
+
+ def test_gallenteFrigate_trackingSpeed_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Light Electron Blaster I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_trackingSpeed_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Heavy Neutron Blaster I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Frigate Skill Bonus:
+ # 20% bonus to Small Hybrid Turret damage per level
+
+ def test_gallenteFrigate_damageMultiplier_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "75mm Gatling Rail I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "250mm Railgun I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/goldMagnate.py b/eos/tests/typeTests/ships/frigates/goldMagnate.py
new file mode 100755
index 000000000..67ad5b759
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/goldMagnate.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Gold Magnate"
+
+ # Amarr Frigate Skill Bonus:
+ # 5% bonus to Small Energy Turret capacitor use per skill level
+
+ def test_amarrFrigate_capacitorNeed_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Gatling Pulse Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Focused Medium Beam Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Frigate Skill Bonus:
+ # 5% bonus to Small Energy Turret damage per skill level
+
+ def test_amarrFrigate_damageMultiplier_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual Light Pulse Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_damageMultiplier_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Beam Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/griffin.py b/eos/tests/typeTests/ships/frigates/griffin.py
new file mode 100755
index 000000000..39d7a29e9
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/griffin.py
@@ -0,0 +1,162 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Griffin"
+
+ # Caldari Frigate Skill Bonus:
+ # 15% bonus to ECM Target Jammer strength
+
+ def test_caldariFrigate_scanGravimetricStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrengthBonus"
+ item = "ECM - Spatial Destabilizer I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_scanGravimetricStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_scanLadarStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanLadarStrengthBonus"
+ item = "ECM - Ion Field Projector I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_scanLadarStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanLadarStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_scanMagnetometricStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrengthBonus"
+ item = "ECM - Multispectral Jammer I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_scanMagnetometricStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_scanRadarStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ attr = "scanRadarStrengthBonus"
+ item = "ECM - White Noise Generator I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_scanRadarStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanRadarStrengthBonus"
+ item = "ECM Burst I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Frigate Skill Bonus:
+ # 10% bonus to ECM Target Jammers' capacitor need per level
+
+ def test_caldariFrigate_capacitorNeed_moduleEcm(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "ECM - Multispectral Jammer I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "ECM Burst I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/heron.py b/eos/tests/typeTests/ships/frigates/heron.py
new file mode 100755
index 000000000..3f6c04c6b
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/heron.py
@@ -0,0 +1,345 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Heron"
+
+ # Caldari Frigate Skill Bonus:
+ # 5% bonus kinetic missile damage per level
+
+ def test_caldariFrigate_kineticDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rage Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Fury Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Serpent F.O.F. Light Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Assault Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Rage Assault Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Heavy Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Fury Heavy Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Hydra F.O.F. Heavy Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Javelin Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Fury Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Dragon F.O.F. Cruise Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rift Citadel Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rajas Citadel Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLightNoSkillrqMissileOp(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Civilian Bloodclaw Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Iridium Charge S"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Frigate Skill Bonus:
+ # 5% bonus to scan strength of probes per level
+
+ def test_caldariFrigate_baseSensorStrength_chargeScannerProbe(self):
+ self.buildTested = 0
+ attr = "baseSensorStrength"
+ item = "Combat Scanner Probe I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Frigate Skill Bonus:
+ # 5% bonus to survey probe flight time per level
+
+ def test_caldariFrigate_explosionDelay_chargeSurveyProbe(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Gaze Survey Probe I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosionDelay_chargeOther(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Core Scanner Probe I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/imicus.py b/eos/tests/typeTests/ships/frigates/imicus.py
new file mode 100755
index 000000000..dec786e2f
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/imicus.py
@@ -0,0 +1,74 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Imicus"
+
+ # Gallente Frigate Skill Bonus:
+ # 5% bonus to drone range per level
+
+ def test_gallenteFrigate_droneControlRange_ship(self):
+ self.buildTested = 0
+ attr = "droneControlRange"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Frigate Skill Bonus:
+ # 5% increase to scan strength of probes per level
+
+ def test_gallenteFrigate_baseSensorStrength_chargeScannerProbe(self):
+ self.buildTested = 0
+ attr = "baseSensorStrength"
+ item = "Core Scanner Probe I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Frigate Skill Bonus:
+ # 5% bonus to survey probe flight time per level
+
+ def test_gallenteFrigate_explosionDelay_chargeSurveyProbe(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Discovery Survey Probe I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_explosionDelay_chargeOther(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Core Scanner Probe I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/imperialNavySlicer.py b/eos/tests/typeTests/ships/frigates/imperialNavySlicer.py
new file mode 100755
index 000000000..bf767c05e
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/imperialNavySlicer.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Imperial Navy Slicer"
+
+ # Amarr Frigate Skill Bonus:
+ # 10% bonus to Small Energy Turret optimal range per level
+
+ def test_amarrFrigate_maxRange_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Medium Pulse Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_maxRange_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Focused Medium Beam Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Frigate Skill Bonus:
+ # 25% bonus to Small Energy Turret damage per level
+
+ def test_amarrFrigate_damageMultiplier_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual Light Beam Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.25
+ fLvl = 4
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_damageMultiplier_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Pulse Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/incursus.py b/eos/tests/typeTests/ships/frigates/incursus.py
new file mode 100755
index 000000000..41d9665f9
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/incursus.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Incursus"
+
+ # Gallente Frigate Skill Bonus:
+ # 10% bonus to Small Hybrid Turret falloff per skill level
+
+ def test_gallenteFrigate_falloff_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "Light Electron Blaster I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_falloff_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "Dual 150mm Railgun I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Frigate Skill Bonus:
+ # 5% bonus to Small Hybrid Turret damage per skill level
+
+ def test_gallenteFrigate_damageMultiplier_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "150mm Railgun I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Electron Blaster I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/inquisitor.py b/eos/tests/typeTests/ships/frigates/inquisitor.py
new file mode 100755
index 000000000..e3113f1db
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/inquisitor.py
@@ -0,0 +1,1128 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Inquisitor"
+
+ # Amarr Frigate Skill Bonus:
+ # 10% bonus to EM missile damage per skill level
+
+ def test_amarrFrigate_emDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Gremlin Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_emDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Gremlin Javelin Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_emDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Sabretooth Light Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_emDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Sabretooth Fury Light Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_emDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Seeker F.O.F. Light Missile I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_emDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Torrent Assault Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_emDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Torrent Javelin Assault Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_emDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Thunderbolt Heavy Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_emDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Thunderbolt Fury Heavy Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_emDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Stalker F.O.F. Heavy Missile I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_emDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Mjolnir Torpedo"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_emDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Mjolnir Javelin Torpedo"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_emDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Paradise Cruise Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_emDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Paradise Fury Cruise Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_emDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Hunter F.O.F. Cruise Missile I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_emDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Thor Citadel Torpedo"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_emDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Thunar Citadel Cruise Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_emDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "EMP S"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Frigate Skill Bonus:
+ # 5% bonus to Explosive missile damage per skill level
+
+ def test_amarrFrigate_explosiveDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Phalanx Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosiveDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Phalanx Rage Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosiveDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Piranha Light Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosiveDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Piranha Precision Light Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosiveDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Exterminator F.O.F. Light Missile I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosiveDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Fulmination Assault Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosiveDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Fulmination Rage Assault Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosiveDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Havoc Heavy Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosiveDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Havoc Precision Heavy Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosiveDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Eradicator F.O.F. Heavy Missile I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosiveDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Bane Torpedo"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosiveDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Bane Javelin Torpedo"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosiveDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Devastator Cruise Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosiveDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Devastator Fury Cruise Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosiveDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Obliterator F.O.F. Cruise Missile I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosiveDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Doom Citadel Torpedo"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosiveDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Catastrophe Citadel Cruise Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosiveDamage_chargeMissileDefender(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Defender I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosiveDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Fusion S"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Frigate Skill Bonus:
+ # 5% bonus to Kinetic missile damage per skill level
+
+ def test_amarrFrigate_kineticDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_kineticDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Javelin Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_kineticDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Light Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_kineticDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Precision Light Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_kineticDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Serpent F.O.F. Light Missile I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_kineticDamage_chargeMissileLightSkillrqNone(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Civilian Bloodclaw Light Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_kineticDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Assault Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_kineticDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Rage Assault Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_kineticDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Heavy Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_kineticDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Precision Heavy Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_kineticDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Hydra F.O.F. Heavy Missile I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_kineticDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Torpedo"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_kineticDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Rage Torpedo"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_kineticDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Cruise Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_kineticDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Fury Cruise Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_kineticDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Dragon F.O.F. Cruise Missile I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_kineticDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rift Citadel Torpedo"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_kineticDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rajas Citadel Cruise Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_kineticDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Antimatter Charge S"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Frigate Skill Bonus:
+ # 5% bonus to Thermal missile damage per skill level
+
+ def test_amarrFrigate_thermalDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Foxfire Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_thermalDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Foxfire Rage Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_thermalDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Flameburst Light Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_thermalDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Flameburst Precision Light Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_thermalDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Firefly F.O.F. Light Missile I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_thermalDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Hellfire Assault Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_thermalDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Hellfire Rage Assault Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_thermalDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Widowmaker Heavy Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_thermalDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Widowmaker Precision Heavy Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_thermalDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Hellhound F.O.F. Heavy Missile I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_thermalDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Inferno Torpedo"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_thermalDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Inferno Javelin Torpedo"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_thermalDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Cataclysm Cruise Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_thermalDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Cataclysm Fury Cruise Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_thermalDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Phoenix F.O.F. Cruise Missile I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_thermalDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Purgatory Citadel Torpedo"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_thermalDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Sol Citadel Cruise Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_thermalDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Infrared S"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/kestrel.py b/eos/tests/typeTests/ships/frigates/kestrel.py
new file mode 100755
index 000000000..df6781040
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/kestrel.py
@@ -0,0 +1,1068 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Kestrel"
+
+ # Caldari Frigate Skill Bonus:
+ # 5% bonus to EM missile damage per level
+
+ def test_caldariFrigate_emDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Gremlin Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Gremlin Rage Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Sabretooth Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Sabretooth Precision Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Seeker F.O.F. Light Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Torrent Assault Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Torrent Javelin Assault Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Thunderbolt Heavy Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Thunderbolt Precision Heavy Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Stalker F.O.F. Heavy Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Mjolnir Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Mjolnir Javelin Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Paradise Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Paradise Fury Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Hunter F.O.F. Cruise Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Thor Citadel Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_emDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Thunar Citadel Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Frigate Skill Bonus:
+ # 5% bonus to Explosive missile damage per level
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Phalanx Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Phalanx Rage Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Piranha Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Piranha Precision Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Exterminator F.O.F. Light Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Fulmination Assault Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Fulmination Rage Assault Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Havoc Heavy Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Havoc Precision Heavy Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Eradicator F.O.F. Heavy Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Bane Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Bane Javelin Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Devastator Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Devastator Precision Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Obliterator F.O.F. Cruise Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Doom Citadel Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Catastrophe Citadel Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosiveDamage_chargeMissileDefender(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Defender I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Frigate Skill Bonus:
+ # 10% bonus to Kinetic missile damage per level
+
+ def test_caldariFrigate_kineticDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Javelin Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Fury Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Serpent F.O.F. Light Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLightSkillrqNone(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Civilian Bloodclaw Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Assault Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Rage Assault Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Heavy Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Fury Heavy Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Hydra F.O.F. Heavy Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Rage Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Fury Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Dragon F.O.F. Cruise Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rift Citadel Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rajas Citadel Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Frigate Skill Bonus:
+ # 5% bonus to Thermal missile damage per level
+
+ def test_caldariFrigate_thermalDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Foxfire Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Foxfire Javelin Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Flameburst Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Flameburst Fury Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Firefly F.O.F. Light Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Hellfire Assault Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Hellfire Rage Assault Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Widowmaker Heavy Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Widowmaker Precision Heavy Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Hellhound F.O.F. Heavy Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Inferno Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Inferno Rage Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Cataclysm Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Cataclysm Fury Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Phoenix F.O.F. Cruise Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Purgatory Citadel Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_thermalDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Sol Citadel Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/magnate.py b/eos/tests/typeTests/ships/frigates/magnate.py
new file mode 100755
index 000000000..05e788043
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/magnate.py
@@ -0,0 +1,90 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Magnate"
+
+ # Amarr Frigate Skill Bonus:
+ # 5% bonus to Small Energy Turret capacitor use per level
+
+ def test_amarrFrigate_capacitorNeed_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Gatling Pulse Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Heavy Beam Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Frigate Skill Bonus:
+ # 5% increase to scan strength of probes per skill level
+
+ def test_amarrFrigate_baseSensorStrength_chargeScannerProbe(self):
+ self.buildTested = 0
+ attr = "baseSensorStrength"
+ item = "Core Scanner Probe I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Frigate Skill Bonus:
+ # 5% bonus to survey probe flight time per level
+
+ def test_amarrFrigate_explosionDelay_chargeSurveyProbe(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Quest Survey Probe I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosionDelay_chargeOther(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Combat Scanner Probe I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/maulus.py b/eos/tests/typeTests/ships/frigates/maulus.py
new file mode 100755
index 000000000..21ef37fe8
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/maulus.py
@@ -0,0 +1,102 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Maulus"
+
+ # Gallente Frigate Skill Bonus:
+ # 5% bonus to Small Hybrid Turret damage per skill level
+
+ def test_gallenteFrigate_damageMultiplier_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "125mm Railgun I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual 150mm Railgun I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Frigate Skill Bonus:
+ # 5% bonus to Remote Sensor Dampener effectiveness per skill level
+
+ def test_gallenteFrigate_maxTargetRangeBonus_moduleRemoteSensorDamper(self):
+ self.buildTested = 0
+ attr = "maxTargetRangeBonus"
+ item = "Remote Sensor Dampener I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_maxTargetRangeBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxTargetRangeBonus"
+ item = "Remote Sensor Booster I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_scanResolutionBonus_moduleRemoteSensorDamper(self):
+ self.buildTested = 0
+ attr = "scanResolutionBonus"
+ item = "Remote Sensor Dampener I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_scanResolutionBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanResolutionBonus"
+ item = "Remote Sensor Booster I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/merlin.py b/eos/tests/typeTests/ships/frigates/merlin.py
new file mode 100755
index 000000000..8256afd6d
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/merlin.py
@@ -0,0 +1,158 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Merlin"
+
+ # Caldari Frigate Skill Bonus:
+ # 10% bonus to Small Hybrid Turret optimal range per skill level
+
+ def test_caldariFrigate_maxRange_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "75mm Gatling Rail I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_maxRange_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Dual 150mm Railgun I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Frigate Skill Bonus:
+ # 5% bonus to shield resistances per skill level
+
+ def test_caldariFrigate_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_shieldEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_shieldExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_shieldKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_shieldThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/navitas.py b/eos/tests/typeTests/ships/frigates/navitas.py
new file mode 100755
index 000000000..b98a285d0
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/navitas.py
@@ -0,0 +1,115 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Navitas"
+
+ # Gallente Frigate Skill Bonus:
+ # 5% bonus to cargo capacity per skill level
+
+ def test_gallenteFrigate_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_capacity_other(self):
+ self.buildTested = 0
+ attr = "capacity"
+ item = "200mm AutoCannon I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Frigate Skill Bonus:
+ # 20% bonus to mining laser yield per skill level
+
+ def test_gallenteFrigate_miningAmount_moduleMiningLaser(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Miner I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_miningAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Ice Harvester I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_miningAmount_other(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Mining Drone I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # -60% mining laser capacitor use
+
+ def test_static_capacitorNeed_moduleMiningLaser(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Miner I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Ion Blaster Cannon I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/probe.py b/eos/tests/typeTests/ships/frigates/probe.py
new file mode 100755
index 000000000..36c18cb82
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/probe.py
@@ -0,0 +1,89 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Probe"
+
+ # Minmatar Frigate Skill Bonus:
+ # 5% bonus cargo capacity per skill level
+
+ def test_minmatarFrigate_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_capacity_other(self):
+ self.buildTested = 0
+ attr = "capacity"
+ item = "Dual 180mm AutoCannon I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Frigate Skill Bonus:
+ # 5% bonus to scan strength of probes per skill level
+
+ def test_minmatarFrigate_baseSensorStrength_chargeScannerProbe(self):
+ self.buildTested = 0
+ attr = "baseSensorStrength"
+ item = "Combat Scanner Probe I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Frigate Skill Bonus:
+ # 5% bonus to survey probe flight time per level
+
+ def test_minmatarFrigate_explosionDelay_chargeSurveyProbe(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Quest Survey Probe I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_explosionDelay_chargeOther(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Core Scanner Probe I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/punisher.py b/eos/tests/typeTests/ships/frigates/punisher.py
new file mode 100755
index 000000000..783b8f8ea
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/punisher.py
@@ -0,0 +1,158 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Punisher"
+
+ # Amarr Frigate Skill Bonus:
+ # 10% bonus to Small Energy Turret capacitor use per skill level
+
+ def test_amarrFrigate_capacitorNeed_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Dual Light Pulse Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Heavy Pulse Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Frigate Skill Bonus:
+ # 5% bonus to armor resistances per skill level
+
+ def test_amarrFrigate_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_armorEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_armorExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_armorKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_armorThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/republicFleetFiretail.py b/eos/tests/typeTests/ships/frigates/republicFleetFiretail.py
new file mode 100755
index 000000000..0241c2c74
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/republicFleetFiretail.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Republic Fleet Firetail"
+
+ # Minmatar Frigate Skill Bonus:
+ # 20% bonus to Small Projectile Turret damage per level
+
+ def test_minmatarFrigate_damageMultiplier_moduleProjectileWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "280mm Howitzer Artillery I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "720mm Howitzer Artillery I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Frigate Skill Bonus:
+ # 7.5% bonus to Small Projectile Turret tracking speed per level
+
+ def test_minmatarFrigate_trackingSpeed_moduleProjectileWeaponSmall(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "125mm Gatling AutoCannon I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_trackingSpeed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Dual 180mm AutoCannon I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/rifter.py b/eos/tests/typeTests/ships/frigates/rifter.py
new file mode 100755
index 000000000..e48e4d950
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/rifter.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Rifter"
+
+ # Minmatar Frigate Skill Bonus:
+ # 5% bonus to Small Projectile Turret damage per level
+
+ def test_minmatarFrigate_damageMultiplier_moduleProjectileWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "150mm Light AutoCannon I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "425mm AutoCannon I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Frigate Skill Bonus:
+ # 7.5% bonus to Small Projectile Turret tracking per level
+
+ def test_minmatarFrigate_trackingSpeed_moduleProjectileWeaponSmall(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "250mm Light Artillery Cannon I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_trackingSpeed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "650mm Artillery Cannon I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/silverMagnate.py b/eos/tests/typeTests/ships/frigates/silverMagnate.py
new file mode 100755
index 000000000..a795cfaf1
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/silverMagnate.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Silver Magnate"
+
+ # Amarr Frigate Skill Bonus:
+ # 5% bonus to Small Energy Turret capacitor use per skill level
+
+ def test_amarrFrigate_capacitorNeed_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Dual Light Beam Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Quad Light Beam Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Frigate Skill Bonus:
+ # 5% bonus to Small Energy Turret damage per skill level
+
+ def test_amarrFrigate_damageMultiplier_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Medium Beam Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_damageMultiplier_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Focused Medium Beam Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/slasher.py b/eos/tests/typeTests/ships/frigates/slasher.py
new file mode 100755
index 000000000..5c245cf0b
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/slasher.py
@@ -0,0 +1,72 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Slasher"
+
+ # Minmatar Frigate Skill Bonus:
+ # 5% bonus to Small Projectile Turret damage per skill level
+
+ def test_minmatarFrigate_damageMultiplier_moduleProjectileWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "125mm Gatling AutoCannon I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "220mm Vulcan AutoCannon I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Frigate Skill Bonus:
+ # 7.5% bonus to Small Projectile Turret tracking speed per skill level
+
+ def test_minmatarFrigate_trackingSpeed_moduleProjectileWeaponSmall(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "250mm Light Artillery Cannon I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_trackingSpeed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Dual 425mm AutoCannon I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/succubus.py b/eos/tests/typeTests/ships/frigates/succubus.py
new file mode 100755
index 000000000..cdca22a14
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/succubus.py
@@ -0,0 +1,101 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Succubus"
+
+ # Amarr Frigate Skill Bonus:
+ # 7.5% bonus to Small Energy Turret tracking per level
+
+ def test_amarrFrigate_trackingSpeed_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Dual Light Beam Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_trackingSpeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Heavy Beam Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Frigate Skill Bonus:
+ # 5% bonus to Small Energy Turret damage per level
+
+ def test_caldariFrigate_damageMultiplier_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Gatling Pulse Laser I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_damageMultiplier_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Quad Light Beam Laser I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 100% bonus to Small Energy Turret damage
+
+ def test_static_damageMultiplier_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Medium Beam Laser I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_damageMultiplier_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Beam Laser I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/tormentor.py b/eos/tests/typeTests/ships/frigates/tormentor.py
new file mode 100755
index 000000000..41bc12590
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/tormentor.py
@@ -0,0 +1,115 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Tormentor"
+
+ # Amarr Frigate Skill Bonus:
+ # 5% bonus to cargo capacity per skill level
+
+ def test_amarrFrigate_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_capacity_other(self):
+ self.buildTested = 0
+ attr = "capacity"
+ item = "Light Electron Blaster I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Frigate Skill Bonus:
+ # 20% bonus to mining laser yield per skill level
+
+ def test_amarrFrigate_miningAmount_moduleMiningLaser(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Miner I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_miningAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Ice Harvester I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_miningAmount_other(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Mining Drone I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # -60% mining laser capacitor use
+
+ def test_static_capacitorNeed_moduleMiningLaser(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Miner I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Armor Kinetic Hardener I"
+ ship_other = "Punisher"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/tristan.py b/eos/tests/typeTests/ships/frigates/tristan.py
new file mode 100755
index 000000000..26452bee2
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/tristan.py
@@ -0,0 +1,73 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Tristan"
+
+ # Gallente Frigate Skill Bonus:
+ # 5% bonus to Small Hybrid Turret damage per skill level
+
+ def test_gallenteFrigate_damageMultiplier_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "75mm Gatling Rail I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "200mm Railgun I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Frigate Skill Bonus:
+ # 7.5% bonus to Small Hybrid Turret tracking speed per skill level
+ # Wrong value in description, actually it's 7%
+
+ def test_gallenteFrigate_trackingSpeed_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Light Ion Blaster I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.07
+ fLvl = 4
+ fIngame = 1.28
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_trackingSpeed_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "250mm Railgun I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/vigil.py b/eos/tests/typeTests/ships/frigates/vigil.py
new file mode 100755
index 000000000..66b68b291
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/vigil.py
@@ -0,0 +1,86 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Vigil"
+
+ # Minmatar Frigate Skill Bonus:
+ # 5% ship velocity per skill level
+
+ def test_minmatarFrigate_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_maxVelocity_other(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Gremlin Rocket"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Frigate Skill Bonus:
+ # 5% Target Painter effectiveness per skill level
+
+ def test_minmatarFrigate_signatureRadiusBonus_moduleTargetPainter(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "Target Painter I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_signatureRadiusBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "1MN MicroWarpdrive I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_signatureRadiusBonus_other(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "Warrior TP-300"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/frigates/worm.py b/eos/tests/typeTests/ships/frigates/worm.py
new file mode 100755
index 000000000..b5ef6bd46
--- /dev/null
+++ b/eos/tests/typeTests/ships/frigates/worm.py
@@ -0,0 +1,226 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Worm"
+
+ # Caldari Frigate Skill Bonus:
+ # 5% shield resistance per level
+
+ def test_caldariFrigate_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_shieldEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_shieldExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_shieldKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_shieldThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Frigate Skill Bonus:
+ # 5m3 Drone Bay Capacity per level
+
+ def test_gallenteFrigate_droneCapacity_ship(self):
+ self.buildTested = 0
+ attr = "droneCapacity"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 30
+ fLvl = 4
+ fIngame = 45
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 50% bonus to Rocket velocity
+
+ def test_static_maxVelocity_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Foxfire Rocket"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxVelocity_chargeMissileRocketAdvaced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Gremlin Javelin Rocket"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 50% bonus to Light Missile velocity
+
+ def test_static_maxVelocity_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Sabretooth Light Missile"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxVelocity_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Piranha Fury Light Missile"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxVelocity_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Seeker F.O.F. Light Missile I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxVelocity_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Eradicator F.O.F. Heavy Missile I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/heavyAssaultShips/__init__.py b/eos/tests/typeTests/ships/heavyAssaultShips/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/heavyAssaultShips/adrestia.py b/eos/tests/typeTests/ships/heavyAssaultShips/adrestia.py
new file mode 100755
index 000000000..14f137261
--- /dev/null
+++ b/eos/tests/typeTests/ships/heavyAssaultShips/adrestia.py
@@ -0,0 +1,172 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Adrestia"
+
+ # Gallente Cruiser Skill Bonus:
+ # 20% Bonus to medium hybrid turret damage per level
+
+ def test_gallenteCruiser_damageMultiplier_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Ion Blaster I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Light Ion Blaster I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Cruiser Skill Bonus:
+ # 20% Bonus to warp disruptor and warp scrambler range per level
+
+ def test_gallenteCruiser_maxRange_moduleWarpScrambler(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Warp Scrambler I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_maxRange_moduleWarpScramblerCivilian(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Civilian Warp Disruptor"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Stasis Webifier I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 25% bonus to max velocity
+
+ def test_static_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ iIngame = 1.0
+ fIngame = 1.25
+ iEos = self.getShipAttr(attr, ship=self.ship, unmod=True)
+ fEos = self.getShipAttr(attr, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxVelocity_other(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Warrior I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 50% bonus to Medium Hybrid Turret falloff
+
+ def test_static_falloff_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "200mm Railgun I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_falloff_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "Ion Blaster Cannon I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 50% bonus to Medium Hybrid Turret tracking speed
+
+ def test_static_trackingSpeed_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Heavy Electron Blaster I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_trackingSpeed_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Light Neutron Blaster I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/heavyAssaultShips/cerberus.py b/eos/tests/typeTests/ships/heavyAssaultShips/cerberus.py
new file mode 100755
index 000000000..9a188b25b
--- /dev/null
+++ b/eos/tests/typeTests/ships/heavyAssaultShips/cerberus.py
@@ -0,0 +1,671 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Cerberus"
+
+ # Caldari Cruiser Skill Bonus:
+ # 5% bonus to Kinetic Missile damage per level
+
+ def test_caldariCruiser_kineticDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rocket"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rage Rocket"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Light Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Precision Light Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Serpent F.O.F. Light Missile I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Assault Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Rage Assault Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Heavy Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Precision Heavy Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Hydra F.O.F. Heavy Missile I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Torpedo"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Rage Torpedo"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Cruise Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Precision Cruise Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Dragon F.O.F. Cruise Missile I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rift Citadel Torpedo"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rajas Citadel Cruise Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileLightNoSkillrqMissileOp(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Civilian Bloodclaw Light Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_other(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Medium Graviton Smartbomb I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Cruiser Skill Bonus:
+ # 10% bonus to Missile velocity per level
+
+ def test_caldariCruiser_maxVelocity_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Flameburst Light Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Bloodclaw Precision Light Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Firefly F.O.F. Light Missile I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Hellfire Assault Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Terror Rage Assault Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Widowmaker Heavy Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Thunderbolt Precision Heavy Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Hydra F.O.F. Heavy Missile I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeMissileNoSkillrq(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Civilian Bloodclaw Light Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxVelocity_chargeOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Mjolnir Torpedo"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Heavy Assault Ship Skill Bonus:
+ # 10% bonus to Light Missile flight time per level
+
+ def test_heavyAssaultShips_explosionDelay_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Bloodclaw Light Missile"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyAssaultShips_explosionDelay_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Piranha Fury Light Missile"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyAssaultShips_explosionDelay_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Exterminator F.O.F. Light Missile I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Heavy Assault Ship Skill Bonus:
+ # 10% bonus to Heavy Assault Missile flight time per level
+
+ def test_heavyAssaultShips_explosionDelay_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Terror Assault Missile"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyAssaultShips_explosionDelay_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Torrent Javelin Assault Missile"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Heavy Assault Ship Skill Bonus:
+ # 10% bonus to Heavy Missile flight time per level
+
+ def test_heavyAssaultShips_explosionDelay_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Havoc Heavy Missile"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyAssaultShips_explosionDelay_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Thunderbolt Fury Heavy Missile"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyAssaultShips_explosionDelay_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Stalker F.O.F. Heavy Missile I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyAssaultShips_explosionDelay_chargeMissileNoSkillrq(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Civilian Bloodclaw Light Missile"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyAssaultShips_explosionDelay_chargeOther(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Defender I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Heavy Assault Ship Skill Bonus:
+ # 5% bonus to Missile Launcher rate of fire per level
+ # Actually affects only Assault, Heavy Assault and Heavy launchers
+
+ def test_heavyAssaultShips_speed_moduleLauncherMissileAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Assault Missile Launcher I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyAssaultShips_speed_moduleLauncherMissileHeavyAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Assault Missile Launcher I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyAssaultShips_speed_moduleLauncherMissileHeavy(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Missile Launcher I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyAssaultShips_speed_moduleLauncherMissileOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Siege Missile Launcher I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/heavyAssaultShips/deimos.py b/eos/tests/typeTests/ships/heavyAssaultShips/deimos.py
new file mode 100755
index 000000000..ad47b97ad
--- /dev/null
+++ b/eos/tests/typeTests/ships/heavyAssaultShips/deimos.py
@@ -0,0 +1,138 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Deimos"
+
+ # Gallente Cruiser Skill Bonus:
+ # 5% bonus to Medium Hybrid Turret damage per level
+
+ def test_gallenteCruiser_damageMultiplier_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Neutron Blaster I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Electron Blaster Cannon I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Cruiser Skill Bonus:
+ # 5% increase to MicroWarpdrive capacitor bonus per level
+
+ def test_gallenteCruiser_capacitorCapacityMultiplier_moduleAfterburnerSkillrqHSM(self):
+ self.buildTested = 0
+ attr = "capacitorCapacityMultiplier"
+ item = "10MN MicroWarpdrive II"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 0.88
+ fLvl = 4
+ fIngame = 1.03
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_capacitorCapacityMultiplier_moduleAfterburnerSkillrqAB(self):
+ self.buildTested = 0
+ attr = "capacitorCapacityMultiplier"
+ item = "10MN Afterburner I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Heavy Assault Ship Skill Bonus:
+ # 10% bonus to Medium Hybrid Turret falloff per level
+
+ def test_heavyAssaultShips_falloff_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "Heavy Ion Blaster I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyAssaultShips_falloff_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "150mm Railgun I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Heavy Assault Ship Skill Bonus:
+ # 5% bonus to Medium Hybrid Turret damage per level
+
+ def test_heavyAssaultShips_damageMultiplier_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Ion Blaster I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyAssaultShips_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "75mm Gatling Rail I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/heavyAssaultShips/eagle.py b/eos/tests/typeTests/ships/heavyAssaultShips/eagle.py
new file mode 100755
index 000000000..7432f0036
--- /dev/null
+++ b/eos/tests/typeTests/ships/heavyAssaultShips/eagle.py
@@ -0,0 +1,224 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Eagle"
+
+ # Caldari Cruiser Skill Bonus:
+ # 10% bonus to Medium Hybrid Turret optimal range per level
+
+ def test_caldariCruiser_maxRange_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Dual 150mm Railgun I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_maxRange_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "75mm Gatling Rail I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Cruiser Skill Bonus:
+ # 5% bonus to shield resistances per level
+
+ def test_caldariCruiser_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Heavy Assault Ship Skill Bonus:
+ # 10% bonus to Medium Hybrid Turret optimal range per level
+
+ def test_heavyAssaultShips_maxRange_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Heavy Ion Blaster I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyAssaultShips_maxRange_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Dual 250mm Railgun I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Heavy Assault Ship Skill Bonus:
+ # 5% bonus to Medium Hybrid Turret damage per level
+
+ def test_heavyAssaultShips_damageMultiplier_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "250mm Railgun I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyAssaultShips_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Light Electron Blaster I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/heavyAssaultShips/ishtar.py b/eos/tests/typeTests/ships/heavyAssaultShips/ishtar.py
new file mode 100755
index 000000000..2893d0363
--- /dev/null
+++ b/eos/tests/typeTests/ships/heavyAssaultShips/ishtar.py
@@ -0,0 +1,217 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Ishtar"
+
+ # Gallente Cruiser Skill Bonus:
+ # 5% bonus to Medium Hybrid Turret damage per skill level
+
+ def test_gallenteCruiser_damageMultiplier_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Ion Blaster I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Light Neutron Blaster I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Cruiser Skill Bonus:
+ # 10% bonus to drone hitpoints per skill level
+
+ def test_gallenteCruiser_hp_droneCombat(self):
+ self.buildTested = 0
+ item = "Curator I"
+ skill = "Gallente Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_hp_droneLogistic(self):
+ self.buildTested = 0
+ item = "Heavy Armor Maintenance Bot I"
+ skill = "Gallente Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_hp_droneEwar(self):
+ self.buildTested = 0
+ item = "Vespa EC-600"
+ skill = "Gallente Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_hp_droneCapDrain(self):
+ self.buildTested = 0
+ item = "Praetor EV-900"
+ skill = "Gallente Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_hp_droneWeb(self):
+ self.buildTested = 0
+ item = "Berserker SW-900"
+ skill = "Gallente Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_hp_droneMining(self):
+ self.buildTested = 0
+ item = "Mining Drone I"
+ skill = "Gallente Cruiser"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(skill, iLvl), ship=self.ship)
+ fEos += self.getItemAttr(layer, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Cruiser Skill Bonus:
+ # 10% bonus to drone damage per skill level
+
+ def test_gallenteCruiser_damageMultiplier_droneCombat(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Valkyrie I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_damageMultiplier_other(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual Light Pulse Laser I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Heavy Assault Ship Skill Bonus:
+ # +5 km bonus to Scout and Heavy Drone operation range per level
+
+ def test_heavyAssaultShips_droneControlRange_ship(self):
+ self.buildTested = 0
+ attr = "droneControlRange"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 25000.0
+ fLvl = 4
+ fIngame = 40000.0
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Heavy Assault Ship Skill Bonus:
+ # +50 m3 extra Drone Bay space per level
+
+ def test_heavyAssaultShips_droneCapacity_ship(self):
+ self.buildTested = 0
+ attr = "droneCapacity"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 250.0
+ fLvl = 4
+ fIngame = 400.0
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/heavyAssaultShips/mimir.py b/eos/tests/typeTests/ships/heavyAssaultShips/mimir.py
new file mode 100755
index 000000000..5e230dbd1
--- /dev/null
+++ b/eos/tests/typeTests/ships/heavyAssaultShips/mimir.py
@@ -0,0 +1,243 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Mimir"
+
+ # Minmatar Cruiser Skill Bonus:
+ # 20% bonus to Medium Projectile Turret damage per level
+
+ def test_minmatarCruiser_damageMultiplier_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "720mm Howitzer Artillery I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "150mm Light AutoCannon I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Cruiser Skill Bonus:
+ # 5% bonus to all armor resistances per level
+
+ def test_minmatarCruiser_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_armorEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_armorExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_armorKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_armorThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 25% bonus to max velocity
+
+ def test_static_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ iIngame = 1.0
+ fIngame = 1.25
+ iEos = self.getShipAttr(attr, ship=self.ship, unmod=True)
+ fEos = self.getShipAttr(attr, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxVelocity_other(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Warrior I"
+ ship_other = "Thorax"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 50% bonus to Medium Projectile Turret falloff
+
+ def test_static_falloff_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "425mm AutoCannon I"
+ ship_other = "Thorax"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_falloff_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "250mm Light Artillery Cannon I"
+ ship_other = "Thorax"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 50% bonus to Medium Projectile Turret optimal range
+
+ def test_static_maxRange_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "650mm Artillery Cannon I"
+ ship_other = "Thorax"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxRange_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Dual 425mm AutoCannon I"
+ ship_other = "Thorax"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/heavyAssaultShips/muninn.py b/eos/tests/typeTests/ships/heavyAssaultShips/muninn.py
new file mode 100755
index 000000000..a1d0d5be5
--- /dev/null
+++ b/eos/tests/typeTests/ships/heavyAssaultShips/muninn.py
@@ -0,0 +1,138 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Muninn"
+
+ # Minmatar Cruiser Skill Bonus:
+ # 5% bonus to Medium Projectile Turret rate of fire per level
+
+ def test_minmatarCruiser_speed_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "720mm Howitzer Artillery I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "125mm Gatling AutoCannon I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Cruiser Skill Bonus:
+ # 5% bonus to Medium Projectile Turret damage per level
+
+ def test_minmatarCruiser_damageMultiplier_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "650mm Artillery Cannon I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "280mm Howitzer Artillery I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Heavy Assault Ship Skill Bonus:
+ # 10% bonus to Medium Projectile Turret optimal range per level
+
+ def test_heavyAssaultShips_maxRange_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "220mm Vulcan AutoCannon I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyAssaultShips_maxRange_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "1200mm Artillery Cannon I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Heavy Assault Ship Skill Bonus:
+ # 7.5% bonus to Medium Projectile Turret tracking speed per level
+
+ def test_heavyAssaultShips_trackingSpeed_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "425mm AutoCannon I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyAssaultShips_trackingSpeed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "800mm Repeating Artillery I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/heavyAssaultShips/sacrilege.py b/eos/tests/typeTests/ships/heavyAssaultShips/sacrilege.py
new file mode 100755
index 000000000..070f32eaa
--- /dev/null
+++ b/eos/tests/typeTests/ships/heavyAssaultShips/sacrilege.py
@@ -0,0 +1,389 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Sacrilege"
+
+ # Amarr Cruiser Skill Bonus:
+ # 5% bonus to Heavy Assault Missile damage per level
+
+ def test_amarrCruiser_emDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Torrent Assault Missile"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_emDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Torrent Javelin Assault Missile"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_emDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Sabretooth Light Missile"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_explosiveDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Fulmination Assault Missile"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_explosiveDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Fulmination Rage Assault Missile"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_explosiveDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Defender I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_kineticDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Assault Missile"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_kineticDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Rage Assault Missile"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_kineticDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Heavy Missile"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_thermalDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Hellfire Assault Missile"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_thermalDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Hellfire Javelin Assault Missile"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_thermalDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Foxfire Rocket"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Cruiser Skill Bonus:
+ # 5% bonus to all armor resistances per level
+
+ def test_amarrCruiser_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Heavy Assault Ship Skill Bonus:
+ # 5% reduction of capacitor recharge time per level
+
+ def test_heavyAssaultShips_rechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "rechargeRate"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Heavy Assault Ship Skill Bonus:
+ # 5% bonus to Missile Launcher rate of fire per level
+ # Actually affects only Assault, Heavy Assault and Heavy launchers
+
+ def test_heavyAssaultShips_speed_moduleLauncherMissileAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Assault Missile Launcher I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyAssaultShips_speed_moduleLauncherMissileHeavyAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Assault Missile Launcher I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyAssaultShips_speed_moduleLauncherMissileHeavy(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Missile Launcher I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyAssaultShips_speed_moduleLauncherMissileOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Standard Missile Launcher I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/heavyAssaultShips/vagabond.py b/eos/tests/typeTests/ships/heavyAssaultShips/vagabond.py
new file mode 100755
index 000000000..19eb1f546
--- /dev/null
+++ b/eos/tests/typeTests/ships/heavyAssaultShips/vagabond.py
@@ -0,0 +1,152 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Vagabond"
+
+ # Minmatar Cruiser Skill Bonus:
+ # 5% bonus to Medium Projectile Turret rate of fire per level
+
+ def test_minmatarCruiser_speed_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Dual 180mm AutoCannon I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "1200mm Artillery Cannon I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Cruiser Skill Bonus:
+ # 5% bonus to max velocity per level
+
+ def test_minmatarruiser_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_maxVelocity_drone(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Warrior I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_maxVelocity_charge(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Hellfire Assault Missile"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Heavy Assault Ship Skill Bonus:
+ # 10% bonus to Medium Projectile Turret falloff range per level
+
+ def test_heavyAssaultShips_falloff_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "425mm AutoCannon I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyAssaultShips_falloff_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "800mm Repeating Artillery I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Heavy Assault Ship Skill Bonus:
+ # 5% bonus to Medium Projectile Turret damage per level
+
+ def test_heavyAssaultShips_damageMultiplier_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "220mm Vulcan AutoCannon I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyAssaultShips_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "150mm Light AutoCannon I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/heavyAssaultShips/vangel.py b/eos/tests/typeTests/ships/heavyAssaultShips/vangel.py
new file mode 100755
index 000000000..faa1c16ad
--- /dev/null
+++ b/eos/tests/typeTests/ships/heavyAssaultShips/vangel.py
@@ -0,0 +1,368 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Vangel"
+
+ # Amarr Cruiser Skill Bonus:
+ # 5% bonus to armor resistances per level
+
+ def test_amarrCruiser_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Cruiser Skill Bonus:
+ # 20% bonus to energy vampire transfer amount per level
+
+ def test_amarrCruiser_powerTransferAmount_moduleEnergyVampire(self):
+ self.buildTested = 0
+ attr = "powerTransferAmount"
+ item = "Medium Nosferatu I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_powerTransferAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "powerTransferAmount"
+ item = "Small Energy Transfer Array I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Cruiser Skill Bonus:
+ # 20% bonus to energy vampire transfer range per level
+
+ def test_amarrCruiser_powerTransferRange_moduleEnergyVampire(self):
+ self.buildTested = 0
+ attr = "powerTransferRange"
+ item = "Medium Nosferatu I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_powerTransferRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "powerTransferRange"
+ item = "Medium Energy Transfer Array I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Cruiser Skill Bonus:
+ # 20% bonus to energy neutralizer transfer amount per level
+
+ def test_amarrCruiser_energyDestabilizationAmount_moduleEnergyDestabilizer(self):
+ self.buildTested = 0
+ attr = "energyDestabilizationAmount"
+ item = "Medium Energy Neutralizer I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_energyDestabilizationAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "energyDestabilizationAmount"
+ item = "Praetor EV-900"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Cruiser Skill Bonus:
+ # 20% bonus to energy neutralizer range per level
+
+ def test_amarrCruiser_energyDestabilizationRange_moduleEnergyDestabilizer(self):
+ self.buildTested = 0
+ attr = "energyDestabilizationRange"
+ item = "Medium Energy Neutralizer I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_energyDestabilizationRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "energyDestabilizationRange"
+ item = "Praetor EV-900"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 50% bonus to repair amount of armor repair systems
+
+ def test_static_armorDamageAmount_moduleArmorRepairer(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Large Armor Repairer I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_armorDamageAmount_moduleArmorRepairerCapital(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Capital Armor Repairer I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_armorDamageAmount_moduleArmorRepairerCivilian(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Civilian Armor Repairer"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_armorDamageAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Small Remote Armor Repair System I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 50% bonus to missile launcher rate of fire
+ # Actually affects only Assault, Heavy Assault and Heavy launchers
+
+ def test_static_speed_moduleLauncherMissileAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Assault Missile Launcher I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_speed_moduleLauncherMissileHeavyAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Assault Missile Launcher I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_speed_moduleLauncherMissileHeavy(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Missile Launcher I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_speed_moduleLauncherMissileOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Rocket Launcher I"
+ ship_other = "Rupture"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/heavyAssaultShips/zealot.py b/eos/tests/typeTests/ships/heavyAssaultShips/zealot.py
new file mode 100755
index 000000000..0233cabe4
--- /dev/null
+++ b/eos/tests/typeTests/ships/heavyAssaultShips/zealot.py
@@ -0,0 +1,138 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Zealot"
+
+ # Amarr Cruiser Skill Bonus:
+ # 10% bonus to Medium Energy Turret capacitor use per level
+
+ def test_amarrCruiser_capacitorNeed_moduleEnergyWeaponMedium(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Heavy Pulse Laser I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Mega Beam Laser I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Cruiser Skill Bonus:
+ # 5% bonus to Medium Energy Turret rate of fire per level
+
+ def test_amarrCruiser_speed_moduleEnergyWeaponMedium(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Quad Light Beam Laser I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_speed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Gatling Pulse Laser I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Heavy Assault Ship Skill Bonus:
+ # 10% bonus to Medium Energy Turret optimal range per level
+
+ def test_heavyAssaultShips_maxRange_moduleEnergyWeaponMedium(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Focused Medium Beam Laser I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyAssaultShips_maxRange_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Dual Heavy Pulse Laser I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Heavy Assault Ship Skill Bonus:
+ # 5% bonus to Medium Energy Turret damage per level
+
+ def test_heavyAssaultShips_damageMultiplier_moduleEnergyWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Focused Medium Pulse Laser I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyAssaultShips_damageMultiplier_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual Heavy Beam Laser I"
+ skill = "Heavy Assault Cruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/heavyInterdictors/__init__.py b/eos/tests/typeTests/ships/heavyInterdictors/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/heavyInterdictors/broadsword.py b/eos/tests/typeTests/ships/heavyInterdictors/broadsword.py
new file mode 100755
index 000000000..1bb52012f
--- /dev/null
+++ b/eos/tests/typeTests/ships/heavyInterdictors/broadsword.py
@@ -0,0 +1,209 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Broadsword"
+
+ # Minmatar Cruiser Skill Bonus:
+ # 5% bonus to medium projectile turret rate of fire per level
+
+ def test_minmatarCruiser_speed_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "425mm AutoCannon I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Dual 425mm AutoCannon I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Cruiser Skill Bonus:
+ # 5% bonus to shield resistances per level
+
+ def test_minmatarCruiser_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_shieldEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_shieldExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_shieldKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_shieldThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Heavy Interdiction Cruisers Skill Bonus:
+ # 10% bonus to medium projectile turret falloff per level
+
+ def test_heavyInterdictors_falloff_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "720mm Howitzer Artillery I"
+ skill = "Heavy Interdiction Cruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyInterdictors_falloff_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "200mm AutoCannon I"
+ skill = "Heavy Interdiction Cruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Heavy Interdiction Cruisers Skill Bonus:
+ # 5% bonus to range of warp disruption fields per level
+
+ def test_heavyInterdictors_warpScrambleRange_moduleWarpDisruptionFieldGenerator(self):
+ self.buildTested = 0
+ attr = "warpScrambleRange"
+ item = "Warp Disruption Field Generator I"
+ skill = "Heavy Interdiction Cruisers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/heavyInterdictors/devoter.py b/eos/tests/typeTests/ships/heavyInterdictors/devoter.py
new file mode 100755
index 000000000..68070b374
--- /dev/null
+++ b/eos/tests/typeTests/ships/heavyInterdictors/devoter.py
@@ -0,0 +1,209 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Devoter"
+
+ # Amarr Cruiser Skill Bonus:
+ # 10% reduction in medium energy turret capacitor use per level
+
+ def test_amarrCruiser_capacitorNeed_moduleEnergyWeaponMedium(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Focused Medium Pulse Laser I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Gatling Pulse Laser I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Cruiser Skill Bonus:
+ # 5% bonus to armor resistances per level
+
+ def test_amarrCruiser_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_armorThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Heavy Interdiction Cruisers Skill Bonus:
+ # 5% bonus to medium energy turret rate of fire per level
+
+ def test_heavyInterdictors_speed_moduleEnergyWeaponMedium(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Focused Medium Beam Laser I"
+ skill = "Heavy Interdiction Cruisers"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyInterdictors_speed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Dual Heavy Pulse Laser I"
+ skill = "Heavy Interdiction Cruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Heavy Interdiction Cruisers Skill Bonus:
+ # 5% bonus to range of warp disruption fields per level
+
+ def test_heavyInterdictors_warpScrambleRange_moduleWarpDisruptionFieldGenerator(self):
+ self.buildTested = 0
+ attr = "warpScrambleRange"
+ item = "Warp Disruption Field Generator I"
+ skill = "Heavy Interdiction Cruisers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/heavyInterdictors/onyx.py b/eos/tests/typeTests/ships/heavyInterdictors/onyx.py
new file mode 100755
index 000000000..84e148279
--- /dev/null
+++ b/eos/tests/typeTests/ships/heavyInterdictors/onyx.py
@@ -0,0 +1,527 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Onyx"
+
+ # Caldari Cruiser Skill Bonus:
+ # 5% bonus to kinetic missile damage per level
+
+ def test_caldariCruiser_kineticDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rocket"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rage Rocket"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Light Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Fury Light Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Serpent F.O.F. Light Missile I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Assault Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Rage Assault Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Heavy Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Fury Heavy Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Hydra F.O.F. Heavy Missile I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Torpedo"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Rage Torpedo"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Cruise Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Fury Cruise Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Dragon F.O.F. Cruise Missile I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rift Citadel Torpedo"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rajas Citadel Cruise Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_chargeMissileLightNoSkillrqMissileOp(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Civilian Bloodclaw Light Missile"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_kineticDamage_other(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Medium Graviton Smartbomb I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Cruiser Skill Bonus:
+ # 5% bonus to shield resistances per level
+
+ def test_caldariCruiser_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Heavy Interdiction Cruisers Skill Bonus:
+ # 10% bonus to heavy assault missile velocity per level
+
+ def test_heavyInterdictors_maxVelocity_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Fulmination Assault Missile"
+ skill = "Heavy Interdiction Cruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyInterdictors_maxVelocity_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Hellfire Javelin Assault Missile"
+ skill = "Heavy Interdiction Cruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Heavy Interdiction Cruisers Skill Bonus:
+ # 10% bonus to heavy missile velocity per level
+
+ def test_heavyInterdictors_maxVelocity_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Scourge Heavy Missile"
+ skill = "Heavy Interdiction Cruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyInterdictors_maxVelocity_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Widowmaker Fury Heavy Missile"
+ skill = "Heavy Interdiction Cruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyInterdictors_maxVelocity_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Eradicator F.O.F. Heavy Missile I"
+ skill = "Heavy Interdiction Cruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyInterdictors_maxVelocity_chargeOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Bane Torpedo"
+ skill = "Heavy Interdiction Cruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Heavy Interdiction Cruisers Skill Bonus:
+ # 5% bonus to range of warp disruption fields per level
+
+ def test_heavyInterdictors_warpScrambleRange_moduleWarpDisruptionFieldGenerator(self):
+ self.buildTested = 0
+ attr = "warpScrambleRange"
+ item = "Warp Disruption Field Generator I"
+ skill = "Heavy Interdiction Cruisers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/heavyInterdictors/phobos.py b/eos/tests/typeTests/ships/heavyInterdictors/phobos.py
new file mode 100755
index 000000000..fe498be14
--- /dev/null
+++ b/eos/tests/typeTests/ships/heavyInterdictors/phobos.py
@@ -0,0 +1,209 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Phobos"
+
+ # Gallente Cruiser Skill Bonus:
+ # 5% bonus to medium hybrid turret damage per level
+
+ def test_gallenteCruiser_damageMultiplier_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Ion Blaster I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Light Neutron Blaster I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Cruiser Skill Bonus:
+ # 5% bonus to armor resistances per level
+
+ def test_gallenteCruiser_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_armorEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_armorExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_armorKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_armorThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Heavy Interdiction Cruisers Skill Bonus:
+ # 10% bonus to medium hybrid turret falloff per level
+
+ def test_heavyInterdictors_falloff_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "Heavy Ion Blaster I"
+ skill = "Heavy Interdiction Cruisers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heavyInterdictors_falloff_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "Light Neutron Blaster I"
+ skill = "Heavy Interdiction Cruisers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Heavy Interdiction Cruisers Skill Bonus:
+ # 5% bonus to range of warp disruption fields per level
+
+ def test_heavyInterdictors_warpScrambleRange_moduleWarpDisruptionFieldGenerator(self):
+ self.buildTested = 0
+ attr = "warpScrambleRange"
+ item = "Warp Disruption Field Generator I"
+ skill = "Heavy Interdiction Cruisers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/industrialCommandShips/__init__.py b/eos/tests/typeTests/ships/industrialCommandShips/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/industrialCommandShips/orca.py b/eos/tests/typeTests/ships/industrialCommandShips/orca.py
new file mode 100755
index 000000000..f46df7da7
--- /dev/null
+++ b/eos/tests/typeTests/ships/industrialCommandShips/orca.py
@@ -0,0 +1,188 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Orca"
+
+ # Industrial Command Ship Skill Bonus:
+ # 5% bonus to cargo capacity per level
+
+ def test_industrialCommandShips_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Industrial Command Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Industrial Command Ship Skill Bonus:
+ # 3% bonus to effectiveness of mining foreman gang links per level
+
+ def test_industrialCommandShips_commandBonus_moduleGangCoordinatorSkillrqMining(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Mining Foreman Link - Harvester Capacitor Efficiency I"
+ skill = "Industrial Command Ships"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_industrialCommandShips_commandBonus_moduleGangCoordinatorSkillrqOther(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Armored Warfare Link - Damage Control I"
+ skill = "Industrial Command Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 250% bonus to tractor beam range
+
+ def test_static_maxRange_moduleTractorBeam(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Small Tractor Beam I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 3.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Salvager I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 100% bonus to tractor beam velocity
+
+ def test_static_maxTractorVelocity_moduleTractorBeam(self):
+ self.buildTested = 0
+ attr = "maxTractorVelocity"
+ item = "Small Tractor Beam I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxTractorVelocity_moduleTractorBeamCapital(self):
+ self.buildTested = 0
+ attr = "maxTractorVelocity"
+ item = "Capital Tractor Beam I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 500% bonus to survey scanner range
+
+ def test_static_surveyScanRange_moduleSurveyScanner(self):
+ self.buildTested = 0
+ attr = "surveyScanRange"
+ item = "Survey Scanner I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 6.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 99% reduction in CPU need for Gang Link modules
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Information Warfare Link - Recon Operation I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # Can use 3 gang link modules simultaneously
+
+ def test_static_maxGroupActive_moduleGangCoordinator(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ item = "Siege Warfare Link - Shield Efficiency I"
+ ship_other = "Nighthawk"
+ iIngame = 1.0
+ fIngame = 3.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxGroupActive_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ item = "10MN Afterburner I"
+ ship_other = "Nighthawk"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/industrials/__init__.py b/eos/tests/typeTests/ships/industrials/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/industrials/badger.py b/eos/tests/typeTests/ships/industrials/badger.py
new file mode 100755
index 000000000..2eb9f1224
--- /dev/null
+++ b/eos/tests/typeTests/ships/industrials/badger.py
@@ -0,0 +1,40 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Badger"
+
+ # Caldari Industrial Skill Bonus:
+ # 5% Bonus Cargo Capacity per skill level
+
+ def test_caldariIndustrial_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Caldari Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Industrial Skill Bonus:
+ # 5% Bonus Max Velocity per skill level
+
+ def test_caldariIndustrial_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Caldari Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/industrials/badgerMarkII.py b/eos/tests/typeTests/ships/industrials/badgerMarkII.py
new file mode 100755
index 000000000..5f9be20bb
--- /dev/null
+++ b/eos/tests/typeTests/ships/industrials/badgerMarkII.py
@@ -0,0 +1,40 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Badger Mark II"
+
+ # Caldari Industrial Skill Bonus:
+ # 5% Bonus Cargo Capacity per skill level
+
+ def test_caldariIndustrial_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Caldari Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Industrial Skill Bonus:
+ # 5% Bonus Max Velocity per skill level
+
+ def test_caldariIndustrial_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Caldari Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/industrials/bestower.py b/eos/tests/typeTests/ships/industrials/bestower.py
new file mode 100755
index 000000000..713704f04
--- /dev/null
+++ b/eos/tests/typeTests/ships/industrials/bestower.py
@@ -0,0 +1,40 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Bestower"
+
+ # Amarr Industrial Skill Bonus:
+ # 5% Bonus Cargo Capacity per skill level
+
+ def test_amarrIndustrial_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Amarr Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Industrial Skill Bonus:
+ # 5% Bonus Max Velocity per skill level
+
+ def test_amarrIndustrial_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Amarr Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/industrials/hoarder.py b/eos/tests/typeTests/ships/industrials/hoarder.py
new file mode 100755
index 000000000..503b52824
--- /dev/null
+++ b/eos/tests/typeTests/ships/industrials/hoarder.py
@@ -0,0 +1,40 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Hoarder"
+
+ # Minmatar Industrial Skill Bonus:
+ # 5% Bonus Cargo Capacity per skill level
+
+ def test_minmatarIndustrial_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Minmatar Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Industrial Skill Bonus:
+ # 5% Bonus Max Velocity per skill level
+
+ def test_minmatarIndustrial_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Minmatar Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/industrials/iteron.py b/eos/tests/typeTests/ships/industrials/iteron.py
new file mode 100755
index 000000000..909924d21
--- /dev/null
+++ b/eos/tests/typeTests/ships/industrials/iteron.py
@@ -0,0 +1,40 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Iteron"
+
+ # Gallente Industrial Skill Bonus:
+ # 5% Bonus Cargo Capacity per skill level
+
+ def test_gallenteIndustrial_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Gallente Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Industrial Skill Bonus:
+ # 5% Bonus Max Velocity per skill level
+
+ def test_gallenteIndustrial_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Gallente Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/industrials/iteronMarkII.py b/eos/tests/typeTests/ships/industrials/iteronMarkII.py
new file mode 100755
index 000000000..b6d661e65
--- /dev/null
+++ b/eos/tests/typeTests/ships/industrials/iteronMarkII.py
@@ -0,0 +1,40 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Iteron Mark II"
+
+ # Gallente Industrial Skill Bonus:
+ # 5% Bonus Cargo Capacity per skill level
+
+ def test_gallenteIndustrial_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Gallente Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Industrial Skill Bonus:
+ # 5% Bonus Max Velocity per skill level
+
+ def test_gallenteIndustrial_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Gallente Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/industrials/iteronMarkIII.py b/eos/tests/typeTests/ships/industrials/iteronMarkIII.py
new file mode 100755
index 000000000..3e3ca72a4
--- /dev/null
+++ b/eos/tests/typeTests/ships/industrials/iteronMarkIII.py
@@ -0,0 +1,40 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Iteron Mark III"
+
+ # Gallente Industrial Skill Bonus:
+ # 5% Bonus Cargo Capacity per skill level
+
+ def test_gallenteIndustrial_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Gallente Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Industrial Skill Bonus:
+ # 5% Bonus Max Velocity per skill level
+
+ def test_gallenteIndustrial_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Gallente Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/industrials/iteronMarkIV.py b/eos/tests/typeTests/ships/industrials/iteronMarkIV.py
new file mode 100755
index 000000000..f9fa3445e
--- /dev/null
+++ b/eos/tests/typeTests/ships/industrials/iteronMarkIV.py
@@ -0,0 +1,40 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Iteron Mark IV"
+
+ # Gallente Industrial Skill Bonus:
+ # 5% Bonus Cargo Capacity per skill level
+
+ def test_gallenteIndustrial_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Gallente Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Industrial Skill Bonus:
+ # 5% Bonus Max Velocity per skill level
+
+ def test_gallenteIndustrial_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Gallente Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/industrials/iteronMarkV.py b/eos/tests/typeTests/ships/industrials/iteronMarkV.py
new file mode 100755
index 000000000..cf07b3cd0
--- /dev/null
+++ b/eos/tests/typeTests/ships/industrials/iteronMarkV.py
@@ -0,0 +1,40 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Iteron Mark V"
+
+ # Gallente Industrial Skill Bonus:
+ # 5% Bonus Cargo Capacity per skill level
+
+ def test_gallenteIndustrial_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Gallente Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Industrial Skill Bonus:
+ # 5% Bonus Max Velocity per skill level
+
+ def test_gallenteIndustrial_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Gallente Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/industrials/mammoth.py b/eos/tests/typeTests/ships/industrials/mammoth.py
new file mode 100755
index 000000000..4638bcaa0
--- /dev/null
+++ b/eos/tests/typeTests/ships/industrials/mammoth.py
@@ -0,0 +1,40 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Mammoth"
+
+ # Minmatar Industrial Skill Bonus:
+ # 5% Bonus Cargo Capacity per skill level
+
+ def test_minmatarIndustrial_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Minmatar Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Industrial Skill Bonus:
+ # 5% Bonus Max Velocity per skill level
+
+ def test_minmatarIndustrial_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Minmatar Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/industrials/noctis.py b/eos/tests/typeTests/ships/industrials/noctis.py
new file mode 100755
index 000000000..527200e21
--- /dev/null
+++ b/eos/tests/typeTests/ships/industrials/noctis.py
@@ -0,0 +1,123 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Noctis"
+
+ # ORE Industrial Skill Bonus:
+ # 5% bonus to Tractor Beam cycle time per level
+
+ def test_oreIndustrial_duration_moduleTractorBeamSkillrqGraviton(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Small Tractor Beam I"
+ skill = "ORE Industrial"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_oreIndustrial_duration_moduleOther(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Passive Targeter I"
+ skill = "ORE Industrial"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # ORE Industrial Skill Bonus:
+ # 5% bonus to Salvager cycle time per level
+
+ def test_oreIndustrial_duration_moduleDataMinerSkillrqSalvaging(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Salvager I"
+ skill = "ORE Industrial"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_oreIndustrial_duration_moduleDataMinerSkillrqOther(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Analyzer I"
+ skill = "ORE Industrial"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # ORE Industrial Skill Bonus:
+ # 60% bonus to Tractor Beam range per level
+
+ def test_oreIndustrial_maxRange_moduleTractorBeamSkillrqGraviton(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Small Tractor Beam I"
+ skill = "ORE Industrial"
+ iLvl = 1
+ iIngame = 1.6
+ fLvl = 4
+ fIngame = 3.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_oreIndustrial_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "200mm Railgun I"
+ skill = "ORE Industrial"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # ORE Industrial Skill Bonus:
+ # 60% bonus to Tractor Beam velocity per level
+
+ def test_oreIndustrial_maxTractorVelocity_moduleTractorBeamSkillrqGraviton(self):
+ self.buildTested = 0
+ attr = "maxTractorVelocity"
+ item = "Small Tractor Beam I"
+ skill = "ORE Industrial"
+ iLvl = 1
+ iIngame = 1.6
+ fLvl = 4
+ fIngame = 3.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/industrials/sigil.py b/eos/tests/typeTests/ships/industrials/sigil.py
new file mode 100755
index 000000000..ac287f682
--- /dev/null
+++ b/eos/tests/typeTests/ships/industrials/sigil.py
@@ -0,0 +1,40 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Sigil"
+
+ # Amarr Industrial Skill Bonus:
+ # 5% Bonus Cargo Capacity per skill level
+
+ def test_amarrIndustrial_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Amarr Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Industrial Skill Bonus:
+ # 5% Bonus Max Velocity per skill level
+
+ def test_amarrIndustrial_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Amarr Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/industrials/wreathe.py b/eos/tests/typeTests/ships/industrials/wreathe.py
new file mode 100755
index 000000000..92b38e2c3
--- /dev/null
+++ b/eos/tests/typeTests/ships/industrials/wreathe.py
@@ -0,0 +1,40 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Wreathe"
+
+ # Minmatar Industrial Skill Bonus:
+ # 5% Bonus Cargo Capacity per skill level
+
+ def test_minmatarIndustrial_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Minmatar Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Industrial Skill Bonus:
+ # 5% Bonus Max Velocity per skill level
+
+ def test_minmatarIndustrial_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Minmatar Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/interceptors/__init__.py b/eos/tests/typeTests/ships/interceptors/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/interceptors/ares.py b/eos/tests/typeTests/ships/interceptors/ares.py
new file mode 100755
index 000000000..898538f25
--- /dev/null
+++ b/eos/tests/typeTests/ships/interceptors/ares.py
@@ -0,0 +1,222 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Ares"
+
+ # Gallente Frigate Skill Bonus:
+ # 5% bonus to Small Hybrid Turret damage per level
+
+ def test_gallenteFrigate_damageMultiplier_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Light Neutron Blaster I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Electron Blaster I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Frigate Skill Bonus:
+ # 7.5% bonus to Small Hybrid Turret tracking speed per level
+ # Wrong value in description, actually it's 7%
+
+ def test_gallenteFrigate_trackingSpeed_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Light Electron Blaster I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.07
+ fLvl = 4
+ fIngame = 1.28
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_trackingSpeed_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "250mm Railgun I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Interceptor Skill Bonus:
+ # 15% reduction in MicroWarpdrive signature radius penalty per level
+
+ def test_interceptors_signatureRadiusBonus_moduleAfterburnerSkillrqHighSpeedManeuvering(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "1MN MicroWarpdrive I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_signatureRadiusBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "Target Painter I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Interceptor Skill Bonus:
+ # 5% bonus to Warp Scrambler and Warp Disruptor range per level
+
+ def test_interceptors_maxRange_moduleWarpScramblerSkillrqPropJamming(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Warp Disruptor I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_maxRange_moduleWarpScramblerNoSkillrqPropJamming(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Civilian Warp Disruptor"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_maxRange_moduleOtherSkillrqPropJamming(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Stasis Webifier I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role bonus:
+ # 80% reduction in Propulsion Jamming systems activation cost
+
+ def test_static_capacitorNeed_moduleStasisWebSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Stasis Webifier I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleStasisWebNoSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Stasis Webifier"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleWarpScramblerSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Warp Scrambler I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleWarpScramblerNoSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Warp Disruptor"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Ship Scanner I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/interceptors/claw.py b/eos/tests/typeTests/ships/interceptors/claw.py
new file mode 100755
index 000000000..910cdc9d2
--- /dev/null
+++ b/eos/tests/typeTests/ships/interceptors/claw.py
@@ -0,0 +1,173 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Claw"
+
+ # Minmatar Frigate Skill Bonus:
+ # 10% bonus to Small Projectile Turret Damage per level
+
+ def test_minmatarFrigate_damageMultiplier_moduleProjectiledWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "280mm Howitzer Artillery I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual 180mm AutoCannon I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Interceptor Skill Bonus:
+ # 15% reduction in MicroWarpdrive signature radius penalty per level
+
+ def test_interceptors_signatureRadiusBonus_moduleAfterburnerSkillrqHighSpeedManeuvering(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "1MN MicroWarpdrive I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_signatureRadiusBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "Inertia Stabilizers I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Interceptor Skill Bonus:
+ # 7.5% bonus to Small Projectile Turret Tracking Speed per level
+
+ def test_interceptors_trackingSpeed_moduleProjectileWeaponSmall(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "125mm Gatling AutoCannon I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_trackingSpeed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "425mm AutoCannon I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role bonus:
+ # 80% reduction in Propulsion Jamming systems activation cost
+
+ def test_static_capacitorNeed_moduleStasisWebSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Stasis Webifier I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleStasisWebNoSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Stasis Webifier"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleWarpScramblerSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Warp Scrambler I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleWarpScramblerNoSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Warp Disruptor"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Small Energy Neutralizer I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/interceptors/crow.py b/eos/tests/typeTests/ships/interceptors/crow.py
new file mode 100755
index 000000000..352d367a7
--- /dev/null
+++ b/eos/tests/typeTests/ships/interceptors/crow.py
@@ -0,0 +1,683 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Crow"
+
+ # Caldari Frigate Skill Bonus:
+ # 10% bonus to Kinetic Missile damage per level
+
+ def test_caldariFrigate_kineticDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Javelin Rocket"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Fury Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Serpent F.O.F. Light Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Assault Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Rage Assault Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Heavy Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Fury Heavy Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Hydra F.O.F. Heavy Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Javelin Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Fury Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Dragon F.O.F. Cruise Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rift Citadel Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rajas Citadel Cruise Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeMissileLightNoSkillrqMissileOp(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Civilian Bloodclaw Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_kineticDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Barrage S"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Interceptor Skill Bonus:
+ # 15% reduction in MicroWarpdrive signature radius penalty per level
+
+ def test_interceptors_signatureRadiusBonus_moduleAfterburnerSkillrqHighSpeedManeuvering(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "1MN MicroWarpdrive I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_signatureRadiusBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "Inertia Stabilizers I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Interceptor Skill Bonus:
+ # 10% bonus to Missile Velocity per level
+
+ def test_interceptors_maxVelocity_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Foxfire Rocket"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_maxVelocity_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Gremlin Javelin Rocket"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_maxVelocity_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Bloodclaw Light Missile"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_maxVelocity_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Flameburst Precision Light Missile"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_maxVelocity_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Exterminator F.O.F. Light Missile I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_maxVelocity_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Fulmination Assault Missile"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_maxVelocity_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Torrent Javelin Assault Missile"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_maxVelocity_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Thunderbolt Heavy Missile"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_maxVelocity_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Scourge Precision Heavy Missile"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_maxVelocity_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Stalker F.O.F. Heavy Missile I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_maxVelocity_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Bane Torpedo"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_maxVelocity_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Inferno Rage Torpedo"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_maxVelocity_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Cataclysm Cruise Missile"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_maxVelocity_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Devastator Fury Cruise Missile"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_maxVelocity_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Dragon F.O.F. Cruise Missile I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_maxVelocity_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Purgatory Citadel Torpedo"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_maxVelocity_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Sol Citadel Cruise Missile"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_maxVelocity_chargeMissileDefender(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Defender I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_maxVelocity_chargeMissileLightNoSkillrqMissileOp(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Civilian Bloodclaw Light Missile"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role bonus:
+ # 80% reduction in Propulsion Jamming systems activation cost
+
+ def test_static_capacitorNeed_moduleStasisWebSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Stasis Webifier I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleStasisWebNoSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Stasis Webifier"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleWarpScramblerSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Warp Disruptor I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleWarpScramblerNoSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Warp Disruptor"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Micro EMP Smartbomb I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/interceptors/crusader.py b/eos/tests/typeTests/ships/interceptors/crusader.py
new file mode 100755
index 000000000..f90f0bd13
--- /dev/null
+++ b/eos/tests/typeTests/ships/interceptors/crusader.py
@@ -0,0 +1,251 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Crusader"
+
+ # Amarr Frigate Skill Bonus:
+ # 10% reduction in Small Energy Turret capacitor use per level
+
+ def test_amarrFrigate_capacitorNeed_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Dual Light Beam Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Focused Medium Beam Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "125mm Railgun I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Frigate Skill Bonus:
+ # 5% bonus to Small Energy Turret damage per level
+
+ def test_amarrFrigate_damageMultiplier_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual Light Pulse Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_damageMultiplier_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Pulse Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_damageMultiplier_moduleOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Light Neutron Blaster I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Interceptor Skill Bonus:
+ # 15% reduction in MicroWarpdrive signature radius penalty per level
+
+ def test_interceptors_signatureRadiusBonus_moduleAfterburnerSkillrqHighSpeedManeuvering(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "1MN MicroWarpdrive I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_signatureRadiusBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "Inertia Stabilizers I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Interceptor Skill Bonus:
+ # 7.5% bonus to Small Energy Turret Tracking Speed per level
+
+ def test_interceptors_trackingSpeed_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Gatling Pulse Laser I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_trackingSpeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Quad Light Beam Laser I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_trackingSpeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "75mm Gatling Rail I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role bonus:
+ # 80% reduction in Propulsion Jamming systems activation cost
+
+ def test_static_capacitorNeed_moduleStasisWebSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Stasis Webifier I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleStasisWebNoSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Stasis Webifier"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleWarpScramblerSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Warp Scrambler I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleWarpScramblerNoSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Warp Disruptor"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Small Shield Booster I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/interceptors/malediction.py b/eos/tests/typeTests/ships/interceptors/malediction.py
new file mode 100755
index 000000000..dc7f7a41d
--- /dev/null
+++ b/eos/tests/typeTests/ships/interceptors/malediction.py
@@ -0,0 +1,457 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Malediction"
+
+ # Amarr Frigate Skill Bonus:
+ # 5% bonus to rocket damage per level
+
+ def test_amarrFrigate_emDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Gremlin Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_emDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Gremlin Rage Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_emDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Sabretooth Light Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosiveDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Phalanx Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosiveDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Phalanx Javelin Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosiveDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Havoc Heavy Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_kineticDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_kineticDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rage Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_kineticDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Serpent F.O.F. Light Missile I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_thermalDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Foxfire Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_thermalDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Foxfire Javelin Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_thermalDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Flameburst Precision Light Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Frigate Skill Bonus:
+ # 5% bonus to armor resistances per level
+
+ def test_amarrFrigate_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_armorEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_armorExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_armorKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_armorThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Interceptor Skill Bonus:
+ # 15% reduction in MicroWarpdrive signature radius penalty per level
+
+ def test_interceptors_signatureRadiusBonus_moduleAfterburnerSkillrqHighSpeedManeuvering(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "1MN MicroWarpdrive I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_signatureRadiusBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "Target Painter I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Interceptor Skill Bonus:
+ # 5% bonus to Warp Scrambler and Warp Disruptor range per level
+
+ def test_interceptors_maxRange_moduleWarpScramblerSkillrqPropJamming(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Warp Scrambler I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_maxRange_moduleWarpScramblerNoSkillrqPropJamming(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Civilian Warp Disruptor"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_maxRange_moduleOtherSkillrqPropJamming(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Stasis Webifier I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role bonus:
+ # 80% reduction in Propulsion Jamming systems activation cost
+
+ def test_static_capacitorNeed_moduleStasisWebSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Stasis Webifier I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleStasisWebNoSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Stasis Webifier"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleWarpScramblerSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Warp Disruptor I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleWarpScramblerNoSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Warp Disruptor"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Codebreaker I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/interceptors/raptor.py b/eos/tests/typeTests/ships/interceptors/raptor.py
new file mode 100755
index 000000000..65db5f506
--- /dev/null
+++ b/eos/tests/typeTests/ships/interceptors/raptor.py
@@ -0,0 +1,221 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Raptor"
+
+ # Caldari Frigate Skill Bonus:
+ # 5% bonus to Small Hybrid Turret Damage per level
+
+ def test_caldariFrigate_damageMultiplier_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "75mm Gatling Rail I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual 150mm Railgun I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Frigate Skill Bonus:
+ # 10% bonus to Small Hybrid Turret optimal range per level
+
+ def test_caldariFrigate_maxRange_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Light Neutron Blaster I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_maxRange_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Heavy Ion Blaster I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Interceptor Skill Bonus:
+ # 15% reduction in MicroWarpdrive signature radius penalty per level
+
+ def test_interceptors_signatureRadiusBonus_moduleAfterburnerSkillrqHighSpeedManeuvering(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "1MN MicroWarpdrive I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_signatureRadiusBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "Inertia Stabilizers I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Interceptor Skill Bonus:
+ # 5% bonus to Warp Scrambler and Warp Disruptor range per level
+
+ def test_interceptors_maxRange_moduleWarpScramblerSkillrqPropJamming(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Warp Scrambler I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_maxRange_moduleWarpScramblerNoSkillrqPropJamming(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Civilian Warp Disruptor"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_maxRange_moduleOtherSkillrqPropJamming(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Stasis Webifier I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role bonus:
+ # 80% reduction in Propulsion Jamming systems activation cost
+
+ def test_static_capacitorNeed_moduleStasisWebSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Stasis Webifier I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleStasisWebNoSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Stasis Webifier"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleWarpScramblerSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Warp Scrambler I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleWarpScramblerNoSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Warp Disruptor"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Quad Light Beam Laser I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/interceptors/stiletto.py b/eos/tests/typeTests/ships/interceptors/stiletto.py
new file mode 100755
index 000000000..b9785f7d3
--- /dev/null
+++ b/eos/tests/typeTests/ships/interceptors/stiletto.py
@@ -0,0 +1,221 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Stiletto"
+
+ # Minmatar Frigate Skill Bonus:
+ # 5% bonus to Small Projectile Turret damage per level
+
+ def test_minmatarFrigate_damageMultiplier_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "200mm AutoCannon I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "220mm Vulcan AutoCannon I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Frigate Skill Bonus:
+ # 7.5% bonus to Small Projectile Turret tracking speed per level
+
+ def test_minmatarFrigate_trackingSpeed_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "125mm Gatling AutoCannon I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_trackingSpeed_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "720mm Howitzer Artillery I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Interceptor Skill Bonus:
+ # 15% reduction in MicroWarpdrive signature radius penalty per level
+
+ def test_interceptors_signatureRadiusBonus_moduleAfterburnerSkillrqHighSpeedManeuvering(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "1MN MicroWarpdrive I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_signatureRadiusBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "Target Painter I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Interceptor Skill Bonus:
+ # 5% bonus to Warp Scrambler and Warp Disruptor range per level
+
+ def test_interceptors_maxRange_moduleWarpScramblerSkillrqPropJamming(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Warp Disruptor I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_maxRange_moduleWarpScramblerNoSkillrqPropJamming(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Civilian Warp Disruptor"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_maxRange_moduleOtherSkillrqPropJamming(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Stasis Webifier I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role bonus:
+ # 80% reduction in Propulsion Jamming systems activation cost
+
+ def test_static_capacitorNeed_moduleStasisWebSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Stasis Webifier I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleStasisWebNoSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Stasis Webifier"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleWarpScramblerSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Warp Scrambler I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleWarpScramblerNoSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Warp Disruptor"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Ship Scanner I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/interceptors/taranis.py b/eos/tests/typeTests/ships/interceptors/taranis.py
new file mode 100755
index 000000000..4392dd544
--- /dev/null
+++ b/eos/tests/typeTests/ships/interceptors/taranis.py
@@ -0,0 +1,173 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Taranis"
+
+ # Gallente Frigate Skill Bonus:
+ # 10% Small Hybrid Turret damage per level
+
+ def test_gallenteFrigate_damageMultiplier_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Light Neutron Blaster I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "200mm Railgun I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Interceptor Skill Bonus:
+ # 15% reduction in MicroWarpdrive signature radius penalty Per Interceptor Skill Level
+
+ def test_interceptors_signatureRadiusBonus_moduleAfterburnerSkillrqHighSpeedManeuvering(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "1MN MicroWarpdrive I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_signatureRadiusBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "Inertia Stabilizers I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Interceptor Skill Bonus:
+ # 7.5% Small Hybrid Turret tracking speed Per Interceptor Skill Level
+
+ def test_interceptors_trackingSpeed_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "125mm Railgun I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interceptors_trackingSpeed_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Heavy Neutron Blaster I"
+ skill = "Interceptors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role bonus:
+ # 80% reduction in Propulsion Jamming systems activation cost
+
+ def test_static_capacitorNeed_moduleStasisWebSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Stasis Webifier I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleStasisWebNoSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Stasis Webifier"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleWarpScramblerSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Warp Scrambler I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleWarpScramblerNoSkillrqPropulsionJamming(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Warp Disruptor"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Salvager I"
+ ship_other = "Rifter"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/interdictors/__init__.py b/eos/tests/typeTests/ships/interdictors/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/interdictors/eris.py b/eos/tests/typeTests/ships/interdictors/eris.py
new file mode 100755
index 000000000..9283b27d1
--- /dev/null
+++ b/eos/tests/typeTests/ships/interdictors/eris.py
@@ -0,0 +1,231 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Eris"
+
+ # Destroyer Skill Bonus:
+ # 10% bonus to Small Hybrid Turret falloff per level
+
+ def test_destroyers_falloff_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "Light Neutron Blaster I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_falloff_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "Heavy Electron Blaster I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Destroyer Skill Bonus:
+ # 10% bonus to Small Hybrid Turret tracking speed per level
+
+ def test_destroyers_trackingSpeed_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "75mm Gatling Rail I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_trackingSpeed_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Dual 150mm Railgun I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Interdictors Skill Bonus:
+ # 5% bonus to Rocket thermal damage per level
+
+ def test_interdictors_thermalDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Foxfire Rocket"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_thermalDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Foxfire Javelin Rocket"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Interdictors Skill Bonus:
+ # 5% bonus to Light Missile thermal damage per level
+
+ def test_interdictors_thermalDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Flameburst Light Missile"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_thermalDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Flameburst Precision Light Missile"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_thermalDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Firefly F.O.F. Light Missile I"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_thermalDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Hellfire Assault Missile"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Interdictors Skill Bonus:
+ # 10% bonus to Interdiction Sphere Launcher rate of fire per level
+
+ def test_interdictors_speed_moduleLauncherInterdictionSphere(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Interdiction Sphere Launcher I"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_speed_moduleOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "125mm Gatling AutoCannon I"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_moduleReactivationDelay_moduleLauncherInterdictionSphere(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Interdiction Sphere Launcher I"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/interdictors/flycatcher.py b/eos/tests/typeTests/ships/interdictors/flycatcher.py
new file mode 100755
index 000000000..13c5c1579
--- /dev/null
+++ b/eos/tests/typeTests/ships/interdictors/flycatcher.py
@@ -0,0 +1,369 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Flycatcher"
+
+ # Destroyer Skill Bonus:
+ # 10% bonus to Rocket velocity per level
+
+ def test_destroyers_maxVelocity_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Gremlin Rocket"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_maxVelocity_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Phalanx Rage Rocket"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Destroyer Skill Bonus:
+ # 10% bonus to Light Missile velocity per level
+
+ def test_destroyers_maxVelocity_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Flameburst Light Missile"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_maxVelocity_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Piranha Precision Light Missile"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_maxVelocity_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Seeker F.O.F. Light Missile I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_maxVelocity_chargeMissileLightNoSkillrqMissileOp(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Civilian Bloodclaw Light Missile"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_maxVelocity_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Havoc Heavy Missile"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Destroyer Skill Bonus:
+ # 3% bonus to Light Missile effectiveness against faster moving targets per level
+
+ def test_destroyers_aoeVelocity_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Bloodclaw Light Missile"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_aoeVelocity_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Flameburst Fury Light Missile"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_aoeVelocity_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Exterminator F.O.F. Light Missile I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_aoeVelocity_chargeMissileLightNoSkillrqMissileOp(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Civilian Bloodclaw Light Missile"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_aoeVelocity_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Phalanx Rocket"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Interdictors Skill Bonus:
+ # 5% bonus to Rocket kinetic damage per level
+
+ def test_interdictors_kineticDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rocket"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_kineticDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rage Rocket"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Interdictors Skill Bonus:
+ # 5% bonus to Light Missile kinetic damage per level
+
+ def test_interdictors_kineticDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Light Missile"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_kineticDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Precision Light Missile"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_kineticDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Serpent F.O.F. Light Missile I"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_kineticDamage_chargeMissileLightNoSkillrqMissileOp(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Civilian Bloodclaw Light Missile"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_kineticDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Hydra F.O.F. Heavy Missile I"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Interdictors Skill Bonus:
+ # 10% bonus to Interdiction Sphere Launcher rate of fire per level
+
+ def test_interdictors_speed_moduleLauncherInterdictionSphere(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Interdiction Sphere Launcher I"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_speed_moduleOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Standard Missile Launcher I"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_moduleReactivationDelay_moduleLauncherInterdictionSphere(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Interdiction Sphere Launcher I"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/interdictors/heretic.py b/eos/tests/typeTests/ships/interdictors/heretic.py
new file mode 100755
index 000000000..701d206a7
--- /dev/null
+++ b/eos/tests/typeTests/ships/interdictors/heretic.py
@@ -0,0 +1,816 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Heretic"
+
+ # Destroyer Skill Bonus:
+ # 5% bonus to rocket damage per level
+
+ def test_destroyers_emDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Gremlin Rocket"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_emDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Gremlin Rage Rocket"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_emDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Torrent Assault Missile"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_explosiveDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Phalanx Rocket"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_explosiveDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Phalanx Javelin Rocket"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_explosiveDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Exterminator F.O.F. Light Missile I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_kineticDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rocket"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_kineticDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Javelin Rocket"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_kineticDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Light Missile"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_thermalDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Foxfire Rocket"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_thermalDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Foxfire Rage Rocket"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_thermalDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Inferno Torpedo"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Destroyer Skill Bonus:
+ # 5% bonus to rocket explosion velocity per level
+
+ def test_destroyers_aoeVelocity_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Foxfire Rocket"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_aoeVelocity_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Gremlin Rage Rocket"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Destroyer Skill Bonus:
+ # 5% bonus to missile explosion velocity per level
+
+ def test_destroyers_aoeVelocity_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Sabretooth Light Missile"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_aoeVelocity_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Piranha Fury Light Missile"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_aoeVelocity_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Firefly F.O.F. Light Missile I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_aoeVelocity_chargeMissileLightNoSkillrqMissileOp(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Civilian Bloodclaw Light Missile"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_aoeVelocity_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Fulmination Assault Missile"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_aoeVelocity_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Terror Javelin Assault Missile"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_aoeVelocity_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Thunderbolt Heavy Missile"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_aoeVelocity_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Scourge Fury Heavy Missile"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_aoeVelocity_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Eradicator F.O.F. Heavy Missile I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_aoeVelocity_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Juggernaut Torpedo"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_aoeVelocity_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Inferno Rage Torpedo"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_aoeVelocity_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Devastator Cruise Missile"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_aoeVelocity_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Paradise Fury Cruise Missile"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_aoeVelocity_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Hunter F.O.F. Cruise Missile I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_aoeVelocity_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Doom Citadel Torpedo"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_aoeVelocity_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Rajas Citadel Cruise Missile"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Interdictors Skill Bonus:
+ # 5% bonus to missile velocity per level
+
+ def test_interdictors_maxVelocity_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Gremlin Rocket"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_maxVelocity_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Phalanx Rage Rocket"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_maxVelocity_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Flameburst Light Missile"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_maxVelocity_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Piranha Precision Light Missile"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_maxVelocity_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Seeker F.O.F. Light Missile I"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_maxVelocity_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Hellfire Assault Missile"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_maxVelocity_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Torrent Rage Assault Missile"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_maxVelocity_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Scourge Heavy Missile"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_maxVelocity_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Widowmaker Fury Heavy Missile"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_maxVelocity_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Hydra F.O.F. Heavy Missile I"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_maxVelocity_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Juggernaut Torpedo"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_maxVelocity_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Bane Javelin Torpedo"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_maxVelocity_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Devastator Cruise Missile"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_maxVelocity_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Wrath Precision Cruise Missile"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_maxVelocity_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Dragon F.O.F. Cruise Missile I"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_maxVelocity_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Doom Citadel Torpedo"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_maxVelocity_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Thunar Citadel Cruise Missile"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_maxVelocity_chargeMissileDefender(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Defender I"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_maxVelocity_chargeMissileLightNoSkillrqMissileOp(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Civilian Bloodclaw Light Missile"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Interdictors Skill Bonus:
+ # 10% bonus to Interdiction Sphere Launcher rate of fire per level
+
+ def test_interdictors_speed_moduleLauncherInterdictionSphere(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Interdiction Sphere Launcher I"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_speed_moduleOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Rocket Launcher I"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_moduleReactivationDelay_moduleLauncherInterdictionSphere(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Interdiction Sphere Launcher I"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/interdictors/sabre.py b/eos/tests/typeTests/ships/interdictors/sabre.py
new file mode 100755
index 000000000..4de557c5e
--- /dev/null
+++ b/eos/tests/typeTests/ships/interdictors/sabre.py
@@ -0,0 +1,168 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Sabre"
+
+ # Destroyer Skill Bonus:
+ # 5% bonus to Small Projectile Turret damage per level
+
+ def test_destroyers_damageMultiplier_moduleProjectileWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "250mm Light Artillery Cannon I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "720mm Carbine Howitzer I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Destroyer Skill Bonus:
+ # 10% bonus to Small Projectile Turret tracking speed per level
+
+ def test_destroyers_trackingSpeed_moduleProjectileWeaponSmall(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "125mm Gatling AutoCannon I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_destroyers_trackingSpeed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Dual 180mm AutoCannon I"
+ skill = "Destroyers"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Interdictors Skill Bonus:
+ # 10% bonus to Small Projectile Turret falloff per level
+
+ def test_interdictors_falloff_moduleProjectileWeaponSmall(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "200mm AutoCannon I"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_falloff_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "425mm AutoCannon I"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Interdictors Skill Bonus:
+ # 10% bonus to Interdiction Sphere Launcher rate of fire per level
+
+ def test_interdictors_speed_moduleLauncherInterdictionSphere(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Interdiction Sphere Launcher I"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_speed_moduleOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "125mm Gatling AutoCannon I"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_moduleReactivationDelay_moduleLauncherInterdictionSphere(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Interdiction Sphere Launcher I"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_interdictors_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ skill = "Interdictors"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/jumpFreighters/__init__.py b/eos/tests/typeTests/ships/jumpFreighters/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/jumpFreighters/anshar.py b/eos/tests/typeTests/ships/jumpFreighters/anshar.py
new file mode 100755
index 000000000..545cad2a1
--- /dev/null
+++ b/eos/tests/typeTests/ships/jumpFreighters/anshar.py
@@ -0,0 +1,126 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Anshar"
+
+ # Gallente Freighter Skill Bonus:
+ # 5% bonus to cargo hold capacity per level
+
+ def test_gallenteFreighter_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Gallente Freighter"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Freighter Skill Bonus:
+ # 5% bonus to agility per level
+
+ def test_gallenteFreighter_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Gallente Freighter"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Jump Freighters Skill Bonus:
+ # 10% bonus to shield hitpoints per level
+
+ def test_jumpFreighters_shieldCapacity_ship(self):
+ self.buildTested = 0
+ attr = "shieldCapacity"
+ skill = "Jump Freighters"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Jump Freighters Skill Bonus:
+ # 10% bonus to armor hitpoints per level
+
+ def test_jumpFreighters_armorHp_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ skill = "Jump Freighters"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Jump Freighters Skill Bonus:
+ # 10% bonus to hull hitpoints per level
+
+ def test_jumpFreighters_hp_ship(self):
+ self.buildTested = 0
+ attr = "hp"
+ skill = "Jump Freighters"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Jump Freighters Skill Bonus:
+ # 10% reduction in jump fuel need per level
+
+ def test_jumpFreighters_jumpDriveConsumptionAmount_ship(self):
+ self.buildTested = 0
+ attr = "jumpDriveConsumptionAmount"
+ skill = "Jump Freighters"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Advanced Spaceship Command Skill Bonus:
+ # 5% Bonus to the agility of ship per skill level
+ # Moved from Advanced Spaceship Command skill tests, not listed as bonus of ship
+
+ def test_advancedSpaceshipCommand_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Advanced Spaceship Command"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/jumpFreighters/ark.py b/eos/tests/typeTests/ships/jumpFreighters/ark.py
new file mode 100755
index 000000000..95c98d846
--- /dev/null
+++ b/eos/tests/typeTests/ships/jumpFreighters/ark.py
@@ -0,0 +1,126 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Ark"
+
+ # Amarr Freighter Skill Bonus:
+ # 5% bonus to cargo hold capacity per level
+
+ def test_amarrFreighter_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Amarr Freighter"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Freighter Skill Bonus:
+ # 5% bonus to agility per level
+
+ def test_amarrFreighter_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Amarr Freighter"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Jump Freighters Skill Bonus:
+ # 10% bonus to shield hitpoints per level
+
+ def test_jumpFreighters_shieldCapacity_ship(self):
+ self.buildTested = 0
+ attr = "shieldCapacity"
+ skill = "Jump Freighters"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Jump Freighters Skill Bonus:
+ # 10% bonus to armor hitpoints per level
+
+ def test_jumpFreighters_armorHp_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ skill = "Jump Freighters"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Jump Freighters Skill Bonus:
+ # 10% bonus to hull hitpoints per level
+
+ def test_jumpFreighters_hp_ship(self):
+ self.buildTested = 0
+ attr = "hp"
+ skill = "Jump Freighters"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Jump Freighters Skill Bonus:
+ # 10% reduction in jump fuel need per level
+
+ def test_jumpFreighters_jumpDriveConsumptionAmount_ship(self):
+ self.buildTested = 0
+ attr = "jumpDriveConsumptionAmount"
+ skill = "Jump Freighters"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Advanced Spaceship Command Skill Bonus:
+ # 5% Bonus to the agility of ship per skill level
+ # Moved from Advanced Spaceship Command skill tests, not listed as bonus of ship
+
+ def test_advancedSpaceshipCommand_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Advanced Spaceship Command"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/jumpFreighters/nomad.py b/eos/tests/typeTests/ships/jumpFreighters/nomad.py
new file mode 100755
index 000000000..84f816c6e
--- /dev/null
+++ b/eos/tests/typeTests/ships/jumpFreighters/nomad.py
@@ -0,0 +1,126 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Nomad"
+
+ # Minmatar Freighter Skill Bonus:
+ # 5% bonus to cargo hold capacity per level
+
+ def test_minmatarFreighter_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Minmatar Freighter"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Freighter Skill Bonus:
+ # 5% bonus to agility per level
+
+ def test_minmatarFreighter_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Minmatar Freighter"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Jump Freighters Skill Bonus:
+ # 10% bonus to shield hitpoints per level
+
+ def test_jumpFreighters_shieldCapacity_ship(self):
+ self.buildTested = 0
+ attr = "shieldCapacity"
+ skill = "Jump Freighters"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Jump Freighters Skill Bonus:
+ # 10% bonus to armor hitpoints per level
+
+ def test_jumpFreighters_armorHp_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ skill = "Jump Freighters"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Jump Freighters Skill Bonus:
+ # 10% bonus to hull hitpoints per level
+
+ def test_jumpFreighters_hp_ship(self):
+ self.buildTested = 0
+ attr = "hp"
+ skill = "Jump Freighters"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Jump Freighters Skill Bonus:
+ # 10% reduction in jump fuel need per level
+
+ def test_jumpFreighters_jumpDriveConsumptionAmount_ship(self):
+ self.buildTested = 0
+ attr = "jumpDriveConsumptionAmount"
+ skill = "Jump Freighters"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Advanced Spaceship Command Skill Bonus:
+ # 5% Bonus to the agility of ship per skill level
+ # Moved from Advanced Spaceship Command skill tests, not listed as bonus of ship
+
+ def test_advancedSpaceshipCommand_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Advanced Spaceship Command"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/jumpFreighters/rhea.py b/eos/tests/typeTests/ships/jumpFreighters/rhea.py
new file mode 100755
index 000000000..bdb9d58d6
--- /dev/null
+++ b/eos/tests/typeTests/ships/jumpFreighters/rhea.py
@@ -0,0 +1,126 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Rhea"
+
+ # Caldari Freighter Skill Bonus:
+ # 5% bonus to cargo hold capacity per level
+
+ def test_caldariFreighter_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Caldari Freighter"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Freighter Skill Bonus:
+ # 5% bonus to agility per level
+
+ def test_caldariFreighter_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Caldari Freighter"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Jump Freighters Skill Bonus:
+ # 10% bonus to shield hitpoints per level
+
+ def test_jumpFreighters_shieldCapacity_ship(self):
+ self.buildTested = 0
+ attr = "shieldCapacity"
+ skill = "Jump Freighters"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Jump Freighters Skill Bonus:
+ # 10% bonus to armor hitpoints per level
+
+ def test_jumpFreighters_armorHp_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ skill = "Jump Freighters"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Jump Freighters Skill Bonus:
+ # 10% bonus to hull hitpoints per level
+
+ def test_jumpFreighters_hp_ship(self):
+ self.buildTested = 0
+ attr = "hp"
+ skill = "Jump Freighters"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Jump Freighters Skill Bonus:
+ # 10% reduction in jump fuel need per level
+
+ def test_jumpFreighters_jumpDriveConsumptionAmount_ship(self):
+ self.buildTested = 0
+ attr = "jumpDriveConsumptionAmount"
+ skill = "Jump Freighters"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Advanced Spaceship Command Skill Bonus:
+ # 5% Bonus to the agility of ship per skill level
+ # Moved from Advanced Spaceship Command skill tests, not listed as bonus of ship
+
+ def test_advancedSpaceshipCommand_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Advanced Spaceship Command"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/logistics/__init__.py b/eos/tests/typeTests/ships/logistics/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/logistics/basilisk.py b/eos/tests/typeTests/ships/logistics/basilisk.py
new file mode 100755
index 000000000..615db539d
--- /dev/null
+++ b/eos/tests/typeTests/ships/logistics/basilisk.py
@@ -0,0 +1,325 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Basilisk"
+
+ # Caldari Cruiser Skill Bonus:
+ # 150% bonus to Shield Transport range per level
+
+ def test_caldariCruiser_shieldTransferRange_moduleShieldTransporter(self):
+ self.buildTested = 0
+ attr = "shieldTransferRange"
+ item = "Medium Shield Transporter I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 2.5
+ fLvl = 4
+ fIngame = 7.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldTransferRange_moduleShieldTransporterCapital(self):
+ self.buildTested = 0
+ attr = "shieldTransferRange"
+ item = "Capital Shield Transporter I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 2.5
+ fLvl = 4
+ fIngame = 7.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_shieldTransferRange_moduleShieldTransporterCivilian(self):
+ self.buildTested = 0
+ attr = "shieldTransferRange"
+ item = "Civilian Remote Shield Transporter"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 2.5
+ fLvl = 4
+ fIngame = 7.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Cruiser Skill Bonus:
+ # 150% bonus to Energy Transfer Array range per level
+
+ def test_caldariCruiser_powerTransferRange_moduleEnergyTransfer(self):
+ self.buildTested = 0
+ attr = "powerTransferRange"
+ item = "Large Energy Transfer Array I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 2.5
+ fLvl = 4
+ fIngame = 7.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_powerTransferRange_moduleEnergyTransferCapital(self):
+ self.buildTested = 0
+ attr = "powerTransferRange"
+ item = "Capital Energy Transfer Array I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 2.5
+ fLvl = 4
+ fIngame = 7.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCruiser_powerTransferRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "powerTransferRange"
+ item = "Heavy Nosferatu I"
+ skill = "Caldari Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Cruiser Skill Bonus:
+ # 20% bonus to Shield Maintenance Bot transfer amount per level
+ # Actually static 100% bonus, anyway cruiser skill must be at V level
+
+ def test_static_shieldBonus_droneLogistics(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Medium Shield Maintenance Bot I"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_shieldBonus_other(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Small Shield Booster I"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Logistics Skill Bonus:
+ # 15% reduction in Shield Transport capacitor use per level
+
+ def test_logistics_capacitorNeed_moduleShieldTransporter(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Medium Shield Transporter I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_logistics_capacitorNeed_moduleShieldTransporterCapital(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Capital Shield Transporter I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_logistics_capacitorNeed_moduleShieldTransporterCivilian(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Remote Shield Transporter"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Logistics Skill Bonus:
+ # 15% reduction in Energy Transfer Array capacitor use per level
+
+ def test_logistics_capacitorNeed_moduleEnergyTransfer(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Medium Energy Transfer Array I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_logistics_capacitorNeed_moduleEnergyTransferCapital(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Capital Energy Transfer Array I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_logistics_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "ECM Burst I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # -50% CPU need for Shield Transporters
+
+ def test_static_cpu_moduleShieldTransporter(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Micro Shield Transporter I"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleShieldTransporterCapital(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Capital Shield Transporter I"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleShieldTransporterCivilian(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Civilian Remote Shield Transporter"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Ballistic Control System I"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # -50% power need for Energy Transfer Arrays
+
+ def test_static_power_moduleEnergyTransfer(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Medium Energy Transfer Array I"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_power_moduleEnergyTransferCapital(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Capital Energy Transfer Array I"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_power_moduleOther(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Large Proton Smartbomb I"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/logistics/guardian.py b/eos/tests/typeTests/ships/logistics/guardian.py
new file mode 100755
index 000000000..66c15a94f
--- /dev/null
+++ b/eos/tests/typeTests/ships/logistics/guardian.py
@@ -0,0 +1,327 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Guardian"
+
+ # Amarr Cruiser Skill Bonus:
+ # 150% bonus to Energy Transfer Array range per level
+
+ def test_amarrCruiser_powerTransferRange_moduleEnergyTransfer(self):
+ self.buildTested = 0
+ attr = "powerTransferRange"
+ item = "Large Energy Transfer Array I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 2.5
+ fLvl = 4
+ fIngame = 7.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_powerTransferRange_moduleEnergyTransferCapital(self):
+ self.buildTested = 0
+ attr = "powerTransferRange"
+ item = "Capital Energy Transfer Array I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 2.5
+ fLvl = 4
+ fIngame = 7.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_powerTransferRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "powerTransferRange"
+ item = "Medium Nosferatu I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Cruiser Skill Bonus:
+ # 150% bonus to Remote Armor Repair System range per level
+
+ def test_amarrCruiser_maxRange_moduleRemoteArmorRepairer(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Large Remote Armor Repair System I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 2.5
+ fLvl = 4
+ fIngame = 7.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_maxRange_moduleRemoteArmorRepairerCapital(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Capital Remote Armor Repair System I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 2.5
+ fLvl = 4
+ fIngame = 7.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_maxRange_moduleRemoteArmorRepairerCivilian(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Civilian Remote Armor Repair System"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 2.5
+ fLvl = 4
+ fIngame = 7.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCruiser_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Dual Light Beam Laser I"
+ skill = "Amarr Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Cruiser Skill Bonus:
+ # 20% bonus to Armor Maintenance Bot transfer amount per level
+ # Actually static 100% bonus, anyway cruiser skill must be at V level
+
+ def test_static_armorDamageAmount_droneLogistics(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Light Armor Maintenance Bot I"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_armorDamageAmount_other(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Medium Armor Repairer I"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Logistics Skill Bonus:
+ # 15% reduction in Energy Transfer Array capacitor use per level
+
+ def test_logistics_capacitorNeed_moduleEnergyTransfer(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Small Energy Transfer Array I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_logistics_capacitorNeed_moduleEnergyTransferCapital(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Capital Energy Transfer Array I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Logistics Skill Bonus:
+ # 15% reduction in Remote Armor Repair System capacitor use per level
+
+ def test_logistics_capacitorNeed_moduleRemoteArmorRepairer(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Medium Remote Armor Repair System I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_logistics_capacitorNeed_moduleRemoteArmorRepairerCapital(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Capital Remote Armor Repair System I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_logistics_capacitorNeed_moduleRemoteArmorRepairerCivilian(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Remote Armor Repair System"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_logistics_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Small Energy Neutralizer I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # -65% power need for Remote Armor Repair Systems
+
+ def test_static_power_moduleRemoteArmorRepairer(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Large Remote Armor Repair System I"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 0.35
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_power_moduleRemoteArmorRepairerCapital(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Capital Remote Armor Repair System I"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 0.35
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_power_moduleRemoteArmorRepairerCivilian(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Civilian Remote Armor Repair System"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 0.35
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # -50% power need for Energy Transfer Arrays
+
+ def test_static_power_moduleEnergyTransfer(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Medium Energy Transfer Array I"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_power_moduleEnergyTransferCapital(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Capital Energy Transfer Array I"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_power_moduleOther(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Large Armor Repairer I"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/logistics/oneiros.py b/eos/tests/typeTests/ships/logistics/oneiros.py
new file mode 100755
index 000000000..ab522f818
--- /dev/null
+++ b/eos/tests/typeTests/ships/logistics/oneiros.py
@@ -0,0 +1,328 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Oneiros"
+
+ # Gallente Cruiser Skill Bonus:
+ # 150% bonus to Remote Armor Repair System range per level
+
+ def test_gallenteCruiser_maxRange_moduleRemoteArmorRepairer(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Large Remote Armor Repair System I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 2.5
+ fLvl = 4
+ fIngame = 7.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_maxRange_moduleRemoteArmorRepairerCapital(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Capital Remote Armor Repair System I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 2.5
+ fLvl = 4
+ fIngame = 7.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_maxRange_moduleRemoteArmorRepairerCivilian(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Civilian Remote Armor Repair System"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 2.5
+ fLvl = 4
+ fIngame = 7.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Cruiser Skill Bonus:
+ # 150% bonus to Tracking Link range per level
+
+ def test_gallenteCruiser_maxRange_moduleTrackingLink(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Tracking Link I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 2.5
+ fLvl = 4
+ fIngame = 7.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCruiser_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Remote Sensor Booster I"
+ skill = "Gallente Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Cruiser Skill Bonus:
+ # 20% bonus to Armor Maintenance Bot transfer amount per level
+ # Actually static 100% bonus, anyway cruiser skill must be at V level
+
+ def test_static_armorDamageAmount_droneLogistics(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Light Armor Maintenance Bot I"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_armorDamageAmount_other(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Small Armor Repairer I"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Logistics Skill Bonus:
+ # 15% reduction in Remote Armor Repair System capacitor use per level
+
+ def test_logistics_capacitorNeed_moduleRemoteArmorRepairer(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Medium Remote Armor Repair System I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_logistics_capacitorNeed_moduleRemoteArmorRepairerCapital(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Capital Remote Armor Repair System I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_logistics_capacitorNeed_moduleRemoteArmorRepairerCivilian(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Remote Armor Repair System"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_logistics_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Explosion Dampening Field I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Logistics Skill Bonus:
+ # 10% bonus to Tracking Link efficiency per level
+
+ def test_logistics_maxRangeBonus_moduleTrackingLink(self):
+ self.buildTested = 0
+ attr = "maxRangeBonus"
+ item = "Tracking Link I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_logistics_maxRangeBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRangeBonus"
+ item = "Medium Hybrid Locus Coordinator I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_logistics_falloffBonus_moduleTrackingLink(self):
+ self.buildTested = 0
+ attr = "falloffBonus"
+ item = "Tracking Link I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_logistics_falloffBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "falloffBonus"
+ item = "Tracking Disruptor I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_logistics_trackingSpeedBonus_moduleTrackingLink(self):
+ self.buildTested = 0
+ attr = "trackingSpeedBonus"
+ item = "Tracking Link I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_logistics_trackingSpeedBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeedBonus"
+ item = "Tracking Computer I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # -65% power need for Remote Armor Repair Systems
+
+ def test_static_power_moduleRemoteArmorRepairer(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Large Remote Armor Repair System I"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 0.35
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_power_moduleRemoteArmorRepairerCapital(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Capital Remote Armor Repair System I"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 0.35
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_power_moduleRemoteArmorRepairerCivilian(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Civilian Remote Armor Repair System"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 0.35
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_power_moduleOther(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Small Energy Neutralizer I"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/logistics/scimitar.py b/eos/tests/typeTests/ships/logistics/scimitar.py
new file mode 100755
index 000000000..e5f0b6c50
--- /dev/null
+++ b/eos/tests/typeTests/ships/logistics/scimitar.py
@@ -0,0 +1,328 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Scimitar"
+
+ # Minmatar Cruiser Skill Bonus:
+ # 150% bonus to Tracking Link range per level
+
+ def test_minmatarCruiser_maxRange_moduleTrackingLink(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Tracking Link I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 2.5
+ fLvl = 4
+ fIngame = 7.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Remote Sensor Dampener I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Cruiser Skill Bonus:
+ # 150% bonus to Shield Transport range per level
+
+ def test_minmatarCruiser_shieldTransferRange_moduleShieldTransporter(self):
+ self.buildTested = 0
+ attr = "shieldTransferRange"
+ item = "Medium Shield Transporter I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 2.5
+ fLvl = 4
+ fIngame = 7.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_shieldTransferRange_moduleShieldTransporterCapital(self):
+ self.buildTested = 0
+ attr = "shieldTransferRange"
+ item = "Capital Shield Transporter I"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 2.5
+ fLvl = 4
+ fIngame = 7.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCruiser_shieldTransferRange_moduleShieldTransporterCivilian(self):
+ self.buildTested = 0
+ attr = "shieldTransferRange"
+ item = "Civilian Remote Shield Transporter"
+ skill = "Minmatar Cruiser"
+ iLvl = 1
+ iIngame = 2.5
+ fLvl = 4
+ fIngame = 7.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Cruiser Skill Bonus:
+ # 20% bonus to Shield Maintenance Bot transport amount per level
+ # Actually static 100% bonus, anyway cruiser skill must be at V level
+
+ def test_static_shieldBonus_droneLogistics(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Medium Shield Maintenance Bot I"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_shieldBonus_other(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Large Shield Booster I"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Logistics Skill Bonus:
+ # 10% bonus to Tracking Link efficiency per level
+
+ def test_logistics_maxRangeBonus_moduleTrackingLink(self):
+ self.buildTested = 0
+ attr = "maxRangeBonus"
+ item = "Tracking Link I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_logistics_maxRangeBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRangeBonus"
+ item = "Tracking Enhancer I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_logistics_falloffBonus_moduleTrackingLink(self):
+ self.buildTested = 0
+ attr = "falloffBonus"
+ item = "Tracking Link I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_logistics_falloffBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "falloffBonus"
+ item = "Tracking Computer I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_logistics_trackingSpeedBonus_moduleTrackingLink(self):
+ self.buildTested = 0
+ attr = "trackingSpeedBonus"
+ item = "Tracking Link I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_logistics_trackingSpeedBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeedBonus"
+ item = "Tracking Disruptor I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Logistics Skill Bonus:
+ # 15% reduction in Shield Transport capacitor use per level
+
+ def test_logistics_capacitorNeed_moduleShieldTransporter(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Small Shield Transporter I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_logistics_capacitorNeed_moduleShieldTransporterCapital(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Capital Shield Transporter I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_logistics_capacitorNeed_moduleShieldTransporterCivilian(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Remote Shield Transporter"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_logistics_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Induced Ion Field ECM I"
+ skill = "Logistics"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # -50% CPU need for Shield Transporters
+
+ def test_static_cpu_moduleShieldTransporter(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Large Shield Transporter I"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleShieldTransporterCapital(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Capital Shield Transporter I"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleShieldTransporterCivilian(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Civilian Remote Shield Transporter"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 0.5
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Damage Control I"
+ ship_other = "Omen"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/marauders/__init__.py b/eos/tests/typeTests/ships/marauders/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/marauders/golem.py b/eos/tests/typeTests/ships/marauders/golem.py
new file mode 100755
index 000000000..63dcfed96
--- /dev/null
+++ b/eos/tests/typeTests/ships/marauders/golem.py
@@ -0,0 +1,669 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Golem"
+
+ # Caldari Battleship Skill Bonus:
+ # 10% bonus to torpedo velocity per level
+
+ def test_caldariBattleship_maxVelocity_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Juggernaut Torpedo"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_maxVelocity_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Juggernaut Javelin Torpedo"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Battleship Skill Bonus:
+ # 10% bonus to cruise missile velocity per level
+
+ def test_caldariBattleship_maxVelocity_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Cataclysm Cruise Missile"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_maxVelocity_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Devastator Fury Cruise Missile"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_maxVelocity_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Obliterator F.O.F. Cruise Missile I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_maxVelocity_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Torrent Assault Missile"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Battleship Skill Bonus:
+ # 5% bonus to torpedo explosion velocity per level
+
+ def test_caldariBattleship_aoeVelocity_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Inferno Torpedo"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_aoeVelocity_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Bane Rage Torpedo"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Battleship Skill Bonus:
+ # 5% bonus to cruise missile explosion velocity per level
+
+ def test_caldariBattleship_aoeVelocity_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Wrath Cruise Missile"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_aoeVelocity_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Paradise Fury Cruise Missile"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_aoeVelocity_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Dragon F.O.F. Cruise Missile I"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariBattleship_aoeVelocity_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Thunderbolt Heavy Missile"
+ skill = "Caldari Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Marauders Skill Bonus:
+ # 7.5% bonus to shield boost amount per level
+
+ def test_marauders_shieldBonus_moduleShieldBooster(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Small Shield Booster I"
+ skill = "Marauders"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_marauders_shieldBonus_moduleShieldBoosterCapital(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Capital Shield Booster I"
+ skill = "Marauders"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_marauders_shieldBonus_moduleShieldBoosterCivilian(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Civilian Shield Booster I"
+ skill = "Marauders"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_marauders_shieldBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Large Shield Transporter I"
+ skill = "Marauders"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Marauders Skill Bonus:
+ # 7.5% bonus to effectiveness of target painters per level
+
+ def test_marauders_signatureRadiusBonus_moduleTargetPainter(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "Target Painter I"
+ skill = "Marauders"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_marauders_signatureRadiusBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "100MN MicroWarpdrive I"
+ skill = "Marauders"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_marauders_signatureRadiusBonus_other(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "Warrior TP-300"
+ skill = "Marauders"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 100% bonus to cruise missile and torpedo damage
+
+ def test_static_emDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Mjolnir Torpedo"
+ ship_other = "Scorpion"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_emDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Mjolnir Javelin Torpedo"
+ ship_other = "Scorpion"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_emDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Paradise Cruise Missile"
+ ship_other = "Scorpion"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_emDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Paradise Fury Cruise Missile"
+ ship_other = "Scorpion"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_emDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Hunter F.O.F. Cruise Missile I"
+ ship_other = "Scorpion"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_emDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Torrent Assault Missile"
+ ship_other = "Scorpion"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_explosiveDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Bane Torpedo"
+ ship_other = "Scorpion"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_explosiveDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Bane Rage Torpedo"
+ ship_other = "Scorpion"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_explosiveDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Devastator Cruise Missile"
+ ship_other = "Scorpion"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_explosiveDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Devastator Fury Cruise Missile"
+ ship_other = "Scorpion"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_explosiveDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Obliterator F.O.F. Cruise Missile I"
+ ship_other = "Scorpion"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_explosiveDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Havoc Heavy Missile"
+ ship_other = "Scorpion"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_kineticDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Torpedo"
+ ship_other = "Scorpion"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_kineticDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Rage Torpedo"
+ ship_other = "Scorpion"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_kineticDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Cruise Missile"
+ ship_other = "Scorpion"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_kineticDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Precision Cruise Missile"
+ ship_other = "Scorpion"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_kineticDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Dragon F.O.F. Cruise Missile I"
+ ship_other = "Scorpion"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_kineticDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Hydra F.O.F. Heavy Missile I"
+ ship_other = "Scorpion"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_thermalDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Inferno Torpedo"
+ ship_other = "Scorpion"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_thermalDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Inferno Javelin Torpedo"
+ ship_other = "Scorpion"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_thermalDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Cataclysm Cruise Missile"
+ ship_other = "Scorpion"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_thermalDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Cataclysm Fury Cruise Missile"
+ ship_other = "Scorpion"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_thermalDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Phoenix F.O.F. Cruise Missile I"
+ ship_other = "Scorpion"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_thermalDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Foxfire Rocket"
+ ship_other = "Scorpion"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 100% bonus to range of tractor beams
+
+ def test_static_maxRange_moduleTractorBeam(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Small Tractor Beam I"
+ ship_other = "Megathron"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "ECCM Projector I"
+ ship_other = "Megathron"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 100% bonus to velocity of tractor beams
+
+ def test_static_maxTractorVelocity_moduleTractorBeam(self):
+ self.buildTested = 0
+ attr = "maxTractorVelocity"
+ item = "Small Tractor Beam I"
+ ship_other = "Megathron"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/marauders/kronos.py b/eos/tests/typeTests/ships/marauders/kronos.py
new file mode 100755
index 000000000..7a5b2ae22
--- /dev/null
+++ b/eos/tests/typeTests/ships/marauders/kronos.py
@@ -0,0 +1,272 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Kronos"
+
+ # Gallente Battleship Skill Bonus:
+ # 5% bonus to large hybrid weapon damage per level
+
+ def test_gallenteBattleship_damageMultiplier_moduleHybridWeaponLarge(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Electron Blaster Cannon I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Light Ion Blaster I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Battleship Skill Bonus:
+ # 10% bonus to the velocity factor of stasis webifiers per level
+
+ def test_gallenteBattleship_speedFactor_moduleStasisWeb(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "Stasis Webifier I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_speedFactor_moduleStasisWebCivilian(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "Civilian Stasis Webifier"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_speedFactor_moduleOther(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "10MN MicroWarpdrive I"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteBattleship_speedFactor_other(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "Berserker SW-900"
+ skill = "Gallente Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Marauder Skill Bonus:
+ # 7.5% bonus to repair amount of armor repair systems per level
+
+ def test_marauders_armorDamageAmount_moduleArmorRepairer(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Medium Armor Repairer I"
+ skill = "Marauders"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_marauders_armorDamageAmount_moduleArmorRepairerCapital(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Capital Armor Repairer I"
+ skill = "Marauders"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_marauders_armorDamageAmount_moduleArmorRepairerCivilian(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Civilian Armor Repairer"
+ skill = "Marauders"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_marauders_armorDamageAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Medium Remote Armor Repair System I"
+ skill = "Marauders"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Marauder Skill Bonus:
+ # 7.5% bonus to large hybrid weapon tracking per level
+
+ def test_marauders_trackingSpeed_moduleHybridWeaponLarge(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "425mm Railgun I"
+ skill = "Marauders"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_marauders_trackingSpeed_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "125mm Railgun I"
+ skill = "Marauders"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 100% bonus to large hybrid weapon damage
+
+ def test_static_damageMultiplier_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "350mm Railgun I"
+ ship_other = "Apocalypse"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_damageMultiplier_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual 150mm Railgun I"
+ ship_other = "Apocalypse"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 100% bonus to range of tractor beams
+
+ def test_static_maxRange_moduleTractorBeam(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Small Tractor Beam I"
+ ship_other = "Apocalypse"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Salvager I"
+ ship_other = "Apocalypse"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 100% bonus to velocity of tractor beams
+
+ def test_static_maxTractorVelocity_moduleTractorBeam(self):
+ self.buildTested = 0
+ attr = "maxTractorVelocity"
+ item = "Small Tractor Beam I"
+ ship_other = "Apocalypse"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/marauders/paladin.py b/eos/tests/typeTests/ships/marauders/paladin.py
new file mode 100755
index 000000000..a9b422488
--- /dev/null
+++ b/eos/tests/typeTests/ships/marauders/paladin.py
@@ -0,0 +1,256 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Paladin"
+
+ # Amarr Battleship Skill Bonus:
+ # 5% bonus to capacitor capacity per level
+
+ def test_amarrBattleship_capacitorCapacity_ship(self):
+ self.buildTested = 0
+ attr = "capacitorCapacity"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Battleship Skill Bonus:
+ # 10% bonus to the velocity factor of stasis webifiers per level
+
+ def test_amarrBattleship_speedFactor_moduleStasisWeb(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "Stasis Webifier I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrBattleship_speedFactor_moduleStasisWebCivilian(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "Civilian Stasis Webifier"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrBattleship_speedFactor_moduleOther(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "100MN Afterburner I"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrBattleship_speedFactor_other(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "Berserker SW-900"
+ skill = "Amarr Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Marauder Skill Bonus:
+ # 7.5% bonus to repair amount of armor repair systems per level
+
+ def test_marauders_armorDamageAmount_moduleArmorRepairer(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Large Armor Repairer I"
+ skill = "Marauders"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_marauders_armorDamageAmount_moduleArmorRepairerCapital(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Capital Armor Repairer I"
+ skill = "Marauders"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_marauders_armorDamageAmount_moduleArmorRepairerCivilian(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Civilian Armor Repairer"
+ skill = "Marauders"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_marauders_armorDamageAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Large Remote Armor Repair System I"
+ skill = "Marauders"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Marauder Skill Bonus:
+ # 5% bonus to large energy turret damage per level
+
+ def test_marauders_damageMultiplier_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Mega Pulse Laser I"
+ skill = "Marauders"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_marauders_damageMultiplier_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual Light Beam Laser I"
+ skill = "Marauders"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 100% bonus to large energy weapon damage
+
+ def test_static_damageMultiplier_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Tachyon Beam Laser I"
+ ship_other = "Megathron"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_damageMultiplier_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Gatling Pulse Laser I"
+ ship_other = "Megathron"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 100% bonus to range of tractor beams
+
+ def test_static_maxRange_moduleTractorBeam(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Small Tractor Beam I"
+ ship_other = "Megathron"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "720mm Howitzer Artillery I"
+ ship_other = "Megathron"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 100% bonus to velocity of tractor beams
+
+ def test_static_maxTractorVelocity_moduleTractorBeam(self):
+ self.buildTested = 0
+ attr = "maxTractorVelocity"
+ item = "Small Tractor Beam I"
+ ship_other = "Megathron"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/marauders/vargur.py b/eos/tests/typeTests/ships/marauders/vargur.py
new file mode 100755
index 000000000..96c7cca9d
--- /dev/null
+++ b/eos/tests/typeTests/ships/marauders/vargur.py
@@ -0,0 +1,242 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Vargur"
+
+ # Minmatar Battleship Skill Bonus:
+ # 5% bonus to large projectile turret rate of fire per level
+
+ def test_minmatarBattleship_speed_moduleProjectileWeaponLarge(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Dual 425mm AutoCannon I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarBattleship_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "425mm AutoCannon I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Battleship Skill Bonus:
+ # 10% bonus to large projectile turret falloff per level
+
+ def test_minmatarBattleship_falloff_moduleProjectileWeaponLarge(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "800mm Repeating Artillery I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarBattleship_falloff_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "250mm Light Artillery Cannon I"
+ skill = "Minmatar Battleship"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Marauder Skill Bonus:
+ # 7.5% bonus to shield boost amount per level
+
+ def test_marauders_shieldBonus_moduleShieldBooster(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Medium Shield Booster I"
+ skill = "Marauders"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_marauders_shieldBonus_moduleShieldBoosterCapital(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Capital Shield Booster I"
+ skill = "Marauders"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_marauders_shieldBonus_moduleShieldBoosterCivilian(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Civilian Shield Booster I"
+ skill = "Marauders"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_marauders_shieldBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Small Shield Transporter I"
+ skill = "Marauders"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Marauder Skill Bonus:
+ # 7.5% bonus to large projectile turret tracking per level
+
+ def test_marauders_trackingSpeed_moduleHybridWeaponLarge(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "1200mm Artillery Cannon I"
+ skill = "Marauders"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_marauders_trackingSpeed_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "200mm AutoCannon I"
+ skill = "Marauders"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 100% bonus to large projectile weapon damage
+
+ def test_static_damageMultiplier_moduleEnergyWeaponLarge(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "1400mm Howitzer Artillery I"
+ ship_other = "Apocalypse"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_damageMultiplier_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "720mm Howitzer Artillery I"
+ ship_other = "Apocalypse"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 100% bonus to range of tractor beams
+
+ def test_static_maxRange_moduleTractorBeam(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Small Tractor Beam I"
+ ship_other = "Apocalypse"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Target Painter I"
+ ship_other = "Apocalypse"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 100% bonus to velocity of tractor beams
+
+ def test_static_maxTractorVelocity_moduleTractorBeam(self):
+ self.buildTested = 0
+ attr = "maxTractorVelocity"
+ item = "Small Tractor Beam I"
+ ship_other = "Apocalypse"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/miningBarges/__init__.py b/eos/tests/typeTests/ships/miningBarges/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/miningBarges/covetor.py b/eos/tests/typeTests/ships/miningBarges/covetor.py
new file mode 100755
index 000000000..f629cbc5b
--- /dev/null
+++ b/eos/tests/typeTests/ships/miningBarges/covetor.py
@@ -0,0 +1,99 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Covetor"
+
+ # Mining Barge Skill Bonus:
+ # 3% better yield for Strip Miners per level
+
+ def test_miningBarge_miningAmount_moduleFrequencyMiningLaser(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Modulated Strip Miner II"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_moduleStripMiner(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Strip Miner I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_moduleIceHarvester(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Ice Harvester I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_moduleOtherSkillrqDeepCoreMining(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Deep Core Mining Laser I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Gas Cloud Harvester I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_otherSkillrqMining(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Mining Drone I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/miningBarges/procurer.py b/eos/tests/typeTests/ships/miningBarges/procurer.py
new file mode 100755
index 000000000..e18795a26
--- /dev/null
+++ b/eos/tests/typeTests/ships/miningBarges/procurer.py
@@ -0,0 +1,99 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Procurer"
+
+ # Mining Barge Skill Bonus:
+ # 3% better yield for Strip Miners per level
+
+ def test_miningBarge_miningAmount_moduleFrequencyMiningLaser(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Modulated Strip Miner II"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_moduleStripMiner(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Strip Miner I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_moduleIceHarvester(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Ice Harvester I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_moduleOtherSkillrqDeepCoreMining(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Deep Core Mining Laser I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Gas Cloud Harvester I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_otherSkillrqMining(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Mining Drone I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/miningBarges/retriever.py b/eos/tests/typeTests/ships/miningBarges/retriever.py
new file mode 100755
index 000000000..8af363fa3
--- /dev/null
+++ b/eos/tests/typeTests/ships/miningBarges/retriever.py
@@ -0,0 +1,99 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Retriever"
+
+ # Mining Barge Skill Bonus:
+ # 3% better yield for Strip Miners per level
+
+ def test_miningBarge_miningAmount_moduleFrequencyMiningLaser(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Modulated Strip Miner II"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_moduleStripMiner(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Strip Miner I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_moduleIceHarvester(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Ice Harvester I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_moduleOtherSkillrqDeepCoreMining(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Deep Core Mining Laser I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Gas Cloud Harvester I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningBarge_miningAmount_otherSkillrqMining(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Mining Drone I"
+ skill = "Mining Barge"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/rookieShips/__init__.py b/eos/tests/typeTests/ships/rookieShips/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/rookieShips/ibis.py b/eos/tests/typeTests/ships/rookieShips/ibis.py
new file mode 100755
index 000000000..e677d9827
--- /dev/null
+++ b/eos/tests/typeTests/ships/rookieShips/ibis.py
@@ -0,0 +1,40 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Ibis"
+
+ # Special Ability:
+ # 10% bonus hybrid turret optimal range per skill level
+ # Description is wrong, it uses Caldari Frigate as boost skill
+
+ def test_caldariFrigate_maxRange_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "75mm Gatling Rail I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_maxRange_moduleHybridWeaponOtherl(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Dual 150mm Railgun I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/rookieShips/impairor.py b/eos/tests/typeTests/ships/rookieShips/impairor.py
new file mode 100755
index 000000000..5780b3fa1
--- /dev/null
+++ b/eos/tests/typeTests/ships/rookieShips/impairor.py
@@ -0,0 +1,40 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Impairor"
+
+ # Special Ability:
+ # 10% bonus to energy turret capacitor use per skill level
+ # Description is wrong, it uses Amarr Frigate as boost skill
+
+ def test_amarrFrigate_capacitorNeed_moduleEnergyWeaponSmall(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Medium Beam Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Focused Medium Beam Laser I"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/rookieShips/reaper.py b/eos/tests/typeTests/ships/rookieShips/reaper.py
new file mode 100755
index 000000000..ba0ce7386
--- /dev/null
+++ b/eos/tests/typeTests/ships/rookieShips/reaper.py
@@ -0,0 +1,24 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Reaper"
+
+ # Special Ability:
+ # 5% bonus to velocity per skill level
+ # Description is wrong, it uses Minmatar Frigate as boost skill
+
+ def test_minmatarFrigate_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/rookieShips/velator.py b/eos/tests/typeTests/ships/rookieShips/velator.py
new file mode 100755
index 000000000..ed3527306
--- /dev/null
+++ b/eos/tests/typeTests/ships/rookieShips/velator.py
@@ -0,0 +1,40 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Velator"
+
+ # Special Ability:
+ # 5% bonus to hybrid turret damage per skill level
+ # Description is wrong, it uses Gallente Frigate as boost skill
+
+ def test_gallenteFrigate_damageMultiplier_moduleHybridWeaponSmall(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Light Ion Blaster I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "200mm Railgun I"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/stealthBombers/__init__.py b/eos/tests/typeTests/ships/stealthBombers/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/stealthBombers/hound.py b/eos/tests/typeTests/ships/stealthBombers/hound.py
new file mode 100755
index 000000000..9c076bcd2
--- /dev/null
+++ b/eos/tests/typeTests/ships/stealthBombers/hound.py
@@ -0,0 +1,339 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Hound"
+
+ # Minmatar Frigate Skill Bonus:
+ # 10% bonus to torpedo explosion velocity per level
+
+ def test_minmatarFrigate_aoeVelocity_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Inferno Torpedo"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_aoeVelocity_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Juggernaut Rage Torpedo"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_aoeVelocity_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Thorn Rocket"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Frigate Skill Bonus:
+ # 10% bonus to torpedo flight time per level
+
+ def test_minmatarFrigate_explosionDelay_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Bane Torpedo"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_explosionDelay_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Mjolnir Javelin Torpedo"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_explosionDelay_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Phalanx Rocket"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Frigate Skill Bonus:
+ # 20% bonus to torpedo velocity per level
+
+ def test_minmatarFrigate_maxVelocity_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Inferno Torpedo"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_maxVelocity_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Bane Rage Torpedo"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarFrigate_maxVelocity_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Stalker F.O.F. Heavy Missile I"
+ skill = "Minmatar Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Covert Ops Skill Bonus:
+ # 5% bonus to bomb explosive damage per level
+
+ def test_covertOps_explosiveDamage_chargeBomb(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Shrapnel Bomb"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_covertOps_explosiveDamage_chargeBombEcm(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Lockbreaker Bomb"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_covertOps_explosiveDamage_chargeBombEnergy(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Void Bomb"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Covert Ops Skill Bonus:
+ # 15% bonus to Torpedo explosive damage per level
+
+ def test_covertOps_explosiveDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Bane Torpedo"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_covertOps_explosiveDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Bane Rage Torpedo"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_covertOps_explosiveDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Fulmination Assault Missile"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # -99.65% reduction in Siege Missile Launcher powergrid needs
+
+ def test_static_power_moduleLauncherMissileSiege(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Siege Missile Launcher I"
+ ship_other = "Raven"
+ iIngame = 1.0
+ fIngame = 0.0035
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_power_moduleLauncherMissileOther(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "200mm AutoCannon I"
+ ship_other = "Raven"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # -99.5% reduction in Cloak CPU Use
+
+ def test_static_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 0.005
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Invulnerability Field I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # -100% targeting delay after decloaking
+
+ def test_static_cloakingTargetingDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cloakingTargetingDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 0.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # 15 seconds cloak reactivation delay
+
+ def test_static_moduleReactivationDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 15000.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ iItem = "Prototype Cloaking Device I"
+ iIngame = 15000.0
+ fItem = "Covert Cynosural Field Generator I"
+ fIngame = 30000.0
+ iEos = self.getItemAttr(attr, iItem, ship=self.ship)
+ fEos = self.getItemAttr(attr, fItem, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/stealthBombers/manticore.py b/eos/tests/typeTests/ships/stealthBombers/manticore.py
new file mode 100755
index 000000000..74e14dcfa
--- /dev/null
+++ b/eos/tests/typeTests/ships/stealthBombers/manticore.py
@@ -0,0 +1,339 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Manticore"
+
+ # Caldari Frigate Skill Bonus:
+ # 10% bonus to torpedo explosion velocity per level
+
+ def test_caldariFrigate_aoeVelocity_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Inferno Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_aoeVelocity_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Juggernaut Rage Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_aoeVelocity_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Sabretooth Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Frigate Skill Bonus:
+ # 10% bonus to torpedo flight time per level
+
+ def test_caldariFrigate_explosionDelay_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Juggernaut Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosionDelay_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Juggernaut Javelin Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_explosionDelay_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Exterminator F.O.F. Light Missile I"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Frigate Skill Bonus:
+ # 20% bonus to torpedo missile velocity per level
+
+ def test_caldariFrigate_maxVelocity_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Mjolnir Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_maxVelocity_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Bane Rage Torpedo"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariFrigate_maxVelocity_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Piranha Light Missile"
+ skill = "Caldari Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Covert Ops Skill Bonus:
+ # 5% bonus to bomb kinetic damage per level
+
+ def test_covertOps_kineticDamage_chargeBomb(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Concussion Bomb"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_covertOps_kineticDamage_chargeBombEcm(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Lockbreaker Bomb"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_covertOps_kineticDamage_chargeBombEnergy(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Void Bomb"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Covert Ops Skill Bonus:
+ # 15% bonus to torpedo kinetic damage per level
+
+ def test_covertOps_kineticDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Torpedo"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_covertOps_kineticDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Javelin Torpedo"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_covertOps_kineticDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Assault Missile"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # -99.65% reduction in Siege Missile Launcher powergrid needs
+
+ def test_static_power_moduleLauncherMissileSiege(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Siege Missile Launcher I"
+ ship_other = "Raven"
+ iIngame = 1.0
+ fIngame = 0.0035
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_power_moduleLauncherMissileOther(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "1MN MicroWarpdrive I"
+ ship_other = "Raven"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # -99.5% reduction in Cloak CPU Use
+
+ def test_static_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 0.005
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Cap Recharger I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # -100% targeting delay after decloaking
+
+ def test_static_cloakingTargetingDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cloakingTargetingDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 0.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # 15 seconds cloak reactivation delay
+
+ def test_static_moduleReactivationDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 15000.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ iItem = "Prototype Cloaking Device I"
+ iIngame = 15000.0
+ fItem = "Covert Cynosural Field Generator I"
+ fIngame = 30000.0
+ iEos = self.getItemAttr(attr, iItem, ship=self.ship)
+ fEos = self.getItemAttr(attr, fItem, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/stealthBombers/nemesis.py b/eos/tests/typeTests/ships/stealthBombers/nemesis.py
new file mode 100755
index 000000000..ae65a83f2
--- /dev/null
+++ b/eos/tests/typeTests/ships/stealthBombers/nemesis.py
@@ -0,0 +1,339 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Nemesis"
+
+ # Gallente Frigate Skill Bonus:
+ # 10% bonus to torpedo explosion velocity per level
+
+ def test_gallenteFrigate_aoeVelocity_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Inferno Torpedo"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_aoeVelocity_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Mjolnir Javelin Torpedo"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_aoeVelocity_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Bloodclaw Light Missile"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Frigate Skill Bonus:
+ # 10% bonus to torpedo flight time per level
+
+ def test_gallenteFrigate_explosionDelay_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Bane Torpedo"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_explosionDelay_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Inferno Javelin Torpedo"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_explosionDelay_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Piranha Light Missile"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Frigate Skill Bonus:
+ # 20% bonus to torpedo velocity per level
+
+ def test_gallenteFrigate_maxVelocity_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Mjolnir Torpedo"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_maxVelocity_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Juggernaut Rage Torpedo"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteFrigate_maxVelocity_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Thorn Rocket"
+ skill = "Gallente Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Covert Ops Skill Bonus:
+ # 5% bonus to bomb thermal damage per level
+
+ def test_covertOps_thermalDamage_chargeBomb(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Scorch Bomb"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_covertOps_thermalDamage_chargeBombEcm(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Lockbreaker Bomb"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_covertOps_thermalDamage_chargeBombEnergy(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Void Bomb"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Covert Ops Skill Bonus:
+ # 15% bonus to torpedo thermal damage per level
+
+ def test_covertOps_thermalDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Inferno Torpedo"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_covertOps_thermalDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Inferno Javelin Torpedo"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_covertOps_thermalDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Flameburst Light Missile"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # -99.65% reduction in Siege Missile Launcher powergrid needs
+
+ def test_static_power_moduleLauncherMissileSiege(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Siege Missile Launcher I"
+ ship_other = "Raven"
+ iIngame = 1.0
+ fIngame = 0.0035
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_power_moduleLauncherMissileOther(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Small Shield Booster I"
+ ship_other = "Raven"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # -99.5% reduction in Cloak CPU Use
+
+ def test_static_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 0.005
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Passive Targeter I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # -100% targeting delay after decloaking
+
+ def test_static_cloakingTargetingDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cloakingTargetingDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 0.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # 15 seconds cloak reactivation delay
+
+ def test_static_moduleReactivationDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 15000.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ iItem = "Prototype Cloaking Device I"
+ iIngame = 15000.0
+ fItem = "Covert Cynosural Field Generator I"
+ fIngame = 30000.0
+ iEos = self.getItemAttr(attr, iItem, ship=self.ship)
+ fEos = self.getItemAttr(attr, fItem, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/stealthBombers/purifier.py b/eos/tests/typeTests/ships/stealthBombers/purifier.py
new file mode 100755
index 000000000..d65888d34
--- /dev/null
+++ b/eos/tests/typeTests/ships/stealthBombers/purifier.py
@@ -0,0 +1,339 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Purifier"
+
+ # Amarr Frigate Skill Bonus:
+ # 10% bonus to torpedo explosion velocity per level
+
+ def test_amarrFrigate_aoeVelocity_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Juggernaut Torpedo"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_aoeVelocity_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Bane Rage Torpedo"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_aoeVelocity_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Gremlin Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Frigate Skill Bonus:
+ # 10% bonus to torpedo flight time per level
+
+ def test_amarrFrigate_explosionDelay_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Bane Torpedo"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosionDelay_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Mjolnir Javelin Torpedo"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_explosionDelay_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Foxfire Rocket"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Frigate Skill Bonus:
+ # 20% bonus to torpedo velocity per level
+
+ def test_amarrFrigate_maxVelocity_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Mjolnir Torpedo"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_maxVelocity_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Inferno Javelin Torpedo"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrFrigate_maxVelocity_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Havoc Heavy Missile"
+ skill = "Amarr Frigate"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Covert Ops Skill Bonus:
+ # 5% bonus to bomb EM damage per level
+
+ def test_covertOps_emDamage_chargeBomb(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Electron Bomb"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_covertOps_emDamage_chargeBombEcm(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Lockbreaker Bomb"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_covertOps_emDamage_chargeBombEnergy(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Void Bomb"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Covert Ops Skill Bonus:
+ # 15% bonus to Torpedo EM damage per level
+
+ def test_covertOps_emDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Mjolnir Torpedo"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_covertOps_emDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Mjolnir Rage Torpedo"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_covertOps_emDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Seeker F.O.F. Light Missile I"
+ skill = "Covert Ops"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # -99.65% reduction in Siege Missile Launcher powergrid needs
+
+ def test_static_power_moduleLauncherMissileSiege(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Siege Missile Launcher I"
+ ship_other = "Raven"
+ iIngame = 1.0
+ fIngame = 0.0035
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_power_moduleLauncherMissileOther(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Rocket Launcher I"
+ ship_other = "Raven"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # -99.5% reduction in Cloak CPU Use
+
+ def test_static_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 0.005
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Damage Control I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # -100% targeting delay after decloaking
+
+ def test_static_cloakingTargetingDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cloakingTargetingDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 0.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # 15 seconds cloak reactivation delay
+
+ def test_static_moduleReactivationDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 15000.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ iItem = "Prototype Cloaking Device I"
+ iIngame = 15000.0
+ fItem = "Covert Cynosural Field Generator I"
+ fIngame = 30000.0
+ iEos = self.getItemAttr(attr, iItem, ship=self.ship)
+ fEos = self.getItemAttr(attr, fItem, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/__init__.py b/eos/tests/typeTests/ships/strategicCruisers/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/strategicCruisers/legion/__init__.py b/eos/tests/typeTests/ships/strategicCruisers/legion/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/strategicCruisers/legion/defensive/__init__.py b/eos/tests/typeTests/ships/strategicCruisers/legion/defensive/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/strategicCruisers/legion/defensive/adaptiveAugmenter.py b/eos/tests/typeTests/ships/strategicCruisers/legion/defensive/adaptiveAugmenter.py
new file mode 100755
index 000000000..38bbdb1c7
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/legion/defensive/adaptiveAugmenter.py
@@ -0,0 +1,296 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Legion"
+ self.sub = "Legion Defensive - Adaptive Augmenter"
+ self.skill = "Amarr Defensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to all armor resistances per level
+
+ def test_amarrDefensiveSystems_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrDefensiveSystems_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrDefensiveSystems_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrDefensiveSystems_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to remote armor repair system effectiveness per level
+
+ def test_amarrDefensiveSystems_armorDamageAmount_moduleRemoteArmorRepairer(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Medium Remote Armor Repair System I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrDefensiveSystems_armorDamageAmount_moduleRemoteArmorRepairerCapital(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Capital Remote Armor Repair System I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrDefensiveSystems_armorDamageAmount_moduleRemoteArmorRepairerCivilian(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Civilian Remote Armor Repair System"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrDefensiveSystems_armorDamageAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Medium Armor Repairer I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6815000.0
+ fIngame = 8215000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 154 m signature radius
+
+ def test_static_signatureRadius_ship(self):
+ self.buildTested = 0
+ attr = "signatureRadius"
+ ingame = 154.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # 300 m3 cargohold capacity
+
+ def test_static_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ ingame = 300.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship armor resistances
+
+ def test_static_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ ingame = 0.5
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ ingame = 0.2
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ ingame = 0.375
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ ingame = 0.65
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship shield resistances
+
+ def test_static_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ ingame = 1.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ ingame = 0.125
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ ingame = 0.3
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ ingame = 0.8
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # +3300 armor hp
+
+ def test_static_armorHP_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ iIngame = 100.0
+ fIngame = 3400.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +2200 shield capacity
+
+ def test_static_shieldCapacity_ship(self):
+ self.buildTested = 0
+ attr = "shieldCapacity"
+ iIngame = 100.0
+ fIngame = 2300.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1620 seconds shield recharge rate
+
+ def test_static_shieldRechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "shieldRechargeRate"
+ iIngame = 7500.0
+ fIngame = 1627500.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/legion/defensive/augmentedPlating.py b/eos/tests/typeTests/ships/strategicCruisers/legion/defensive/augmentedPlating.py
new file mode 100755
index 000000000..c98b05dbd
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/legion/defensive/augmentedPlating.py
@@ -0,0 +1,198 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Legion"
+ self.sub = "Legion Defensive - Augmented Plating"
+ self.skill = "Amarr Defensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to armor hitpoints per level
+
+ def test_amarrDefensiveSystems_armorHP_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 2.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6815000.0
+ fIngame = 8215000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 147 m signature radius
+
+ def test_static_signatureRadius_ship(self):
+ self.buildTested = 0
+ attr = "signatureRadius"
+ ingame = 147.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # 340 m3 cargohold capacity
+
+ def test_static_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ ingame = 340.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship armor resistances
+
+ def test_static_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ ingame = 0.5
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ ingame = 0.2
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ ingame = 0.375
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ ingame = 0.65
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship shield resistances
+
+ def test_static_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ ingame = 1.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ ingame = 0.125
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ ingame = 0.3
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ ingame = 0.8
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # +3750 armor hp
+
+ def test_static_armorHP_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ iIngame = 100.0
+ fIngame = 3850.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +2500 shield capacity
+
+ def test_static_shieldCapacity_ship(self):
+ self.buildTested = 0
+ attr = "shieldCapacity"
+ iIngame = 100.0
+ fIngame = 2600.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1620 seconds shield recharge rate
+
+ def test_static_shieldRechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "shieldRechargeRate"
+ iIngame = 7500.0
+ fIngame = 1627500.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/legion/defensive/nanobotInjector.py b/eos/tests/typeTests/ships/strategicCruisers/legion/defensive/nanobotInjector.py
new file mode 100755
index 000000000..7fca93edc
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/legion/defensive/nanobotInjector.py
@@ -0,0 +1,241 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Legion"
+ self.sub = "Legion Defensive - Nanobot Injector"
+ self.skill = "Amarr Defensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to armor repairer effectiveness per level
+
+ def test_amarrDefensiveSystems_armorDamageAmount_moduleArmorRepairer(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Small Armor Repairer I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrDefensiveSystems_armorDamageAmount_moduleArmorRepairerCapital(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Capital Armor Repairer I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrDefensiveSystems_armorDamageAmount_moduleArmorRepairerCivilian(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Civilian Armor Repairer"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrDefensiveSystems_armorDamageAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Small Remote Armor Repair System I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 2.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6815000.0
+ fIngame = 8215000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 140 m signature radius
+
+ def test_static_signatureRadius_ship(self):
+ self.buildTested = 0
+ attr = "signatureRadius"
+ ingame = 140.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # 300 m3 cargohold capacity
+
+ def test_static_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ ingame = 300.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship armor resistances
+
+ def test_static_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ ingame = 0.5
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ ingame = 0.2
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ ingame = 0.375
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ ingame = 0.65
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship shield resistances
+
+ def test_static_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ ingame = 1.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ ingame = 0.125
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ ingame = 0.3
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ ingame = 0.8
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # +3600 armor hp
+
+ def test_static_armorHP_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ iIngame = 100.0
+ fIngame = 3700.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +2400 shield capacity
+
+ def test_static_shieldCapacity_ship(self):
+ self.buildTested = 0
+ attr = "shieldCapacity"
+ iIngame = 100.0
+ fIngame = 2500.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1620 seconds shield recharge rate
+
+ def test_static_shieldRechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "shieldRechargeRate"
+ iIngame = 7500.0
+ fIngame = 1627500.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/legion/defensive/warfareProcessor.py b/eos/tests/typeTests/ships/strategicCruisers/legion/defensive/warfareProcessor.py
new file mode 100755
index 000000000..184f08452
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/legion/defensive/warfareProcessor.py
@@ -0,0 +1,240 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Legion"
+ self.sub = "Legion Defensive - Warfare Processor"
+ self.skill = "Amarr Defensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to effectiveness of Armored Warfare Links per subsystem skill level
+
+ def test_amarrDefensiveSystems_commandBonus_moduleGangCoordinatorSkillrqArmoredWarfare(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Armored Warfare Link - Damage Control I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrDefensiveSystems_commandBonus_moduleGangCoordinatorSkillrqOther(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Siege Warfare Link - Shield Efficiency I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 99% reduction in Warfare Link module CPU need
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Mining Foreman Link - Laser Optimization I"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6815000.0
+ fIngame = 8215000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 140 m signature radius
+
+ def test_static_signatureRadius_ship(self):
+ self.buildTested = 0
+ attr = "signatureRadius"
+ ingame = 140.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # 300 m3 cargohold capacity
+
+ def test_static_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ ingame = 300.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship armor resistances
+
+ def test_static_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ ingame = 0.5
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ ingame = 0.2
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ ingame = 0.375
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ ingame = 0.65
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship shield resistances
+
+ def test_static_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ ingame = 1.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ ingame = 0.125
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ ingame = 0.3
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ ingame = 0.8
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # +3300 armor hp
+
+ def test_static_armorHP_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ iIngame = 100.0
+ fIngame = 3400.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +2200 shield capacity
+
+ def test_static_shieldCapacity_ship(self):
+ self.buildTested = 0
+ attr = "shieldCapacity"
+ iIngame = 100.0
+ fIngame = 2300.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1620 seconds shield recharge rate
+
+ def test_static_shieldRechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "shieldRechargeRate"
+ iIngame = 7500.0
+ fIngame = 1627500.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/legion/electronics/__init__.py b/eos/tests/typeTests/ships/strategicCruisers/legion/electronics/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/strategicCruisers/legion/electronics/dissolutionSequencer.py b/eos/tests/typeTests/ships/strategicCruisers/legion/electronics/dissolutionSequencer.py
new file mode 100755
index 000000000..8af2a9b7a
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/legion/electronics/dissolutionSequencer.py
@@ -0,0 +1,179 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Legion"
+ self.sub = "Legion Electronics - Dissolution Sequencer"
+ self.skill = "Amarr Electronic Systems"
+
+ # Subsystem Skill Bonus:
+ # 15% bonus to ship sensor strength per level
+
+ def test_amarrElectronicSystems_scanRadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanRadarStrength"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to max targeting range per level
+
+ def test_amarrElectronicSystems_maxTargetRange_ship(self):
+ self.buildTested = 0
+ attr = "maxTargetRange"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 4.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6815000.0
+ fIngame = 8015000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +380 tf cpu
+
+ def test_static_cpuOutput_ship(self):
+ self.buildTested = 0
+ attr = "cpuOutput"
+ iIngame = 0.0
+ fIngame = 380.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +65 km lock range
+
+ def test_static_maxTargetRange_ship(self):
+ self.buildTested = 0
+ attr = "maxTargetRange"
+ iIngame = 0.0
+ fIngame = 65000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +260 mm scan resolution
+
+ def test_static_scanResolution_ship(self):
+ self.buildTested = 0
+ attr = "scanResolution"
+ iIngame = 0.0
+ fIngame = 260.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add 17 radar sensor strength
+
+ def test_static_scanGravimetricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanLadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanLadarStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanMagnetometricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanRadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanRadarStrength"
+ iIngame = 0.0
+ fIngame = 17.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/legion/electronics/emergentLocusAnalyzer.py b/eos/tests/typeTests/ships/strategicCruisers/legion/electronics/emergentLocusAnalyzer.py
new file mode 100755
index 000000000..99c74be69
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/legion/electronics/emergentLocusAnalyzer.py
@@ -0,0 +1,239 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Legion"
+ self.sub = "Legion Electronics - Emergent Locus Analyzer"
+ self.skill = "Amarr Electronic Systems"
+
+ # Subsystem Skill Bonus:
+ # 10% increase to scan strength of probes per level
+
+ def test_amarrElectronicSystems_baseSensorStrength_chargeScannerProbe(self):
+ self.buildTested = 0
+ attr = "baseSensorStrength"
+ item = "Core Scanner Probe I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 20% bonus to range of tractor beams per level
+
+ def test_amarrElectronicSystems_maxRange_moduleTractorBeam(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Small Tractor Beam I"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrElectronicSystems_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Salvager I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 20% bonus to velocity of tractor beams per level
+
+ def test_amarrElectronicSystems_maxTractorVelocity_moduleTractorBeam(self):
+ self.buildTested = 0
+ attr = "maxTractorVelocity"
+ item = "Small Tractor Beam I"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # -99% reduced CPU need for Scan Probe Launchers
+
+ def test_static_cpu_moduleScanProbeLauncher(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Expanded Probe Launcher I"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Power Diagnostic System I"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 3.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6815000.0
+ fIngame = 8015000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +380 tf cpu
+
+ def test_static_cpuOutput_ship(self):
+ self.buildTested = 0
+ attr = "cpuOutput"
+ iIngame = 0.0
+ fIngame = 380.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +55 km lock range
+
+ def test_static_maxTargetRange_ship(self):
+ self.buildTested = 0
+ attr = "maxTargetRange"
+ iIngame = 0.0
+ fIngame = 55000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +280 mm scan resolution
+
+ def test_static_scanResolution_ship(self):
+ self.buildTested = 0
+ attr = "scanResolution"
+ iIngame = 0.0
+ fIngame = 280.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add 13 radar sensor strength
+
+ def test_static_scanGravimetricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanLadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanLadarStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanMagnetometricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanRadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanRadarStrength"
+ iIngame = 0.0
+ fIngame = 17.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/legion/electronics/energyParasiticComplex.py b/eos/tests/typeTests/ships/strategicCruisers/legion/electronics/energyParasiticComplex.py
new file mode 100755
index 000000000..aed64da4c
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/legion/electronics/energyParasiticComplex.py
@@ -0,0 +1,195 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Legion"
+ self.sub = "Legion Electronics - Energy Parasitic Complex"
+ self.skill = "Amarr Electronic Systems"
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to energy vampire transfer amount per level
+
+ def test_amarrElectronicSystems_powerTransferAmount_moduleEnergyVampire(self):
+ self.buildTested = 0
+ attr = "powerTransferAmount"
+ item = "Small Nosferatu I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrElectronicSystems_powerTransferAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "powerTransferAmount"
+ item = "Large Energy Transfer Array I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to energy neutralizer transfer amount per level
+
+ def test_amarrElectronicSystems_energyDestabilizationAmount_moduleEnergyDestabilizer(self):
+ self.buildTested = 0
+ attr = "energyDestabilizationAmount"
+ item = "Medium Energy Neutralizer I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 3.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6815000.0
+ fIngame = 8015000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +375 tf cpu
+
+ def test_static_cpuOutput_ship(self):
+ self.buildTested = 0
+ attr = "cpuOutput"
+ iIngame = 0.0
+ fIngame = 375.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +55 km lock range
+
+ def test_static_maxTargetRange_ship(self):
+ self.buildTested = 0
+ attr = "maxTargetRange"
+ iIngame = 0.0
+ fIngame = 55000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +280 mm scan resolution
+
+ def test_static_scanResolution_ship(self):
+ self.buildTested = 0
+ attr = "scanResolution"
+ iIngame = 0.0
+ fIngame = 280.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add 13 radar sensor strength
+
+ def test_static_scanGravimetricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanLadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanLadarStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanMagnetometricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanRadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanRadarStrength"
+ iIngame = 0.0
+ fIngame = 13.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/legion/electronics/tacticalTargetingNetwork.py b/eos/tests/typeTests/ships/strategicCruisers/legion/electronics/tacticalTargetingNetwork.py
new file mode 100755
index 000000000..a1eb87525
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/legion/electronics/tacticalTargetingNetwork.py
@@ -0,0 +1,163 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Legion"
+ self.sub = "Legion Electronics - Tactical Targeting Network"
+ self.skill = "Amarr Electronic Systems"
+
+ # Subsystem Skill Bonus:
+ # 15% bonus to scan resolution per level
+
+ def test_amarrElectronicSystems_scanResolution_ship(self):
+ self.buildTested = 0
+ attr = "scanResolution"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 4.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6815000.0
+ fIngame = 8015000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +400 tf cpu
+
+ def test_static_cpuOutput_ship(self):
+ self.buildTested = 0
+ attr = "cpuOutput"
+ iIngame = 0.0
+ fIngame = 400.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +60 km lock range
+
+ def test_static_maxTargetRange_ship(self):
+ self.buildTested = 0
+ attr = "maxTargetRange"
+ iIngame = 0.0
+ fIngame = 60000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +255 mm scan resolution
+
+ def test_static_scanResolution_ship(self):
+ self.buildTested = 0
+ attr = "scanResolution"
+ iIngame = 0.0
+ fIngame = 255.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add 15 radar sensor strength
+
+ def test_static_scanGravimetricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanLadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanLadarStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanMagnetometricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanRadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanRadarStrength"
+ iIngame = 0.0
+ fIngame = 15.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/legion/engineering/__init__.py b/eos/tests/typeTests/ships/strategicCruisers/legion/engineering/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/strategicCruisers/legion/engineering/augmentedCapacitorReservoir.py b/eos/tests/typeTests/ships/strategicCruisers/legion/engineering/augmentedCapacitorReservoir.py
new file mode 100755
index 000000000..c9136ad74
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/legion/engineering/augmentedCapacitorReservoir.py
@@ -0,0 +1,141 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Legion"
+ self.sub = "Legion Engineering - Augmented Capacitor Reservoir"
+ self.skill = "Amarr Engineering Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to capacitor capacity per level
+
+ def test_amarrEngineeringSystems_capacitorCapacity_ship(self):
+ self.buildTested = 0
+ attr = "capacitorCapacity"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 2.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6815000.0
+ fIngame = 8015000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1125 MW powergrid
+
+ def test_static_powerOutput_ship(self):
+ self.buildTested = 0
+ attr = "powerOutput"
+ iIngame = 0.0
+ fIngame = 1125.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +2225 GJ capacitor capacity
+
+ def test_static_capacitorCapacity_ship(self):
+ self.buildTested = 0
+ attr = "capacitorCapacity"
+ iIngame = 100.0
+ fIngame = 2325.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +415 seconds capacitor recharge time
+
+ def test_static_rechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "rechargeRate"
+ iIngame = 10000.0
+ fIngame = 425000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/legion/engineering/capacitorRegenerationMatrix.py b/eos/tests/typeTests/ships/strategicCruisers/legion/engineering/capacitorRegenerationMatrix.py
new file mode 100755
index 000000000..a50ceb558
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/legion/engineering/capacitorRegenerationMatrix.py
@@ -0,0 +1,141 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Legion"
+ self.sub = "Legion Engineering - Capacitor Regeneration Matrix"
+ self.skill = "Amarr Engineering Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% reduction in capacitor recharge rate per level
+
+ def test_amarrEngineeringSystems_rechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "rechargeRate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 3.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6815000.0
+ fIngame = 8015000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1290 MW powergrid
+
+ def test_static_powerOutput_ship(self):
+ self.buildTested = 0
+ attr = "powerOutput"
+ iIngame = 0.0
+ fIngame = 1290.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +2225 GJ capacitor capacity
+
+ def test_static_capacitorCapacity_ship(self):
+ self.buildTested = 0
+ attr = "capacitorCapacity"
+ iIngame = 100.0
+ fIngame = 2325.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +415 seconds capacitor recharge time
+
+ def test_static_rechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "rechargeRate"
+ iIngame = 10000.0
+ fIngame = 425000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/legion/engineering/powerCoreMultiplier.py b/eos/tests/typeTests/ships/strategicCruisers/legion/engineering/powerCoreMultiplier.py
new file mode 100755
index 000000000..9343fd789
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/legion/engineering/powerCoreMultiplier.py
@@ -0,0 +1,141 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Legion"
+ self.sub = "Legion Engineering - Power Core Multiplier"
+ self.skill = "Amarr Engineering Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to power output per level
+
+ def test_amarrEngineeringSystems_powerOutput_ship(self):
+ self.buildTested = 0
+ attr = "powerOutput"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 2.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6815000.0
+ fIngame = 8015000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200 MW powergrid
+
+ def test_static_powerOutput_ship(self):
+ self.buildTested = 0
+ attr = "powerOutput"
+ iIngame = 0.0
+ fIngame = 1200.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1575 GJ capacitor capacity
+
+ def test_static_capacitorCapacity_ship(self):
+ self.buildTested = 0
+ attr = "capacitorCapacity"
+ iIngame = 100.0
+ fIngame = 1675.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +415 seconds capacitor recharge time
+
+ def test_static_rechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "rechargeRate"
+ iIngame = 10000.0
+ fIngame = 425000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/legion/engineering/supplementalCoolantInjector.py b/eos/tests/typeTests/ships/strategicCruisers/legion/engineering/supplementalCoolantInjector.py
new file mode 100755
index 000000000..ec554e62c
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/legion/engineering/supplementalCoolantInjector.py
@@ -0,0 +1,506 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Legion"
+ self.sub = "Legion Engineering - Supplemental Coolant Injector"
+ self.skill = "Amarr Engineering Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% Reduction in the amount of heat damage absorbed by modules per level
+
+ def test_amarrEngineeringSystems_heatDamage_moduleAfterburner(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "100MN Afterburner I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrEngineeringSystems_heatDamage_moduleArmorHardener(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Armor EM Hardener I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrEngineeringSystems_heatDamage_moduleRemoteArmorRepairer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Remote Armor Repair System I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrEngineeringSystems_heatDamage_moduleArmorRepairer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Large Armor Repairer I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrEngineeringSystems_heatDamage_moduleCapacitorBooster(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Micro Capacitor Booster I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrEngineeringSystems_heatDamage_moduleECCM(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "ECCM - Radar I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrEngineeringSystems_heatDamage_moduleECM(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "ECM - Spatial Destabilizer I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrEngineeringSystems_heatDamage_moduleEnergyDestabilizer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Medium Energy Neutralizer I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrEngineeringSystems_heatDamage_moduleEnergyTransferArray(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Medium Energy Transfer Array I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrEngineeringSystems_heatDamage_moduleEnergyVampire(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Nosferatu I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrEngineeringSystems_heatDamage_moduleEnergyWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Pulse Laser I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrEngineeringSystems_heatDamage_moduleHullRepairUnit(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Medium Hull Repairer I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrEngineeringSystems_heatDamage_moduleHybridWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "250mm Railgun I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrEngineeringSystems_heatDamage_moduleMissileLauncherAssault(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrEngineeringSystems_heatDamage_moduleMissileLauncherCitadel(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Citadel Torpedo Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrEngineeringSystems_heatDamage_moduleMissileLauncherCruise(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Cruise Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrEngineeringSystems_heatDamage_moduleMissileLauncherHeavy(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrEngineeringSystems_heatDamage_moduleMissileLauncherHeavyAssault(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrEngineeringSystems_heatDamage_moduleMissileLauncherRocket(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Rocket Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrEngineeringSystems_heatDamage_moduleMissileLauncherSiege(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Siege Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrEngineeringSystems_heatDamage_moduleMissileLauncherStandard(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Standard Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrEngineeringSystems_heatDamage_moduleProjectileWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "150mm Light AutoCannon I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrEngineeringSystems_heatDamage_moduleShieldBooster(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Large Shield Booster I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrEngineeringSystems_heatDamage_moduleShieldHardener(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Invulnerability Field I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrEngineeringSystems_heatDamage_moduleShieldTransporter(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Medium Shield Transporter I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrEngineeringSystems_heatDamage_moduleStasisWeb(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Stasis Webifier I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrEngineeringSystems_heatDamage_moduleWarpScrambler(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Warp Disruptor I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 3.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6815000.0
+ fIngame = 8015000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1290 MW powergrid
+
+ def test_static_powerOutput_ship(self):
+ self.buildTested = 0
+ attr = "powerOutput"
+ iIngame = 0.0
+ fIngame = 1290.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1575 GJ capacitor capacity
+
+ def test_static_capacitorCapacity_ship(self):
+ self.buildTested = 0
+ attr = "capacitorCapacity"
+ iIngame = 100.0
+ fIngame = 1675.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +415 seconds capacitor recharge time
+
+ def test_static_rechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "rechargeRate"
+ iIngame = 10000.0
+ fIngame = 425000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/legion/hull.py b/eos/tests/typeTests/ships/strategicCruisers/legion/hull.py
new file mode 100755
index 000000000..3a4606f19
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/legion/hull.py
@@ -0,0 +1,414 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Legion"
+
+ # Amarr Strategic Cruiser Skill Bonus:
+ # 5% Reduction in the amount of heat damage absorbed by modules per level
+
+ def test_amarrStrategicCruiser_heatDamage_moduleAfterburner(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "10MN MicroWarpdrive I"
+ skill = "Amarr Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrStrategicCruiser_heatDamage_moduleArmorHardener(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Armor EM Hardener I"
+ skill = "Amarr Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrStrategicCruiser_heatDamage_moduleArmorRepairProjector(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Medium Remote Armor Repair System I"
+ skill = "Amarr Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrStrategicCruiser_heatDamage_moduleArmorRepairer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Civilian Armor Repairer"
+ skill = "Amarr Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrStrategicCruiser_heatDamage_moduleCapacitorBooster(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Medium Capacitor Booster I"
+ skill = "Amarr Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrStrategicCruiser_heatDamage_moduleECCM(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "ECCM - Omni I"
+ skill = "Amarr Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrStrategicCruiser_heatDamage_moduleECM(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "ECM - White Noise Generator I"
+ skill = "Amarr Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrStrategicCruiser_heatDamage_moduleEnergyDestabilizer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Energy Neutralizer I"
+ skill = "Amarr Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrStrategicCruiser_heatDamage_moduleEnergyTransferArray(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Large Energy Transfer Array I"
+ skill = "Amarr Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrStrategicCruiser_heatDamage_moduleEnergyVampire(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Nosferatu I"
+ skill = "Amarr Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrStrategicCruiser_heatDamage_moduleEnergyWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Medium Beam Laser I"
+ skill = "Amarr Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrStrategicCruiser_heatDamage_moduleHullRepairer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Medium Hull Repairer I"
+ skill = "Amarr Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrStrategicCruiser_heatDamage_moduleHybridWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "125mm Railgun I"
+ skill = "Amarr Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrStrategicCruiser_heatDamage_moduleMissileLauncherAssault(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Assault Missile Launcher I"
+ skill = "Amarr Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrStrategicCruiser_heatDamage_moduleMissileLauncherCitadel(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Citadel Torpedo Launcher I"
+ skill = "Amarr Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrStrategicCruiser_heatDamage_moduleMissileLauncherCruise(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Cruise Missile Launcher I"
+ skill = "Amarr Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrStrategicCruiser_heatDamage_moduleMissileLauncherHeavy(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Missile Launcher I"
+ skill = "Amarr Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrStrategicCruiser_heatDamage_moduleMissileLauncherHeavyAssault(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Assault Missile Launcher I"
+ skill = "Amarr Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrStrategicCruiser_heatDamage_moduleMissileLauncherRocket(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Rocket Launcher I"
+ skill = "Amarr Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrStrategicCruiser_heatDamage_moduleMissileLauncherSiege(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Siege Missile Launcher I"
+ skill = "Amarr Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrStrategicCruiser_heatDamage_moduleMissileLauncherStandard(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Standard Missile Launcher I"
+ skill = "Amarr Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrStrategicCruiser_heatDamage_moduleProjectileWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Dual 650mm Repeating Artillery I"
+ skill = "Amarr Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrStrategicCruiser_heatDamage_moduleShieldBooster(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Civilian Shield Booster I"
+ skill = "Amarr Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrStrategicCruiser_heatDamage_moduleShieldHardener(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Photon Scattering Field I"
+ skill = "Amarr Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrStrategicCruiser_heatDamage_moduleShieldTransporter(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Shield Transporter I"
+ skill = "Amarr Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrStrategicCruiser_heatDamage_moduleStasisWeb(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Stasis Webifier I"
+ skill = "Amarr Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrStrategicCruiser_heatDamage_moduleWarpScrambler(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Warp Disruptor I"
+ skill = "Amarr Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/legion/offensive/__init__.py b/eos/tests/typeTests/ships/strategicCruisers/legion/offensive/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/strategicCruisers/legion/offensive/assaultOptimization.py b/eos/tests/typeTests/ships/strategicCruisers/legion/offensive/assaultOptimization.py
new file mode 100755
index 000000000..2fbb37e96
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/legion/offensive/assaultOptimization.py
@@ -0,0 +1,327 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Legion"
+ self.sub = "Legion Offensive - Assault Optimization"
+ self.skill = "Amarr Offensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to heavy assault missile damage per level
+
+ def test_amarrOffensiveSystems_emDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Torrent Assault Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrOffensiveSystems_emDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Torrent Rage Assault Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrOffensiveSystems_emDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Sabretooth Light Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrOffensiveSystems_explosiveDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Fulmination Assault Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrOffensiveSystems_explosiveDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Fulmination Javelin Assault Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrOffensiveSystems_explosiveDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Phalanx Rocket"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrOffensiveSystems_kineticDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Assault Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrOffensiveSystems_kineticDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Rage Assault Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrOffensiveSystems_kineticDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Cruise Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrOffensiveSystems_thermalDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Hellfire Assault Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrOffensiveSystems_thermalDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Hellfire Rage Assault Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrOffensiveSystems_thermalDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Widowmaker Heavy Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to missile launcher rate of fire per level
+
+ def test_amarrOffensiveSystems_speed_moduleLauncherMissileAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrOffensiveSystems_speed_moduleLauncherMissileHeavyAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrOffensiveSystems_speed_moduleLauncherMissileHeavy(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrOffensiveSystems_speed_moduleLauncherOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Rocket Launcher I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +800000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6815000.0
+ fIngame = 7615000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +40 tf cpu
+
+ def test_static_cpuOutput_ship(self):
+ self.buildTested = 0
+ attr = "cpuOutput"
+ iIngame = 0.0
+ fIngame = 40.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/legion/offensive/covertReconfiguration.py b/eos/tests/typeTests/ships/strategicCruisers/legion/offensive/covertReconfiguration.py
new file mode 100755
index 000000000..217b7cd51
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/legion/offensive/covertReconfiguration.py
@@ -0,0 +1,178 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Legion"
+ self.sub = "Legion Offensive - Covert Reconfiguration"
+ self.skill = "Amarr Offensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to medium energy turret capacitor use per level
+
+ def test_amarrOffensiveSystems_capacitorNeed_moduleEnergyWeaponMedium(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Focused Medium Pulse Laser I"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrOffensiveSystems_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Mega Beam Laser I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 100% reduction in Cloaking Device CPU use
+
+ def test_static_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ iIngame = 30.0
+ fIngame = 0.0
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Armor Thermic Hardener I"
+ iIngame = 33.0
+ fIngame = 33.0
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Can use covert jump portal
+
+ def test_static_jumpHarmonics_ship(self):
+ self.buildTested = 0
+ attr = "jumpHarmonics"
+ ingame = 5.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # 5 seconds cloak reactivation delay
+
+ def test_static_moduleReactivationDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ iIngame = 30000.0
+ fIngame = 5000.0
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Cynosural Field Generator I"
+ iIngame = 30000.0
+ fIngame = 30000.0
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 4.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +800000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6815000.0
+ fIngame = 7615000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/legion/offensive/droneSynthesisProjector.py b/eos/tests/typeTests/ships/strategicCruisers/legion/offensive/droneSynthesisProjector.py
new file mode 100755
index 000000000..5f5b86c57
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/legion/offensive/droneSynthesisProjector.py
@@ -0,0 +1,278 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Legion"
+ self.sub = "Legion Offensive - Drone Synthesis Projector"
+ self.skill = "Amarr Offensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to medium energy turret capacitor use per level
+
+ def test_amarrOffensiveSystems_capacitorNeed_moduleEnergyWeaponMedium(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Heavy Beam Laser I"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrOffensiveSystems_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Dual Light Beam Laser I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to drone damage per level
+
+ def test_amarrOffensiveSystems_damageMultiplier_droneCombat(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Hobgoblin I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrOffensiveSystems_damageMultiplier_other(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual Light Pulse Laser I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 7.5% bonus to drone hitpoints per level
+
+ def test_amarrOffensiveSystems_hp_droneCombat(self):
+ self.buildTested = 0
+ item = "Hammerhead I"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos += self.getItemAttr(layer, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrOffensiveSystems_hp_droneLogistic(self):
+ self.buildTested = 0
+ item = "Heavy Shield Maintenance Bot I"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos += self.getItemAttr(layer, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrOffensiveSystems_hp_droneEwar(self):
+ self.buildTested = 0
+ item = "Hammerhead SD-600"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos += self.getItemAttr(layer, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrOffensiveSystems_hp_droneCapDrain(self):
+ self.buildTested = 0
+ item = "Acolyte EV-300"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos += self.getItemAttr(layer, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrOffensiveSystems_hp_droneWeb(self):
+ self.buildTested = 0
+ item = "Berserker SW-900"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos += self.getItemAttr(layer, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrOffensiveSystems_hp_droneNoSkillrqDrones(self):
+ self.buildTested = 0
+ item = "Harvester Mining Drone"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos += self.getItemAttr(layer, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 3.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +200 m3 dronebay
+
+ def test_static_droneCapacity_ship(self):
+ self.buildTested = 0
+ attr = "droneCapacity"
+ iIngame = 0.0
+ fIngame = 200.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +50 MBit/s drone bandwidth
+
+ def test_static_droneBandwidth_ship(self):
+ self.buildTested = 0
+ attr = "droneBandwidth"
+ iIngame = 0.0
+ fIngame = 50.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +800000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6815000.0
+ fIngame = 7615000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/legion/offensive/liquidCrystalMagnifiers.py b/eos/tests/typeTests/ships/strategicCruisers/legion/offensive/liquidCrystalMagnifiers.py
new file mode 100755
index 000000000..99d08883e
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/legion/offensive/liquidCrystalMagnifiers.py
@@ -0,0 +1,176 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Legion"
+ self.sub = "Legion Offensive - Liquid Crystal Magnifiers"
+ self.skill = "Amarr Offensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to medium energy turret capacitor use per level
+
+ def test_amarrOffensiveSystems_capacitorNeed_moduleEnergyWeaponMedium(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Quad Light Beam Laser I"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrOffensiveSystems_capacitorNeed_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Medium Pulse Laser I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to medium energy turret damage per level
+
+ def test_amarrOffensiveSystems_damageMultiplier_moduleEnergyWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Pulse Laser I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrOffensiveSystems_damageMultiplier_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual Heavy Pulse Laser I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to medium energy turret optimal range per level
+
+ def test_amarrOffensiveSystems_maxRange_moduleEnergyWeaponMedium(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Heavy Beam Laser I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrOffensiveSystems_maxRange_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Medium Beam Laser I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +800000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6815000.0
+ fIngame = 7615000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/legion/propulsion/__init__.py b/eos/tests/typeTests/ships/strategicCruisers/legion/propulsion/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/strategicCruisers/legion/propulsion/chassisOptimization.py b/eos/tests/typeTests/ships/strategicCruisers/legion/propulsion/chassisOptimization.py
new file mode 100755
index 000000000..afd383599
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/legion/propulsion/chassisOptimization.py
@@ -0,0 +1,98 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Legion"
+ self.sub = "Legion Propulsion - Chassis Optimization"
+ self.skill = "Amarr Propulsion Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to max velocity per level
+
+ def test_amarrPropulsionSystems_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6815000.0
+ fIngame = 8215000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +170 m/s speed
+
+ def test_static_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ iIngame = 10.0
+ fIngame = 180.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Set inertia modifier to 0.619
+
+ def test_static_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ ingame = 0.619
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/legion/propulsion/fuelCatalyst.py b/eos/tests/typeTests/ships/strategicCruisers/legion/propulsion/fuelCatalyst.py
new file mode 100755
index 000000000..6474696b8
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/legion/propulsion/fuelCatalyst.py
@@ -0,0 +1,113 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Legion"
+ self.sub = "Legion Propulsion - Fuel Catalyst"
+ self.skill = "Amarr Propulsion Systems"
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to afterburner speed per level
+
+ def test_amarrPropulsionSystems_speedFactor_moduleAfterburner(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "10MN Afterburner I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrPropulsionSystems_speedFactor_moduleAfterburnerNoSkillrqAfterburner(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "Civilian Afterburner"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6815000.0
+ fIngame = 8215000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +170 m/s speed
+
+ def test_static_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ iIngame = 10.0
+ fIngame = 180.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Set inertia modifier to 0.507
+
+ def test_static_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ ingame = 0.507
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/legion/propulsion/interdictionNullifier.py b/eos/tests/typeTests/ships/strategicCruisers/legion/propulsion/interdictionNullifier.py
new file mode 100755
index 000000000..63f8fd32a
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/legion/propulsion/interdictionNullifier.py
@@ -0,0 +1,108 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Legion"
+ self.sub = "Legion Propulsion - Interdiction Nullifier"
+ self.skill = "Amarr Propulsion Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% increased agility per level
+
+ def test_amarrPropulsionSystems_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # Immunity to non-targeted interdiction
+
+ def test_static_warpBubbleImmune_ship(self):
+ self.buildTested = 0
+ attr = "warpBubbleImmune"
+ ingame = 1.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6815000.0
+ fIngame = 8215000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +165 m/s speed
+
+ def test_static_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ iIngame = 10.0
+ fIngame = 175.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Set inertia modifier to 0.732
+
+ def test_static_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ ingame = 0.732
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/legion/propulsion/wakeLimiter.py b/eos/tests/typeTests/ships/strategicCruisers/legion/propulsion/wakeLimiter.py
new file mode 100755
index 000000000..4f63b2898
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/legion/propulsion/wakeLimiter.py
@@ -0,0 +1,113 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Legion"
+ self.sub = "Legion Propulsion - Wake Limiter"
+ self.skill = "Amarr Propulsion Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% reduction in microwarpdrive signature radius penalty per level
+
+ def test_amarrPropulsionSystems_signatureRadiusBonus_moduleMWD(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "10MN MicroWarpdrive I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrPropulsionSystems_signatureRadiusBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "Target Painter I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6815000.0
+ fIngame = 8215000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +165 m/s speed
+
+ def test_static_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ iIngame = 10.0
+ fIngame = 175.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Set inertia modifier to 0.563
+
+ def test_static_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ ingame = 0.563
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/loki/__init__.py b/eos/tests/typeTests/ships/strategicCruisers/loki/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/strategicCruisers/loki/defensive/__init__.py b/eos/tests/typeTests/ships/strategicCruisers/loki/defensive/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/strategicCruisers/loki/defensive/adaptiveAugmenter.py b/eos/tests/typeTests/ships/strategicCruisers/loki/defensive/adaptiveAugmenter.py
new file mode 100755
index 000000000..e1ce6e47c
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/loki/defensive/adaptiveAugmenter.py
@@ -0,0 +1,251 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Loki"
+ self.sub = "Loki Defensive - Adaptive Augmenter"
+ self.skill = "Minmatar Defensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to all armor resistances per level
+
+ def test_minmatarDefensiveSystems_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarDefensiveSystems_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarDefensiveSystems_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarDefensiveSystems_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6540000.0
+ fIngame = 7940000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +150 MW powergrid
+
+ def test_static_powerOutput_ship(self):
+ self.buildTested = 0
+ attr = "powerOutput"
+ iIngame = 0.0
+ fIngame = 150.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 130 m signature radius
+
+ def test_static_signatureRadius_ship(self):
+ self.buildTested = 0
+ attr = "signatureRadius"
+ ingame = 130.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # 270 m3 cargohold capacity
+
+ def test_static_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ ingame = 270.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship armor resistances
+
+ def test_static_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ ingame = 0.1
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ ingame = 0.9
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ ingame = 0.75
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ ingame = 0.325
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship shield resistances
+
+ def test_static_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ ingame = 0.25
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ ingame = 0.5
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ ingame = 0.6
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ ingame = 0.4
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # +3300 armor hp
+
+ def test_static_armorHP_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ iIngame = 100.0
+ fIngame = 3400.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +2200 shield capacity
+
+ def test_static_shieldCapacity_ship(self):
+ self.buildTested = 0
+ attr = "shieldCapacity"
+ iIngame = 100.0
+ fIngame = 2300.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1620 seconds shield recharge rate
+
+ def test_static_shieldRechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "shieldRechargeRate"
+ iIngame = 10000.0
+ fIngame = 1630000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/loki/defensive/adaptiveShielding.py b/eos/tests/typeTests/ships/strategicCruisers/loki/defensive/adaptiveShielding.py
new file mode 100755
index 000000000..7c6e248cb
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/loki/defensive/adaptiveShielding.py
@@ -0,0 +1,310 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Loki"
+ self.sub = "Loki Defensive - Adaptive Shielding"
+ self.skill = "Minmatar Defensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to all shield resistances per level
+
+ def test_minmatarDefensiveSystems_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarDefensiveSystems_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarDefensiveSystems_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarDefensiveSystems_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to shield transporter effectiveness per level
+
+ def test_minmatarDefensiveSystems_shieldBonus_moduleShieldTransporter(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Large Shield Transporter I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarDefensiveSystems_shieldBonus_moduleShieldTransporterCapital(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Capital Shield Transporter I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarDefensiveSystems_shieldBonus_moduleShieldTransporterCivilian(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Civilian Remote Shield Transporter"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarDefensiveSystems_shieldBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Small Shield Booster I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6540000.0
+ fIngame = 7940000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +50 tf cpu
+
+ def test_static_cpuOutput_ship(self):
+ self.buildTested = 0
+ attr = "cpuOutput"
+ iIngame = 0.0
+ fIngame = 50.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 143 m signature radius
+
+ def test_static_signatureRadius_ship(self):
+ self.buildTested = 0
+ attr = "signatureRadius"
+ ingame = 143.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # 280 m3 cargohold capacity
+
+ def test_static_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ ingame = 280.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship armor resistances
+
+ def test_static_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ ingame = 0.1
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ ingame = 0.9
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ ingame = 0.75
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ ingame = 0.325
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship shield resistances
+
+ def test_static_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ ingame = 0.25
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ ingame = 0.5
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ ingame = 0.6
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ ingame = 0.4
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # +2050 armor hp
+
+ def test_static_armorHP_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ iIngame = 100.0
+ fIngame = 2150.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +3100 shield capacity
+
+ def test_static_shieldCapacity_ship(self):
+ self.buildTested = 0
+ attr = "shieldCapacity"
+ iIngame = 100.0
+ fIngame = 3200.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1620 seconds shield recharge rate
+
+ def test_static_shieldRechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "shieldRechargeRate"
+ iIngame = 10000.0
+ fIngame = 1630000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/loki/defensive/amplificationNode.py b/eos/tests/typeTests/ships/strategicCruisers/loki/defensive/amplificationNode.py
new file mode 100755
index 000000000..e41ad5c28
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/loki/defensive/amplificationNode.py
@@ -0,0 +1,198 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Loki"
+ self.sub = "Loki Defensive - Amplification Node"
+ self.skill = "Minmatar Defensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% reduction in signature radius per level
+
+ def test_minmatarDefensiveSystems_signatureRadius_ship(self):
+ self.buildTested = 0
+ attr = "signatureRadius"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6540000.0
+ fIngame = 7940000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 130 m signature radius
+
+ def test_static_signatureRadius_ship(self):
+ self.buildTested = 0
+ attr = "signatureRadius"
+ ingame = 130.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # 300 m3 cargohold capacity
+
+ def test_static_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ ingame = 300.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship armor resistances
+
+ def test_static_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ ingame = 0.1
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ ingame = 0.9
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ ingame = 0.75
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ ingame = 0.325
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship shield resistances
+
+ def test_static_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ ingame = 0.25
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ ingame = 0.5
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ ingame = 0.6
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ ingame = 0.4
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # +1650 armor hp
+
+ def test_static_armorHP_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ iIngame = 100.0
+ fIngame = 1750.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +2500 shield capacity
+
+ def test_static_shieldCapacity_ship(self):
+ self.buildTested = 0
+ attr = "shieldCapacity"
+ iIngame = 100.0
+ fIngame = 2600.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1620 seconds shield recharge rate
+
+ def test_static_shieldRechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "shieldRechargeRate"
+ iIngame = 10000.0
+ fIngame = 1630000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/loki/defensive/warfareProcessor.py b/eos/tests/typeTests/ships/strategicCruisers/loki/defensive/warfareProcessor.py
new file mode 100755
index 000000000..44c01e5be
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/loki/defensive/warfareProcessor.py
@@ -0,0 +1,240 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Loki"
+ self.sub = "Loki Defensive - Warfare Processor"
+ self.skill = "Minmatar Defensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to effectiveness of Skirmish Warfare Links per subsystem skill level
+
+ def test_minmatarDefensiveSystems_commandBonus_moduleGangCoordinatorSkillrqSkirmishWarfare(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Skirmish Warfare Link - Interdiction Maneuvers I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarDefensiveSystems_commandBonus_moduleGangCoordinatorSkillrqOther(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Information Warfare Link - Recon Operation I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 99% reduction in Warfare Link module CPU need
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Siege Warfare Link - Active Shielding I"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6540000.0
+ fIngame = 7940000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 130 m signature radius
+
+ def test_static_signatureRadius_ship(self):
+ self.buildTested = 0
+ attr = "signatureRadius"
+ ingame = 130.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # 200 m3 cargohold capacity
+
+ def test_static_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ ingame = 200.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship armor resistances
+
+ def test_static_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ ingame = 0.1
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ ingame = 0.9
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ ingame = 0.75
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ ingame = 0.325
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship shield resistances
+
+ def test_static_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ ingame = 0.25
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ ingame = 0.5
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ ingame = 0.6
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ ingame = 0.4
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # +2050 armor hp
+
+ def test_static_armorHP_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ iIngame = 100.0
+ fIngame = 2150.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +3100 shield capacity
+
+ def test_static_shieldCapacity_ship(self):
+ self.buildTested = 0
+ attr = "shieldCapacity"
+ iIngame = 100.0
+ fIngame = 3200.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1620 seconds shield recharge rate
+
+ def test_static_shieldRechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "shieldRechargeRate"
+ iIngame = 10000.0
+ fIngame = 1630000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/loki/electronics/__init__.py b/eos/tests/typeTests/ships/strategicCruisers/loki/electronics/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/strategicCruisers/loki/electronics/dissolutionSequencer.py b/eos/tests/typeTests/ships/strategicCruisers/loki/electronics/dissolutionSequencer.py
new file mode 100755
index 000000000..de4e07eee
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/loki/electronics/dissolutionSequencer.py
@@ -0,0 +1,179 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Loki"
+ self.sub = "Loki Electronics - Dissolution Sequencer"
+ self.skill = "Minmatar Electronic Systems"
+
+ # Subsystem Skill Bonus:
+ # 15% bonus to ship sensor strength per level
+
+ def test_minmatarElectronicSystems_scanLadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanLadarStrength"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to max targeting range per level
+
+ def test_minmatarElectronicSystems_maxTargetRange_ship(self):
+ self.buildTested = 0
+ attr = "maxTargetRange"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 3.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6540000.0
+ fIngame = 7740000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +335 tf cpu
+
+ def test_static_cpuOutput_ship(self):
+ self.buildTested = 0
+ attr = "cpuOutput"
+ iIngame = 0.0
+ fIngame = 335.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +60 km lock range
+
+ def test_static_maxTargetRange_ship(self):
+ self.buildTested = 0
+ attr = "maxTargetRange"
+ iIngame = 0.0
+ fIngame = 60000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +275 mm scan resolution
+
+ def test_static_scanResolution_ship(self):
+ self.buildTested = 0
+ attr = "scanResolution"
+ iIngame = 0.0
+ fIngame = 275.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add 17 ladar sensor strength
+
+ def test_static_scanGravimetricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanLadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanLadarStrength"
+ iIngame = 0.0
+ fIngame = 17.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanMagnetometricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanRadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanRadarStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/loki/electronics/emergentLocusAnalyzer.py b/eos/tests/typeTests/ships/strategicCruisers/loki/electronics/emergentLocusAnalyzer.py
new file mode 100755
index 000000000..3dc4c1a5c
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/loki/electronics/emergentLocusAnalyzer.py
@@ -0,0 +1,239 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Loki"
+ self.sub = "Loki Electronics - Emergent Locus Analyzer"
+ self.skill = "Minmatar Electronic Systems"
+
+ # Subsystem Skill Bonus:
+ # 10% increase to scan strength of probes per level
+
+ def test_minmatarElectronicSystems_baseSensorStrength_chargeScannerProbe(self):
+ self.buildTested = 0
+ attr = "baseSensorStrength"
+ item = "Core Scanner Probe I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 20% bonus to range of tractor beams per level
+
+ def test_minmatarElectronicSystems_maxRange_moduleTractorBeam(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Small Tractor Beam I"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarElectronicSystems_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Tracking Link I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 20% bonus to velocity of tractor beams per level
+
+ def test_minmatarElectronicSystems_maxTractorVelocity_moduleTractorBeam(self):
+ self.buildTested = 0
+ attr = "maxTractorVelocity"
+ item = "Small Tractor Beam I"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # -99% reduced CPU need for Scan Probe Launchers
+
+ def test_static_cpu_moduleScanProbeLauncher(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Expanded Probe Launcher I"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Large Plasma Smartbomb I"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 4.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6540000.0
+ fIngame = 7740000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +335 tf cpu
+
+ def test_static_cpuOutput_ship(self):
+ self.buildTested = 0
+ attr = "cpuOutput"
+ iIngame = 0.0
+ fIngame = 335.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +50 km lock range
+
+ def test_static_maxTargetRange_ship(self):
+ self.buildTested = 0
+ attr = "maxTargetRange"
+ iIngame = 0.0
+ fIngame = 50000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +300 mm scan resolution
+
+ def test_static_scanResolution_ship(self):
+ self.buildTested = 0
+ attr = "scanResolution"
+ iIngame = 0.0
+ fIngame = 300.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add 17 ladar sensor strength
+
+ def test_static_scanGravimetricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanLadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanLadarStrength"
+ iIngame = 0.0
+ fIngame = 17.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanMagnetometricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanRadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanRadarStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/loki/electronics/immobilityDrivers.py b/eos/tests/typeTests/ships/strategicCruisers/loki/electronics/immobilityDrivers.py
new file mode 100755
index 000000000..a45ed0ef8
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/loki/electronics/immobilityDrivers.py
@@ -0,0 +1,192 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Loki"
+ self.sub = "Loki Electronics - Immobility Drivers"
+ self.skill = "Minmatar Electronic Systems"
+
+ # Subsystem Skill Bonus:
+ # 30% bonus to stasis webifier range per level
+
+ def test_minmatarElectronicSystems_maxRange_moduleStasisWeb(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Stasis Webifier I"
+ iLvl = 1
+ iIngame = 1.3
+ fLvl = 4
+ fIngame = 2.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarElectronicSystems_maxRange_moduleStasisWebCivilian(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Civilian Stasis Webifier"
+ iLvl = 1
+ iIngame = 1.3
+ fLvl = 4
+ fIngame = 2.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarElectronicSystems_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Warp Disruptor I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 3.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6540000.0
+ fIngame = 7740000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +320 tf cpu
+
+ def test_static_cpuOutput_ship(self):
+ self.buildTested = 0
+ attr = "cpuOutput"
+ iIngame = 0.0
+ fIngame = 320.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +50 km lock range
+
+ def test_static_maxTargetRange_ship(self):
+ self.buildTested = 0
+ attr = "maxTargetRange"
+ iIngame = 0.0
+ fIngame = 50000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +300 mm scan resolution
+
+ def test_static_scanResolution_ship(self):
+ self.buildTested = 0
+ attr = "scanResolution"
+ iIngame = 0.0
+ fIngame = 300.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add 13 ladar sensor strength
+
+ def test_static_scanGravimetricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanLadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanLadarStrength"
+ iIngame = 0.0
+ fIngame = 13.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanMagnetometricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanRadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanRadarStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/loki/electronics/tacticalTargetingNetwork.py b/eos/tests/typeTests/ships/strategicCruisers/loki/electronics/tacticalTargetingNetwork.py
new file mode 100755
index 000000000..02a0c6f40
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/loki/electronics/tacticalTargetingNetwork.py
@@ -0,0 +1,163 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Loki"
+ self.sub = "Loki Electronics - Tactical Targeting Network"
+ self.skill = "Minmatar Electronic Systems"
+
+ # Subsystem Skill Bonus:
+ # 15% bonus to scan resolution per level
+
+ def test_minmatarElectronicSystems_scanResolution_ship(self):
+ self.buildTested = 0
+ attr = "scanResolution"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 4.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6540000.0
+ fIngame = 7740000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +355 tf cpu
+
+ def test_static_cpuOutput_ship(self):
+ self.buildTested = 0
+ attr = "cpuOutput"
+ iIngame = 0.0
+ fIngame = 355.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +55 km lock range
+
+ def test_static_maxTargetRange_ship(self):
+ self.buildTested = 0
+ attr = "maxTargetRange"
+ iIngame = 0.0
+ fIngame = 55000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +260 mm scan resolution
+
+ def test_static_scanResolution_ship(self):
+ self.buildTested = 0
+ attr = "scanResolution"
+ iIngame = 0.0
+ fIngame = 260.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add 15 ladar sensor strength
+
+ def test_static_scanGravimetricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanLadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanLadarStrength"
+ iIngame = 0.0
+ fIngame = 15.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanMagnetometricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanRadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanRadarStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/loki/engineering/__init__.py b/eos/tests/typeTests/ships/strategicCruisers/loki/engineering/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/strategicCruisers/loki/engineering/augmentedCapacitorReservoir.py b/eos/tests/typeTests/ships/strategicCruisers/loki/engineering/augmentedCapacitorReservoir.py
new file mode 100755
index 000000000..af117adfd
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/loki/engineering/augmentedCapacitorReservoir.py
@@ -0,0 +1,141 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Loki"
+ self.sub = "Loki Engineering - Augmented Capacitor Reservoir"
+ self.skill = "Minmatar Engineering Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to capacitor capacity per level
+
+ def test_minmatarEngineeringSystems_capacitorCapacity_ship(self):
+ self.buildTested = 0
+ attr = "capacitorCapacity"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 2.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6540000.0
+ fIngame = 7740000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +950 MW powergrid
+
+ def test_static_powerOutput_ship(self):
+ self.buildTested = 0
+ attr = "powerOutput"
+ iIngame = 0.0
+ fIngame = 950.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1225 GJ capacitor capacity
+
+ def test_static_capacitorCapacity_ship(self):
+ self.buildTested = 0
+ attr = "capacitorCapacity"
+ iIngame = 100.0
+ fIngame = 1325.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +415 seconds capacitor recharge time
+
+ def test_static_rechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "rechargeRate"
+ iIngame = 10000.0
+ fIngame = 425000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/loki/engineering/capacitorRegenerationMatrix.py b/eos/tests/typeTests/ships/strategicCruisers/loki/engineering/capacitorRegenerationMatrix.py
new file mode 100755
index 000000000..57d6aad95
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/loki/engineering/capacitorRegenerationMatrix.py
@@ -0,0 +1,141 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Loki"
+ self.sub = "Loki Engineering - Capacitor Regeneration Matrix"
+ self.skill = "Minmatar Engineering Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% reduction in capacitor recharge rate per level
+
+ def test_minmatarEngineeringSystems_rechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "rechargeRate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 2.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6540000.0
+ fIngame = 7740000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +750 MW powergrid
+
+ def test_static_powerOutput_ship(self):
+ self.buildTested = 0
+ attr = "powerOutput"
+ iIngame = 0.0
+ fIngame = 750.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +2100 GJ capacitor capacity
+
+ def test_static_capacitorCapacity_ship(self):
+ self.buildTested = 0
+ attr = "capacitorCapacity"
+ iIngame = 100.0
+ fIngame = 2200.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +415 seconds capacitor recharge time
+
+ def test_static_rechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "rechargeRate"
+ iIngame = 10000.0
+ fIngame = 425000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/loki/engineering/powerCoreMultiplier.py b/eos/tests/typeTests/ships/strategicCruisers/loki/engineering/powerCoreMultiplier.py
new file mode 100755
index 000000000..d96afcd8b
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/loki/engineering/powerCoreMultiplier.py
@@ -0,0 +1,141 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Loki"
+ self.sub = "Loki Engineering - Power Core Multiplier"
+ self.skill = "Minmatar Engineering Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to power output per level
+
+ def test_minmatarEngineeringSystems_powerOutput_ship(self):
+ self.buildTested = 0
+ attr = "powerOutput"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 2.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6540000.0
+ fIngame = 7740000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1050 MW powergrid
+
+ def test_static_powerOutput_ship(self):
+ self.buildTested = 0
+ attr = "powerOutput"
+ iIngame = 0.0
+ fIngame = 1050.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1225 GJ capacitor capacity
+
+ def test_static_capacitorCapacity_ship(self):
+ self.buildTested = 0
+ attr = "capacitorCapacity"
+ iIngame = 100.0
+ fIngame = 1325.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +415 seconds capacitor recharge time
+
+ def test_static_rechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "rechargeRate"
+ iIngame = 10000.0
+ fIngame = 425000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/loki/engineering/supplementalCoolantInjector.py b/eos/tests/typeTests/ships/strategicCruisers/loki/engineering/supplementalCoolantInjector.py
new file mode 100755
index 000000000..6f4925f0d
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/loki/engineering/supplementalCoolantInjector.py
@@ -0,0 +1,506 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Loki"
+ self.sub = "Loki Engineering - Supplemental Coolant Injector"
+ self.skill = "Minmatar Engineering Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% Reduction in the amount of heat damage absorbed by modules per level
+
+ def test_minmatarEngineeringSystems_heatDamage_moduleAfterburner(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "10MN Afterburner I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarEngineeringSystems_heatDamage_moduleArmorHardener(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Armor Explosive Hardener I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarEngineeringSystems_heatDamage_moduleRemoteArmorRepairer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Medium Remote Armor Repair System I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarEngineeringSystems_heatDamage_moduleArmorRepairer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Armor Repairer I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarEngineeringSystems_heatDamage_moduleCapacitorBooster(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Medium Capacitor Booster I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarEngineeringSystems_heatDamage_moduleECCM(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "ECCM - Ladar I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarEngineeringSystems_heatDamage_moduleECM(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "ECM - Multispectral Jammer I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarEngineeringSystems_heatDamage_moduleEnergyDestabilizer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Energy Neutralizer I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarEngineeringSystems_heatDamage_moduleEnergyTransferArray(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Energy Transfer Array I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarEngineeringSystems_heatDamage_moduleEnergyVampire(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Nosferatu I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarEngineeringSystems_heatDamage_moduleEnergyWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Quad Light Beam Laser I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarEngineeringSystems_heatDamage_moduleHullRepairUnit(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Large Hull Repairer I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarEngineeringSystems_heatDamage_moduleHybridWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Dual 150mm Railgun I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarEngineeringSystems_heatDamage_moduleMissileLauncherAssault(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarEngineeringSystems_heatDamage_moduleMissileLauncherCitadel(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Citadel Torpedo Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarEngineeringSystems_heatDamage_moduleMissileLauncherCruise(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Cruise Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarEngineeringSystems_heatDamage_moduleMissileLauncherHeavy(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarEngineeringSystems_heatDamage_moduleMissileLauncherHeavyAssault(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarEngineeringSystems_heatDamage_moduleMissileLauncherRocket(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Rocket Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarEngineeringSystems_heatDamage_moduleMissileLauncherSiege(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Siege Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarEngineeringSystems_heatDamage_moduleMissileLauncherStandard(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Standard Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarEngineeringSystems_heatDamage_moduleProjectileWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Dual 425mm AutoCannon I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarEngineeringSystems_heatDamage_moduleShieldBooster(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "X-Large Shield Booster I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarEngineeringSystems_heatDamage_moduleShieldHardener(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Ballistic Deflection Field I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarEngineeringSystems_heatDamage_moduleShieldTransporter(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Micro Shield Transporter I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarEngineeringSystems_heatDamage_moduleStasisWeb(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Stasis Webifier I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarEngineeringSystems_heatDamage_moduleWarpScrambler(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Warp Disruptor I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 2.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6540000.0
+ fIngame = 7740000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +950 MW powergrid
+
+ def test_static_powerOutput_ship(self):
+ self.buildTested = 0
+ attr = "powerOutput"
+ iIngame = 0.0
+ fIngame = 950.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1225 GJ capacitor capacity
+
+ def test_static_capacitorCapacity_ship(self):
+ self.buildTested = 0
+ attr = "capacitorCapacity"
+ iIngame = 100.0
+ fIngame = 1325.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +415 seconds capacitor recharge time
+
+ def test_static_rechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "rechargeRate"
+ iIngame = 10000.0
+ fIngame = 425000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/loki/hull.py b/eos/tests/typeTests/ships/strategicCruisers/loki/hull.py
new file mode 100755
index 000000000..5e346b272
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/loki/hull.py
@@ -0,0 +1,414 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Loki"
+
+ # Minmatar Strategic Cruiser Skill Bonus:
+ # 5% Reduction in the amount of heat damage absorbed by modules per level
+
+ def test_minmatarStrategicCruiser_heatDamage_moduleAfterburner(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "10MN Afterburner I"
+ skill = "Minmatar Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarStrategicCruiser_heatDamage_moduleArmorHardener(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Armor Thermic Hardener I"
+ skill = "Minmatar Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarStrategicCruiser_heatDamage_moduleArmorRepairProjector(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Medium Remote Armor Repair System I"
+ skill = "Minmatar Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarStrategicCruiser_heatDamage_moduleArmorRepairer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Armor Repairer I"
+ skill = "Minmatar Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarStrategicCruiser_heatDamage_moduleCapacitorBooster(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Medium Capacitor Booster I"
+ skill = "Minmatar Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarStrategicCruiser_heatDamage_moduleECCM(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "ECCM - Ladar I"
+ skill = "Minmatar Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarStrategicCruiser_heatDamage_moduleECM(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "ECM - Multispectral Jammer I"
+ skill = "Minmatar Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarStrategicCruiser_heatDamage_moduleEnergyDestabilizer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Energy Neutralizer I"
+ skill = "Minmatar Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarStrategicCruiser_heatDamage_moduleEnergyTransferArray(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Medium Energy Transfer Array I"
+ skill = "Minmatar Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarStrategicCruiser_heatDamage_moduleEnergyVampire(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Nosferatu I"
+ skill = "Minmatar Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarStrategicCruiser_heatDamage_moduleEnergyWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Mega Beam Laser I"
+ skill = "Minmatar Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarStrategicCruiser_heatDamage_moduleHullRepairer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Large Hull Repairer I"
+ skill = "Minmatar Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarStrategicCruiser_heatDamage_moduleHybridWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Ion Blaster I"
+ skill = "Minmatar Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarStrategicCruiser_heatDamage_moduleMissileLauncherAssault(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Assault Missile Launcher I"
+ skill = "Minmatar Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarStrategicCruiser_heatDamage_moduleMissileLauncherCitadel(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Citadel Torpedo Launcher I"
+ skill = "Minmatar Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarStrategicCruiser_heatDamage_moduleMissileLauncherCruise(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Cruise Missile Launcher I"
+ skill = "Minmatar Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarStrategicCruiser_heatDamage_moduleMissileLauncherHeavy(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Missile Launcher I"
+ skill = "Minmatar Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarStrategicCruiser_heatDamage_moduleMissileLauncherHeavyAssault(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Assault Missile Launcher I"
+ skill = "Minmatar Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarStrategicCruiser_heatDamage_moduleMissileLauncherRocket(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Rocket Launcher I"
+ skill = "Minmatar Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarStrategicCruiser_heatDamage_moduleMissileLauncherSiege(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Siege Missile Launcher I"
+ skill = "Minmatar Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarStrategicCruiser_heatDamage_moduleMissileLauncherStandard(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Standard Missile Launcher I"
+ skill = "Minmatar Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarStrategicCruiser_heatDamage_moduleProjectileWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "125mm Gatling AutoCannon I"
+ skill = "Minmatar Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarStrategicCruiser_heatDamage_moduleShieldBooster(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Capital Shield Booster I"
+ skill = "Minmatar Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarStrategicCruiser_heatDamage_moduleShieldHardener(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Explosion Dampening Field I"
+ skill = "Minmatar Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarStrategicCruiser_heatDamage_moduleShieldTransporter(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Large Shield Transporter I"
+ skill = "Minmatar Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarStrategicCruiser_heatDamage_moduleStasisWeb(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Stasis Webifier I"
+ skill = "Minmatar Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarStrategicCruiser_heatDamage_moduleWarpScrambler(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Warp Scrambler I"
+ skill = "Minmatar Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/loki/offensive/__init__.py b/eos/tests/typeTests/ships/strategicCruisers/loki/offensive/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/strategicCruisers/loki/offensive/covertReconfiguration.py b/eos/tests/typeTests/ships/strategicCruisers/loki/offensive/covertReconfiguration.py
new file mode 100755
index 000000000..247b74446
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/loki/offensive/covertReconfiguration.py
@@ -0,0 +1,179 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Loki"
+ self.sub = "Loki Offensive - Covert Reconfiguration"
+ self.skill = "Minmatar Offensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to medium projectile turret rate of fire per level
+
+ def test_minmatarOffensiveSystems_speed_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Dual 180mm AutoCannon I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarOffensiveSystems_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "280mm Howitzer Artillery I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 100% reduction in Cloaking Device CPU use
+
+ def test_static_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ iIngame = 30.0
+ fIngame = 0.0
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Medium Capacitor Battery I"
+ iIngame = 75.0
+ fIngame = 75.0
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Can use covert jump portal
+
+ def test_static_jumpHarmonics_ship(self):
+ self.buildTested = 0
+ attr = "jumpHarmonics"
+ ingame = 5.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # 5 seconds cloak reactivation delay
+
+ def test_static_moduleReactivationDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ iIngame = 30000.0
+ fIngame = 5000.0
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Cynosural Field Generator I"
+ iIngame = 30000.0
+ fIngame = 30000.0
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 4.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +800000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6540000.0
+ fIngame = 7340000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/loki/offensive/hardpointEfficiencyConfiguration.py b/eos/tests/typeTests/ships/strategicCruisers/loki/offensive/hardpointEfficiencyConfiguration.py
new file mode 100755
index 000000000..9a34cbdb1
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/loki/offensive/hardpointEfficiencyConfiguration.py
@@ -0,0 +1,216 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Loki"
+ self.sub = "Loki Offensive - Hardpoint Efficiency Configuration"
+ self.skill = "Minmatar Offensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 7.5% bonus to medium projectile turret rate of fire per level
+
+ def test_minmatarOffensiveSystems_speed_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "220mm Vulcan AutoCannon I"
+ iLvl = 1
+ iIngame = 0.925
+ fLvl = 4
+ fIngame = 0.7
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarOffensiveSystems_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "125mm Gatling AutoCannon I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 7.5% bonus to missile launcher rate of fire per level
+ # Actually affects only Assault, Heavy Assault and Heavy launchers
+
+ def test_minmatarOffensiveSystems_speed_moduleLauncherMissileAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.925
+ fLvl = 4
+ fIngame = 0.7
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarOffensiveSystems_speed_moduleLauncherMissileHeavyAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.925
+ fLvl = 4
+ fIngame = 0.7
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarOffensiveSystems_speed_moduleLauncherMissileHeavy(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.925
+ fLvl = 4
+ fIngame = 0.7
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarOffensiveSystems_speed_moduleLauncherMissileOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Siege Missile Launcher I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 3.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 3.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +80 m3 dronebay
+
+ def test_static_droneCapacity_ship(self):
+ self.buildTested = 0
+ attr = "droneCapacity"
+ iIngame = 0.0
+ fIngame = 80.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +40 MBit/s drone bandwidth
+
+ def test_static_droneBandwidth_ship(self):
+ self.buildTested = 0
+ attr = "droneBandwidth"
+ iIngame = 0.0
+ fIngame = 40.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +800000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6540000.0
+ fIngame = 7340000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +50 tf cpu
+
+ def test_static_cpuOutput_ship(self):
+ self.buildTested = 0
+ attr = "cpuOutput"
+ iIngame = 0.0
+ fIngame = 50.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/loki/offensive/projectileScopingArray.py b/eos/tests/typeTests/ships/strategicCruisers/loki/offensive/projectileScopingArray.py
new file mode 100755
index 000000000..c5e526c94
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/loki/offensive/projectileScopingArray.py
@@ -0,0 +1,173 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Loki"
+ self.sub = "Loki Offensive - Projectile Scoping Array"
+ self.skill = "Minmatar Offensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 7.5% bonus to medium projectile turret rate of fire per level
+
+ def test_minmatarOffensiveSystems_speed_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "720mm Howitzer Artillery I"
+ iLvl = 1
+ iIngame = 0.925
+ fLvl = 4
+ fIngame = 0.7
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarOffensiveSystems_speed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "1200mm Artillery Cannon I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to medium projectile falloff per level
+
+ def test_minmatarOffensiveSystems_falloff_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "425mm AutoCannon I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarOffensiveSystems_falloff_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "200mm AutoCannon I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +800000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6540000.0
+ fIngame = 7340000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +50 m3 dronebay
+
+ def test_static_droneCapacity_ship(self):
+ self.buildTested = 0
+ attr = "droneCapacity"
+ iIngame = 0.0
+ fIngame = 50.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +25 MBit/s drone bandwidth
+
+ def test_static_droneBandwidth_ship(self):
+ self.buildTested = 0
+ attr = "droneBandwidth"
+ iIngame = 0.0
+ fIngame = 25.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/loki/offensive/turretConcurrenceRegistry.py b/eos/tests/typeTests/ships/strategicCruisers/loki/offensive/turretConcurrenceRegistry.py
new file mode 100755
index 000000000..9ea5089a0
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/loki/offensive/turretConcurrenceRegistry.py
@@ -0,0 +1,176 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Loki"
+ self.sub = "Loki Offensive - Turret Concurrence Registry"
+ self.skill = "Minmatar Offensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to medium projectile turret damage per level
+
+ def test_minmatarOffensiveSystems_damageMultiplier_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "425mm AutoCannon I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarOffensiveSystems_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual 425mm AutoCannon I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to medium projectile turret optimal range per level
+
+ def test_minmatarOffensiveSystems_maxRange_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "720mm Howitzer Artillery I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarOffensiveSystems_maxRange_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "250mm Light Artillery Cannon I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 7.5% bonus to medium projectile turret tracking per level
+
+ def test_minmatarOffensiveSystems_trackingSpeed_moduleProjectileWeaponMedium(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Dual 180mm AutoCannon I"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarOffensiveSystems_trackingSpeed_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "150mm Light AutoCannon I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +800000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6540000.0
+ fIngame = 7340000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/loki/propulsion/__init__.py b/eos/tests/typeTests/ships/strategicCruisers/loki/propulsion/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/strategicCruisers/loki/propulsion/chassisOptimization.py b/eos/tests/typeTests/ships/strategicCruisers/loki/propulsion/chassisOptimization.py
new file mode 100755
index 000000000..93bcf69ba
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/loki/propulsion/chassisOptimization.py
@@ -0,0 +1,98 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Loki"
+ self.sub = "Loki Propulsion - Chassis Optimization"
+ self.skill = "Minmatar Propulsion Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to max velocity per level
+
+ def test_minmatarPropulsionSystems_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6540000.0
+ fIngame = 7940000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +180 m/s speed
+
+ def test_static_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ iIngame = 10.0
+ fIngame = 190.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Set inertia modifier to 0.612
+
+ def test_static_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ ingame = 0.612
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/loki/propulsion/fuelCatalyst.py b/eos/tests/typeTests/ships/strategicCruisers/loki/propulsion/fuelCatalyst.py
new file mode 100755
index 000000000..d112d64cf
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/loki/propulsion/fuelCatalyst.py
@@ -0,0 +1,113 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Loki"
+ self.sub = "Loki Propulsion - Fuel Catalyst"
+ self.skill = "Minmatar Propulsion Systems"
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to afterburner speed per level
+
+ def test_minmatarPropulsionSystems_speedFactor_moduleAfterburner(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "1MN Afterburner I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarPropulsionSystems_speedFactor_moduleAfterburnerNoSkillrqAfterburner(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "10MN MicroWarpdrive I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6540000.0
+ fIngame = 7940000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +180 m/s speed
+
+ def test_static_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ iIngame = 10.0
+ fIngame = 190.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Set inertia modifier to 0.5
+
+ def test_static_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ ingame = 0.5
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/loki/propulsion/intercalatedNanofibers.py b/eos/tests/typeTests/ships/strategicCruisers/loki/propulsion/intercalatedNanofibers.py
new file mode 100755
index 000000000..8506857a3
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/loki/propulsion/intercalatedNanofibers.py
@@ -0,0 +1,98 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Loki"
+ self.sub = "Loki Propulsion - Intercalated Nanofibers"
+ self.skill = "Minmatar Propulsion Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% increased agility per level
+
+ def test_minmatarPropulsionSystems_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6540000.0
+ fIngame = 7940000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +175 m/s speed
+
+ def test_static_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ iIngame = 10.0
+ fIngame = 185.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Set inertia modifier to 0.556
+
+ def test_static_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ ingame = 0.556
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/loki/propulsion/interdictionNullifier.py b/eos/tests/typeTests/ships/strategicCruisers/loki/propulsion/interdictionNullifier.py
new file mode 100755
index 000000000..ac17a3057
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/loki/propulsion/interdictionNullifier.py
@@ -0,0 +1,108 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Loki"
+ self.sub = "Loki Propulsion - Interdiction Nullifier"
+ self.skill = "Minmatar Propulsion Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% increased agility per level
+
+ def test_minmatarPropulsionSystems_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # Immunity to non-targeted interdiction
+
+ def test_static_warpBubbleImmune_ship(self):
+ self.buildTested = 0
+ attr = "warpBubbleImmune"
+ ingame = 1.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 6540000.0
+ fIngame = 7940000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +165 m/s speed
+
+ def test_static_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ iIngame = 10.0
+ fIngame = 175.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Set inertia modifier to 0.723
+
+ def test_static_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ ingame = 0.723
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/proteus/__init__.py b/eos/tests/typeTests/ships/strategicCruisers/proteus/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/strategicCruisers/proteus/defensive/__init__.py b/eos/tests/typeTests/ships/strategicCruisers/proteus/defensive/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/strategicCruisers/proteus/defensive/adaptiveAugmenter.py b/eos/tests/typeTests/ships/strategicCruisers/proteus/defensive/adaptiveAugmenter.py
new file mode 100755
index 000000000..867277fc4
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/proteus/defensive/adaptiveAugmenter.py
@@ -0,0 +1,296 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Proteus"
+ self.sub = "Proteus Defensive - Adaptive Augmenter"
+ self.skill = "Gallente Defensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to all armor resistances per level
+
+ def test_gallenteDefensiveSystems_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteDefensiveSystems_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteDefensiveSystems_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteDefensiveSystems_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to remote armor repair system effectiveness per level
+
+ def test_gallenteDefensiveSystems_armorDamageAmount_moduleRemoteArmorRepairer(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Small Remote Armor Repair System I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteDefensiveSystems_armorDamageAmount_moduleRemoteArmorRepairerCapital(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Capital Remote Armor Repair System I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteDefensiveSystems_armorDamageAmount_moduleRemoteArmorRepairerCivilian(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Civilian Remote Armor Repair System"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteDefensiveSystems_armorDamageAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Large Armor Repairer I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 5341000.0
+ fIngame = 6741000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 176 m signature radius
+
+ def test_static_signatureRadius_ship(self):
+ self.buildTested = 0
+ attr = "signatureRadius"
+ ingame = 176.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # 320 m3 cargohold capacity
+
+ def test_static_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ ingame = 320.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship armor resistances
+
+ def test_static_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ ingame = 0.5
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ ingame = 0.9
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ ingame = 0.1625
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ ingame = 0.325
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship shield resistances
+
+ def test_static_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ ingame = 1.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ ingame = 0.5
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ ingame = 0.15
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ ingame = 0.4
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # +3200 armor hp
+
+ def test_static_armorHP_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ iIngame = 100.0
+ fIngame = 3300.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +2100 shield capacity
+
+ def test_static_shieldCapacity_ship(self):
+ self.buildTested = 0
+ attr = "shieldCapacity"
+ iIngame = 100.0
+ fIngame = 2200.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1620 seconds shield recharge rate
+
+ def test_static_shieldRechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "shieldRechargeRate"
+ iIngame = 10000.0
+ fIngame = 1630000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/proteus/defensive/augmentedPlating.py b/eos/tests/typeTests/ships/strategicCruisers/proteus/defensive/augmentedPlating.py
new file mode 100755
index 000000000..84904ee03
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/proteus/defensive/augmentedPlating.py
@@ -0,0 +1,198 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Proteus"
+ self.sub = "Proteus Defensive - Augmented Plating"
+ self.skill = "Gallente Defensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to armor hitpoints per level
+
+ def test_gallenteDefensiveSystems_armorHP_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 2.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 5341000.0
+ fIngame = 6741000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 168 m signature radius
+
+ def test_static_signatureRadius_ship(self):
+ self.buildTested = 0
+ attr = "signatureRadius"
+ ingame = 168.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # 280 m3 cargohold capacity
+
+ def test_static_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ ingame = 280.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship armor resistances
+
+ def test_static_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ ingame = 0.5
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ ingame = 0.9
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ ingame = 0.1625
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ ingame = 0.325
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship shield resistances
+
+ def test_static_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ ingame = 1.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ ingame = 0.5
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ ingame = 0.15
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ ingame = 0.4
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # +3650 armor hp
+
+ def test_static_armorHP_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ iIngame = 100.0
+ fIngame = 3750.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +2400 shield capacity
+
+ def test_static_shieldCapacity_ship(self):
+ self.buildTested = 0
+ attr = "shieldCapacity"
+ iIngame = 100.0
+ fIngame = 2500.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1620 seconds shield recharge rate
+
+ def test_static_shieldRechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "shieldRechargeRate"
+ iIngame = 10000.0
+ fIngame = 1630000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/proteus/defensive/nanobotInjector.py b/eos/tests/typeTests/ships/strategicCruisers/proteus/defensive/nanobotInjector.py
new file mode 100755
index 000000000..f489fca9d
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/proteus/defensive/nanobotInjector.py
@@ -0,0 +1,241 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Proteus"
+ self.sub = "Proteus Defensive - Nanobot Injector"
+ self.skill = "Gallente Defensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to armor repairer effectiveness per level
+
+ def test_gallenteDefensiveSystems_armorDamageAmount_moduleArmorRepairer(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Medium Armor Repairer I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteDefensiveSystems_armorDamageAmount_moduleArmorRepairerCapital(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Capital Armor Repairer I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteDefensiveSystems_armorDamageAmount_moduleArmorRepairerCivilian(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Civilian Armor Repairer"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteDefensiveSystems_armorDamageAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Medium Remote Armor Repair System I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 2.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 5341000.0
+ fIngame = 6741000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 160 m signature radius
+
+ def test_static_signatureRadius_ship(self):
+ self.buildTested = 0
+ attr = "signatureRadius"
+ ingame = 160.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # 300 m3 cargohold capacity
+
+ def test_static_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ ingame = 300.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship armor resistances
+
+ def test_static_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ ingame = 0.5
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ ingame = 0.9
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ ingame = 0.1625
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ ingame = 0.325
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship shield resistances
+
+ def test_static_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ ingame = 1.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ ingame = 0.5
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ ingame = 0.15
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ ingame = 0.4
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # +3500 armor hp
+
+ def test_static_armorHP_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ iIngame = 100.0
+ fIngame = 3600.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +2300 shield capacity
+
+ def test_static_shieldCapacity_ship(self):
+ self.buildTested = 0
+ attr = "shieldCapacity"
+ iIngame = 100.0
+ fIngame = 2400.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1620 seconds shield recharge rate
+
+ def test_static_shieldRechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "shieldRechargeRate"
+ iIngame = 10000.0
+ fIngame = 1630000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/proteus/defensive/warfareProcessor.py b/eos/tests/typeTests/ships/strategicCruisers/proteus/defensive/warfareProcessor.py
new file mode 100755
index 000000000..e029e19b3
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/proteus/defensive/warfareProcessor.py
@@ -0,0 +1,254 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Proteus"
+ self.sub = "Proteus Defensive - Warfare Processor"
+ self.skill = "Gallente Defensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to effectiveness of Information Warfare Links per subsystem skill level
+
+ def test_gallenteDefensiveSystems_commandBonus_moduleGangCoordinatorSkillrqInformationWarfare(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Information Warfare Link - Recon Operation I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteDefensiveSystems_commandBonus_moduleGangCoordinatorSkillrqOther(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Mining Foreman Link - Laser Optimization I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteDefensiveSystems_commandBonusHidden_moduleGangCoordinatorSkillrqInformationWarfare(self):
+ self.buildTested = 0
+ attr = "commandBonusHidden"
+ item = "Information Warfare Link - Electronic Superiority I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 99% reduction in Warfare Link module CPU need
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Skirmish Warfare Link - Evasive Maneuvers I"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 5341000.0
+ fIngame = 6741000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 160 m signature radius
+
+ def test_static_signatureRadius_ship(self):
+ self.buildTested = 0
+ attr = "signatureRadius"
+ ingame = 160.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # 220 m3 cargohold capacity
+
+ def test_static_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ ingame = 220.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship armor resistances
+
+ def test_static_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ ingame = 0.5
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ ingame = 0.9
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ ingame = 0.1625
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ ingame = 0.325
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship shield resistances
+
+ def test_static_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ ingame = 1.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ ingame = 0.5
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ ingame = 0.15
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ ingame = 0.4
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # +3200 armor hp
+
+ def test_static_armorHP_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ iIngame = 100.0
+ fIngame = 3300.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +2100 shield capacity
+
+ def test_static_shieldCapacity_ship(self):
+ self.buildTested = 0
+ attr = "shieldCapacity"
+ iIngame = 100.0
+ fIngame = 2200.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1620 seconds shield recharge rate
+
+ def test_static_shieldRechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "shieldRechargeRate"
+ iIngame = 10000.0
+ fIngame = 1630000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/proteus/electronics/__init__.py b/eos/tests/typeTests/ships/strategicCruisers/proteus/electronics/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/strategicCruisers/proteus/electronics/cpuEfficiencyGate.py b/eos/tests/typeTests/ships/strategicCruisers/proteus/electronics/cpuEfficiencyGate.py
new file mode 100755
index 000000000..7ae81f090
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/proteus/electronics/cpuEfficiencyGate.py
@@ -0,0 +1,163 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Proteus"
+ self.sub = "Proteus Electronics - CPU Efficiency Gate"
+ self.skill = "Gallente Electronic Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to CPU per level
+
+ def test_gallenteElectronicSystems_cpuOutput_ship(self):
+ self.buildTested = 0
+ attr = "cpuOutput"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 3.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 5341000.0
+ fIngame = 6541000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +360 tf cpu
+
+ def test_static_cpuOutput_ship(self):
+ self.buildTested = 0
+ attr = "cpuOutput"
+ iIngame = 0.0
+ fIngame = 360.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +65 km lock range
+
+ def test_static_maxTargetRange_ship(self):
+ self.buildTested = 0
+ attr = "maxTargetRange"
+ iIngame = 0.0
+ fIngame = 65000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +225 mm scan resolution
+
+ def test_static_scanResolution_ship(self):
+ self.buildTested = 0
+ attr = "scanResolution"
+ iIngame = 0.0
+ fIngame = 225.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add 17 magnetometric sensor strength
+
+ def test_static_scanGravimetricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanLadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanLadarStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanMagnetometricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrength"
+ iIngame = 0.0
+ fIngame = 17.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanRadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanRadarStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/proteus/electronics/dissolutionSequencer.py b/eos/tests/typeTests/ships/strategicCruisers/proteus/electronics/dissolutionSequencer.py
new file mode 100755
index 000000000..5f9c81c15
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/proteus/electronics/dissolutionSequencer.py
@@ -0,0 +1,179 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Proteus"
+ self.sub = "Proteus Electronics - Dissolution Sequencer"
+ self.skill = "Gallente Electronic Systems"
+
+ # Subsystem Skill Bonus:
+ # 15% bonus to ship sensor strength per level
+
+ def test_gallenteElectronicSystems_scanMagnetometricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrength"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to targeting range per level
+
+ def test_gallenteElectronicSystems_maxTargetRange_ship(self):
+ self.buildTested = 0
+ attr = "maxTargetRange"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 3.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 5341000.0
+ fIngame = 6541000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +410 tf cpu
+
+ def test_static_cpuOutput_ship(self):
+ self.buildTested = 0
+ attr = "cpuOutput"
+ iIngame = 0.0
+ fIngame = 410.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +70 km lock range
+
+ def test_static_maxTargetRange_ship(self):
+ self.buildTested = 0
+ attr = "maxTargetRange"
+ iIngame = 0.0
+ fIngame = 70000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +245 mm scan resolution
+
+ def test_static_scanResolution_ship(self):
+ self.buildTested = 0
+ attr = "scanResolution"
+ iIngame = 0.0
+ fIngame = 245.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add 19 magnetometric sensor strength
+
+ def test_static_scanGravimetricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanLadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanLadarStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanMagnetometricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrength"
+ iIngame = 0.0
+ fIngame = 19.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanRadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanRadarStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/proteus/electronics/emergentLocusAnalyzer.py b/eos/tests/typeTests/ships/strategicCruisers/proteus/electronics/emergentLocusAnalyzer.py
new file mode 100755
index 000000000..9f7d92df2
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/proteus/electronics/emergentLocusAnalyzer.py
@@ -0,0 +1,239 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Proteus"
+ self.sub = "Proteus Electronics - Emergent Locus Analyzer"
+ self.skill = "Gallente Electronic Systems"
+
+ # Subsystem Skill Bonus:
+ # 10% increase to scan strength of probes per level
+
+ def test_gallenteElectronicSystems_baseSensorStrength_chargeScannerProbe(self):
+ self.buildTested = 0
+ attr = "baseSensorStrength"
+ item = "Combat Scanner Probe I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 20% bonus to range of tractor beams per level
+
+ def test_gallenteElectronicSystems_maxRange_moduleTractorBeam(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Small Tractor Beam I"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteElectronicSystems_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "ECM - Phase Inverter I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 20% bonus to velocity of tractor beams per level
+
+ def test_gallenteElectronicSystems_maxTractorVelocity_moduleTractorBeam(self):
+ self.buildTested = 0
+ attr = "maxTractorVelocity"
+ item = "Small Tractor Beam I"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # -99% reduced CPU need for Scan Probe Launchers
+
+ def test_static_cpu_moduleScanProbeLauncher(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Expanded Probe Launcher I"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Codebreaker I"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 3.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 5341000.0
+ fIngame = 6541000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +410 tf cpu
+
+ def test_static_cpuOutput_ship(self):
+ self.buildTested = 0
+ attr = "cpuOutput"
+ iIngame = 0.0
+ fIngame = 410.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +60 km lock range
+
+ def test_static_maxTargetRange_ship(self):
+ self.buildTested = 0
+ attr = "maxTargetRange"
+ iIngame = 0.0
+ fIngame = 60000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +270 mm scan resolution
+
+ def test_static_scanResolution_ship(self):
+ self.buildTested = 0
+ attr = "scanResolution"
+ iIngame = 0.0
+ fIngame = 270.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add 19 magnetometric sensor strength
+
+ def test_static_scanGravimetricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanLadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanLadarStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanMagnetometricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrength"
+ iIngame = 0.0
+ fIngame = 19.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanRadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanRadarStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/proteus/electronics/frictionExtensionProcessor.py b/eos/tests/typeTests/ships/strategicCruisers/proteus/electronics/frictionExtensionProcessor.py
new file mode 100755
index 000000000..4f7f01b60
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/proteus/electronics/frictionExtensionProcessor.py
@@ -0,0 +1,192 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Proteus"
+ self.sub = "Proteus Electronics - Friction Extension Processor"
+ self.skill = "Gallente Electronic Systems"
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to warp disruptor and warp scrambler range per level
+
+ def test_gallenteElectronicSystems_maxRange_moduleWarpScrambler(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Warp Scrambler I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteElectronicSystems_maxRange_moduleWarpScramblerCivilian(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Civilian Warp Disruptor"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteElectronicSystems_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Stasis Webifier I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 3.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 5341000.0
+ fIngame = 6541000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +375 tf cpu
+
+ def test_static_cpuOutput_ship(self):
+ self.buildTested = 0
+ attr = "cpuOutput"
+ iIngame = 0.0
+ fIngame = 375.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +60 km lock range
+
+ def test_static_maxTargetRange_ship(self):
+ self.buildTested = 0
+ attr = "maxTargetRange"
+ iIngame = 0.0
+ fIngame = 60000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +270 mm scan resolution
+
+ def test_static_scanResolution_ship(self):
+ self.buildTested = 0
+ attr = "scanResolution"
+ iIngame = 0.0
+ fIngame = 270.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add 15 magnetometric sensor strength
+
+ def test_static_scanGravimetricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanLadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanLadarStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanMagnetometricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrength"
+ iIngame = 0.0
+ fIngame = 15.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanRadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanRadarStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/proteus/engineering/__init__.py b/eos/tests/typeTests/ships/strategicCruisers/proteus/engineering/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/strategicCruisers/proteus/engineering/augmentedCapacitorReservoir.py b/eos/tests/typeTests/ships/strategicCruisers/proteus/engineering/augmentedCapacitorReservoir.py
new file mode 100755
index 000000000..9433d582c
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/proteus/engineering/augmentedCapacitorReservoir.py
@@ -0,0 +1,345 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Proteus"
+ self.sub = "Proteus Engineering - Augmented Capacitor Reservoir"
+ self.skill = "Gallente Engineering Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to drone MWD speed per level
+
+ def test_gallenteEngineeringSystems_maxVelocity_droneCombat(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Hobgoblin I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_maxVelocity_droneLogistic(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Light Armor Maintenance Bot I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_maxVelocity_droneEwar(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Berserker TP-900"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_maxVelocity_droneCapDrain(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Infiltrator EV-600"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_maxVelocity_droneWeb(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Berserker SW-900"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_maxVelocity_droneOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Mining Drone I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 7.5% bonus to drone hitpoints per level
+
+ def test_gallenteEngineeringSystems_hp_droneCombat(self):
+ self.buildTested = 0
+ item = "Bouncer I"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos += self.getItemAttr(layer, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_hp_droneLogistic(self):
+ self.buildTested = 0
+ item = "Medium Armor Maintenance Bot I"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos += self.getItemAttr(layer, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_hp_droneEwar(self):
+ self.buildTested = 0
+ item = "Infiltrator TD-600"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos += self.getItemAttr(layer, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_hp_droneCapDrain(self):
+ self.buildTested = 0
+ item = "Acolyte EV-300"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos += self.getItemAttr(layer, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_hp_droneWeb(self):
+ self.buildTested = 0
+ item = "Berserker SW-900"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos += self.getItemAttr(layer, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_hp_droneOther(self):
+ self.buildTested = 0
+ item = "Harvester Mining Drone"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos += self.getItemAttr(layer, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 2.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +100 m3 dronebay
+
+ def test_static_droneCapacity_ship(self):
+ self.buildTested = 0
+ attr = "droneCapacity"
+ iIngame = 0.0
+ fIngame = 100.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +25 MBit/s drone bandwidth
+
+ def test_static_droneBandwidth_ship(self):
+ self.buildTested = 0
+ attr = "droneBandwidth"
+ iIngame = 0.0
+ fIngame = 25.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 5341000.0
+ fIngame = 6541000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1095 MW powergrid
+
+ def test_static_powerOutput_ship(self):
+ self.buildTested = 0
+ attr = "powerOutput"
+ iIngame = 0.0
+ fIngame = 1095.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400 GJ capacitor capacity
+
+ def test_static_capacitorCapacity_ship(self):
+ self.buildTested = 0
+ attr = "capacitorCapacity"
+ iIngame = 100.0
+ fIngame = 1500.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +415 seconds capacitor recharge time
+
+ def test_static_rechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "rechargeRate"
+ iIngame = 10000.0
+ fIngame = 425000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/proteus/engineering/capacitorRegenerationMatrix.py b/eos/tests/typeTests/ships/strategicCruisers/proteus/engineering/capacitorRegenerationMatrix.py
new file mode 100755
index 000000000..8a41087ea
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/proteus/engineering/capacitorRegenerationMatrix.py
@@ -0,0 +1,141 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Proteus"
+ self.sub = "Proteus Engineering - Capacitor Regeneration Matrix"
+ self.skill = "Gallente Engineering Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% reduction in capacitor recharge rate per level
+
+ def test_gallenteEngineeringSystems_rechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "rechargeRate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 2.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 5341000.0
+ fIngame = 6541000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1050 MW powergrid
+
+ def test_static_powerOutput_ship(self):
+ self.buildTested = 0
+ attr = "powerOutput"
+ iIngame = 0.0
+ fIngame = 1050.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1850 GJ capacitor capacity
+
+ def test_static_capacitorCapacity_ship(self):
+ self.buildTested = 0
+ attr = "capacitorCapacity"
+ iIngame = 100.0
+ fIngame = 1950.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +415 seconds capacitor recharge time
+
+ def test_static_rechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "rechargeRate"
+ iIngame = 10000.0
+ fIngame = 425000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/proteus/engineering/powerCoreMultiplier.py b/eos/tests/typeTests/ships/strategicCruisers/proteus/engineering/powerCoreMultiplier.py
new file mode 100755
index 000000000..5ef90e860
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/proteus/engineering/powerCoreMultiplier.py
@@ -0,0 +1,141 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Proteus"
+ self.sub = "Proteus Engineering - Power Core Multiplier"
+ self.skill = "Gallente Engineering Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to power output per level
+
+ def test_gallenteEngineeringSystems_powerOutput_ship(self):
+ self.buildTested = 0
+ attr = "powerOutput"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 2.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 5341000.0
+ fIngame = 6541000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1165 MW powergrid
+
+ def test_static_powerOutput_ship(self):
+ self.buildTested = 0
+ attr = "powerOutput"
+ iIngame = 0.0
+ fIngame = 1165.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400 GJ capacitor capacity
+
+ def test_static_capacitorCapacity_ship(self):
+ self.buildTested = 0
+ attr = "capacitorCapacity"
+ iIngame = 100.0
+ fIngame = 1500.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +415 seconds capacitor recharge time
+
+ def test_static_rechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "rechargeRate"
+ iIngame = 10000.0
+ fIngame = 425000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/proteus/engineering/supplementalCoolantInjector.py b/eos/tests/typeTests/ships/strategicCruisers/proteus/engineering/supplementalCoolantInjector.py
new file mode 100755
index 000000000..84808a661
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/proteus/engineering/supplementalCoolantInjector.py
@@ -0,0 +1,506 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Proteus"
+ self.sub = "Proteus Engineering - Supplemental Coolant Injector"
+ self.skill = "Gallente Engineering Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% Reduction in the amount of heat damage absorbed by modules per level
+
+ def test_gallenteEngineeringSystems_heatDamage_moduleAfterburner(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "10MN MicroWarpdrive I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_heatDamage_moduleArmorHardener(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Armor Explosive Hardener I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_heatDamage_moduleRemoteArmorRepairer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Medium Remote Armor Repair System I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_heatDamage_moduleArmorRepairer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Armor Repairer I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_heatDamage_moduleCapacitorBooster(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Capacitor Booster I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_heatDamage_moduleECCM(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "ECCM - Omni I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_heatDamage_moduleECM(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "ECM - White Noise Generator I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_heatDamage_moduleEnergyDestabilizer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Energy Neutralizer I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_heatDamage_moduleEnergyTransferArray(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Large Energy Transfer Array I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_heatDamage_moduleEnergyVampire(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Nosferatu I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_heatDamage_moduleEnergyWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Mega Pulse Laser I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_heatDamage_moduleHullRepairUnit(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Hull Repairer I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_heatDamage_moduleHybridWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "350mm Railgun I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_heatDamage_moduleMissileLauncherAssault(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_heatDamage_moduleMissileLauncherCitadel(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Citadel Torpedo Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_heatDamage_moduleMissileLauncherCruise(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Cruise Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_heatDamage_moduleMissileLauncherHeavy(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_heatDamage_moduleMissileLauncherHeavyAssault(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_heatDamage_moduleMissileLauncherRocket(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Rocket Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_heatDamage_moduleMissileLauncherSiege(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Siege Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_heatDamage_moduleMissileLauncherStandard(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Standard Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_heatDamage_moduleProjectileWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Dual 180mm AutoCannon I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_heatDamage_moduleShieldBooster(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Shield Booster I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_heatDamage_moduleShieldHardener(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Photon Scattering Field I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_heatDamage_moduleShieldTransporter(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Shield Transporter I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_heatDamage_moduleStasisWeb(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Stasis Webifier I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteEngineeringSystems_heatDamage_moduleWarpScrambler(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Warp Scrambler I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 2.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 5341000.0
+ fIngame = 6541000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1095 MW powergrid
+
+ def test_static_powerOutput_ship(self):
+ self.buildTested = 0
+ attr = "powerOutput"
+ iIngame = 0.0
+ fIngame = 1095.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400 GJ capacitor capacity
+
+ def test_static_capacitorCapacity_ship(self):
+ self.buildTested = 0
+ attr = "capacitorCapacity"
+ iIngame = 100.0
+ fIngame = 1500.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +415 seconds capacitor recharge time
+
+ def test_static_rechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "rechargeRate"
+ iIngame = 10000.0
+ fIngame = 425000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/proteus/hull.py b/eos/tests/typeTests/ships/strategicCruisers/proteus/hull.py
new file mode 100755
index 000000000..a9faad822
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/proteus/hull.py
@@ -0,0 +1,414 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Proteus"
+
+ # Gallente Strategic Cruiser Skill Bonus:
+ # 5% Reduction in the amount of heat damage absorbed by modules per level
+
+ def test_gallenteStrategicCruiser_heatDamage_moduleAfterburner(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "1MN Afterburner I"
+ skill = "Gallente Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteStrategicCruiser_heatDamage_moduleArmorHardener(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Armor Kinetic Hardener I"
+ skill = "Gallente Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteStrategicCruiser_heatDamage_moduleArmorRepairProjector(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Large Remote Armor Repair System I"
+ skill = "Gallente Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteStrategicCruiser_heatDamage_moduleArmorRepairer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Large Armor Repairer I"
+ skill = "Gallente Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteStrategicCruiser_heatDamage_moduleCapacitorBooster(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Capacitor Booster I"
+ skill = "Gallente Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteStrategicCruiser_heatDamage_moduleECCM(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "ECCM - Magnetometric I"
+ skill = "Gallente Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteStrategicCruiser_heatDamage_moduleECM(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "ECM - Phase Inverter I"
+ skill = "Gallente Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteStrategicCruiser_heatDamage_moduleEnergyDestabilizer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Medium Energy Neutralizer I"
+ skill = "Gallente Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteStrategicCruiser_heatDamage_moduleEnergyTransferArray(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Energy Transfer Array I"
+ skill = "Gallente Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteStrategicCruiser_heatDamage_moduleEnergyVampire(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Nosferatu I"
+ skill = "Gallente Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteStrategicCruiser_heatDamage_moduleEnergyWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Dual Light Pulse Laser I"
+ skill = "Gallente Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteStrategicCruiser_heatDamage_moduleHullRepairer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Hull Repairer I"
+ skill = "Gallente Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteStrategicCruiser_heatDamage_moduleHybridWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Electron Blaster Cannon I"
+ skill = "Gallente Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteStrategicCruiser_heatDamage_moduleMissileLauncherAssault(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Assault Missile Launcher I"
+ skill = "Gallente Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteStrategicCruiser_heatDamage_moduleMissileLauncherCitadel(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Citadel Torpedo Launcher I"
+ skill = "Gallente Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteStrategicCruiser_heatDamage_moduleMissileLauncherCruise(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Cruise Missile Launcher I"
+ skill = "Gallente Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteStrategicCruiser_heatDamage_moduleMissileLauncherHeavy(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Missile Launcher I"
+ skill = "Gallente Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteStrategicCruiser_heatDamage_moduleMissileLauncherHeavyAssault(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Assault Missile Launcher I"
+ skill = "Gallente Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteStrategicCruiser_heatDamage_moduleMissileLauncherRocket(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Rocket Launcher I"
+ skill = "Gallente Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteStrategicCruiser_heatDamage_moduleMissileLauncherSiege(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Siege Missile Launcher I"
+ skill = "Gallente Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteStrategicCruiser_heatDamage_moduleMissileLauncherStandard(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Standard Missile Launcher I"
+ skill = "Gallente Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteStrategicCruiser_heatDamage_moduleProjectileWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "720mm Howitzer Artillery I"
+ skill = "Gallente Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteStrategicCruiser_heatDamage_moduleShieldBooster(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Medium Shield Booster I"
+ skill = "Gallente Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteStrategicCruiser_heatDamage_moduleShieldHardener(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Ballistic Deflection Field I"
+ skill = "Gallente Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteStrategicCruiser_heatDamage_moduleShieldTransporter(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Medium Shield Transporter I"
+ skill = "Gallente Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteStrategicCruiser_heatDamage_moduleStasisWeb(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Stasis Webifier I"
+ skill = "Gallente Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteStrategicCruiser_heatDamage_moduleWarpScrambler(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Warp Scrambler I"
+ skill = "Gallente Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/proteus/offensive/__init__.py b/eos/tests/typeTests/ships/strategicCruisers/proteus/offensive/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/strategicCruisers/proteus/offensive/covertReconfiguration.py b/eos/tests/typeTests/ships/strategicCruisers/proteus/offensive/covertReconfiguration.py
new file mode 100755
index 000000000..f533ba448
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/proteus/offensive/covertReconfiguration.py
@@ -0,0 +1,178 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Proteus"
+ self.sub = "Proteus Offensive - Covert Reconfiguration"
+ self.skill = "Gallente Offensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to medium hybrid turret damage per level
+
+ def test_gallenteOffensiveSystems_damageMultiplier_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Electron Blaster I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteOffensiveSystems_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Light Neutron Blaster I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 100% reduction in Cloaking Device CPU use
+
+ def test_static_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ iIngame = 30.0
+ fIngame = 0.0
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Large Capacitor Battery I"
+ iIngame = 100.0
+ fIngame = 100.0
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Can use covert jump portal
+
+ def test_static_jumpHarmonics_ship(self):
+ self.buildTested = 0
+ attr = "jumpHarmonics"
+ ingame = 5.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # 5 seconds cloak reactivation delay
+
+ def test_static_moduleReactivationDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ iIngame = 30000.0
+ fIngame = 5000.0
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Cynosural Field Generator I"
+ iIngame = 30000.0
+ fIngame = 30000.0
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 4.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +800000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 5341000.0
+ fIngame = 6141000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/proteus/offensive/dissonicEncodingPlatform.py b/eos/tests/typeTests/ships/strategicCruisers/proteus/offensive/dissonicEncodingPlatform.py
new file mode 100755
index 000000000..308cac57b
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/proteus/offensive/dissonicEncodingPlatform.py
@@ -0,0 +1,176 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Proteus"
+ self.sub = "Proteus Offensive - Dissonic Encoding Platform"
+ self.skill = "Gallente Offensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to medium hybrid turret damage per level
+
+ def test_gallenteOffensiveSystems_damageMultiplier_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Ion Blaster I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteOffensiveSystems_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Ion Blaster Cannon I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to medium hybrid turret falloff per level
+
+ def test_gallenteOffensiveSystems_falloff_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "Heavy Neutron Blaster I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteOffensiveSystems_falloff_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "75mm Gatling Rail I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 7.5% bonus to medium hybrid turret tracking per level
+
+ def test_gallenteOffensiveSystems_trackingSpeed_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "250mm Railgun I"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteOffensiveSystems_trackingSpeed_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "125mm Railgun I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +800000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 5341000.0
+ fIngame = 6141000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/proteus/offensive/droneSynthesisProjector.py b/eos/tests/typeTests/ships/strategicCruisers/proteus/offensive/droneSynthesisProjector.py
new file mode 100755
index 000000000..fea4e08c9
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/proteus/offensive/droneSynthesisProjector.py
@@ -0,0 +1,278 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Proteus"
+ self.sub = "Proteus Offensive - Drone Synthesis Projector"
+ self.skill = "Gallente Offensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to medium hybrid turret damage per level
+
+ def test_gallenteOffensiveSystems_damageMultiplier_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual 150mm Railgun I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteOffensiveSystems_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual 250mm Railgun I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to drone damage per level
+
+ def test_gallenteOffensiveSystems_damageMultiplier_droneCombat(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Valkyrie I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteOffensiveSystems_damageMultiplier_other(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Gyrostabilizer I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 7.5% bonus to drone hitpoints per level
+
+ def test_gallenteOffensiveSystems_hp_droneCombat(self):
+ self.buildTested = 0
+ item = "Acolyte I"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos += self.getItemAttr(layer, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteOffensiveSystems_hp_droneLogistic(self):
+ self.buildTested = 0
+ item = "Light Armor Maintenance Bot I"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos += self.getItemAttr(layer, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteOffensiveSystems_hp_droneEwar(self):
+ self.buildTested = 0
+ item = "Praetor TD-900"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos += self.getItemAttr(layer, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteOffensiveSystems_hp_droneCapDrain(self):
+ self.buildTested = 0
+ item = "Infiltrator EV-600"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos += self.getItemAttr(layer, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteOffensiveSystems_hp_droneWeb(self):
+ self.buildTested = 0
+ item = "Berserker SW-900"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos += self.getItemAttr(layer, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteOffensiveSystems_hp_droneNoSkillrqDrones(self):
+ self.buildTested = 0
+ item = "Civilian Mining Drone"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos += self.getItemAttr(layer, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 3.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +125 m3 dronebay
+
+ def test_static_droneCapacity_ship(self):
+ self.buildTested = 0
+ attr = "droneCapacity"
+ iIngame = 0.0
+ fIngame = 125.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +75 MBit/s drone bandwidth
+
+ def test_static_droneBandwidth_ship(self):
+ self.buildTested = 0
+ attr = "droneBandwidth"
+ iIngame = 0.0
+ fIngame = 75.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +800000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 5341000.0
+ fIngame = 6141000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/proteus/offensive/hybridPropulsionArmature.py b/eos/tests/typeTests/ships/strategicCruisers/proteus/offensive/hybridPropulsionArmature.py
new file mode 100755
index 000000000..53418de13
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/proteus/offensive/hybridPropulsionArmature.py
@@ -0,0 +1,173 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Proteus"
+ self.sub = "Proteus Offensive - Hybrid Propulsion Armature"
+ self.skill = "Gallente Offensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to medium hybrid turret damage per level
+
+ def test_gallenteOffensiveSystems_damageMultiplier_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Electron Blaster I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteOffensiveSystems_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Light Electron Blaster I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to medium hybrid turret falloff per level
+
+ def test_gallenteOffensiveSystems_falloff_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "250mm Railgun I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteOffensiveSystems_falloff_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "Dual 250mm Railgun I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +75 m3 dronebay
+
+ def test_static_droneCapacity_ship(self):
+ self.buildTested = 0
+ attr = "droneCapacity"
+ iIngame = 0.0
+ fIngame = 75.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +50 MBit/s drone bandwidth
+
+ def test_static_droneBandwidth_ship(self):
+ self.buildTested = 0
+ attr = "droneBandwidth"
+ iIngame = 0.0
+ fIngame = 50.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +800000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 5341000.0
+ fIngame = 6141000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/proteus/propulsion/__init__.py b/eos/tests/typeTests/ships/strategicCruisers/proteus/propulsion/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/strategicCruisers/proteus/propulsion/gravitationalCapacitor.py b/eos/tests/typeTests/ships/strategicCruisers/proteus/propulsion/gravitationalCapacitor.py
new file mode 100755
index 000000000..8d83c565d
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/proteus/propulsion/gravitationalCapacitor.py
@@ -0,0 +1,114 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Proteus"
+ self.sub = "Proteus Propulsion - Gravitational Capacitor"
+ self.skill = "Gallente Propulsion Systems"
+
+ # Subsystem Skill Bonus:
+ # 15% bonus to warp speed per level
+
+ def test_gallentePropulsionSystems_baseWarpSpeed_ship(self):
+ self.buildTested = 0
+ attr = "baseWarpSpeed"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 15% reduction in capacitor need when initiating warp per level
+
+ def test_gallentePropulsionSystems_warpCapacitorNeed_ship(self):
+ self.buildTested = 0
+ attr = "warpCapacitorNeed"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 5341000.0
+ fIngame = 6741000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +160 m/s speed
+
+ def test_static_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ iIngame = 10.0
+ fIngame = 170.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Set inertia modifier to 0.527
+
+ def test_static_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ ingame = 0.527
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/proteus/propulsion/interdictionNullifier.py b/eos/tests/typeTests/ships/strategicCruisers/proteus/propulsion/interdictionNullifier.py
new file mode 100755
index 000000000..baa38ddb8
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/proteus/propulsion/interdictionNullifier.py
@@ -0,0 +1,108 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Proteus"
+ self.sub = "Proteus Propulsion - Interdiction Nullifier"
+ self.skill = "Gallente Propulsion Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% increased agility per level
+
+ def test_gallentePropulsionSystems_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # Immunity to non-targeted interdiction
+
+ def test_static_warpBubbleImmune_ship(self):
+ self.buildTested = 0
+ attr = "warpBubbleImmune"
+ ingame = 1.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 5341000.0
+ fIngame = 6741000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +140 m/s speed
+
+ def test_static_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ iIngame = 10.0
+ fIngame = 150.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Set inertia modifier to 0.762
+
+ def test_static_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ ingame = 0.762
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/proteus/propulsion/localizedInjectors.py b/eos/tests/typeTests/ships/strategicCruisers/proteus/propulsion/localizedInjectors.py
new file mode 100755
index 000000000..d99aaea5e
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/proteus/propulsion/localizedInjectors.py
@@ -0,0 +1,144 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Proteus"
+ self.sub = "Proteus Propulsion - Localized Injectors"
+ self.skill = "Gallente Propulsion Systems"
+
+ # Subsystem Skill Bonus:
+ # 15% reduction in afterburner capacitor consumption per level
+
+ def test_gallentePropulsionSystems_capacitorNeed_moduleAfterburner(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "100MN Afterburner I"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallentePropulsionSystems_capacitorNeed_moduleAfterburnerCivilian(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Afterburner"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 15% reduction in microwarpdrive capacitor consumption per level
+
+ def test_gallentePropulsionSystems_capacitorNeed_moduleMWD(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "10MN MicroWarpdrive I"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallentePropulsionSystems_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Passive Targeter I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 5341000.0
+ fIngame = 6741000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +180 m/s speed
+
+ def test_static_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ iIngame = 10.0
+ fIngame = 190.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Set inertia modifier to 0.586
+
+ def test_static_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ ingame = 0.586
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/proteus/propulsion/wakeLimiter.py b/eos/tests/typeTests/ships/strategicCruisers/proteus/propulsion/wakeLimiter.py
new file mode 100755
index 000000000..4cf1eced4
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/proteus/propulsion/wakeLimiter.py
@@ -0,0 +1,113 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Proteus"
+ self.sub = "Proteus Propulsion - Wake Limiter"
+ self.skill = "Gallente Propulsion Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% reduction in microwarpdrive signature radius penalty per level
+
+ def test_gallentePropulsionSystems_signatureRadiusBonus_moduleMWD(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "1MN MicroWarpdrive I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallentePropulsionSystems_signatureRadiusBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "Inertia Stabilizers I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 5341000.0
+ fIngame = 6741000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +140 m/s speed
+
+ def test_static_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ iIngame = 10.0
+ fIngame = 150.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Set inertia modifier to 0.586
+
+ def test_static_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ ingame = 0.586
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/tengu/__init__.py b/eos/tests/typeTests/ships/strategicCruisers/tengu/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/strategicCruisers/tengu/defensive/__init__.py b/eos/tests/typeTests/ships/strategicCruisers/tengu/defensive/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/strategicCruisers/tengu/defensive/adaptiveShielding.py b/eos/tests/typeTests/ships/strategicCruisers/tengu/defensive/adaptiveShielding.py
new file mode 100755
index 000000000..fefca3f95
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/tengu/defensive/adaptiveShielding.py
@@ -0,0 +1,296 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Tengu"
+ self.sub = "Tengu Defensive - Adaptive Shielding"
+ self.skill = "Caldari Defensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to all shield resistances per level
+
+ def test_caldariDefensiveSystems_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariDefensiveSystems_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariDefensiveSystems_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariDefensiveSystems_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to shield transporter effectiveness per level
+
+ def test_caldariDefensiveSystems_shieldBonus_moduleShieldTransporter(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Medium Shield Transporter I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariDefensiveSystems_shieldBonus_moduleShieldTransporterCapital(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Capital Shield Transporter I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariDefensiveSystems_shieldBonus_moduleShieldTransporterCivilian(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Civilian Remote Shield Transporter"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariDefensiveSystems_shieldBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Medium Shield Booster I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 8201000.0
+ fIngame = 9601000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 165 m signature radius
+
+ def test_static_signatureRadius_ship(self):
+ self.buildTested = 0
+ attr = "signatureRadius"
+ ingame = 165.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # 420 m3 cargohold capacity
+
+ def test_static_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ ingame = 420.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship armor resistances
+
+ def test_static_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ ingame = 0.5
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ ingame = 0.9
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ ingame = 0.375
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ ingame = 0.1375
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship shield resistances
+
+ def test_static_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ ingame = 1.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ ingame = 0.5
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ ingame = 0.3
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ ingame = 0.2
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # +2150 armor hp
+
+ def test_static_armorHP_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ iIngame = 100.0
+ fIngame = 2250.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +3250 shield capacity
+
+ def test_static_shieldCapacity_ship(self):
+ self.buildTested = 0
+ attr = "shieldCapacity"
+ iIngame = 100.0
+ fIngame = 3350.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +2160 seconds shield recharge rate
+
+ def test_static_shieldRechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "shieldRechargeRate"
+ iIngame = 10000.0
+ fIngame = 2170000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/tengu/defensive/amplificationNode.py b/eos/tests/typeTests/ships/strategicCruisers/tengu/defensive/amplificationNode.py
new file mode 100755
index 000000000..ce907aa0f
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/tengu/defensive/amplificationNode.py
@@ -0,0 +1,241 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Tengu"
+ self.sub = "Tengu Defensive - Amplification Node"
+ self.skill = "Caldari Defensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to shield booster effectiveness per level
+
+ def test_caldariDefensiveSystems_shieldBonus_moduleShieldBooster(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "X-Large Shield Booster I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariDefensiveSystems_shieldBonus_moduleShieldBoosterCapital(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Capital Shield Booster I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariDefensiveSystems_shieldBonus_moduleShieldBoosterCivilian(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Civilian Shield Booster I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariDefensiveSystems_shieldBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Small Shield Transporter I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 2.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 8201000.0
+ fIngame = 9601000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 150 m signature radius
+
+ def test_static_signatureRadius_ship(self):
+ self.buildTested = 0
+ attr = "signatureRadius"
+ ingame = 150.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # 440 m3 cargohold capacity
+
+ def test_static_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ ingame = 440.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship armor resistances
+
+ def test_static_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ ingame = 0.5
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ ingame = 0.9
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ ingame = 0.375
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ ingame = 0.1375
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship shield resistances
+
+ def test_static_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ ingame = 1.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ ingame = 0.5
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ ingame = 0.3
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ ingame = 0.2
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # +2350 armor hp
+
+ def test_static_armorHP_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ iIngame = 100.0
+ fIngame = 2450.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +3550 shield capacity
+
+ def test_static_shieldCapacity_ship(self):
+ self.buildTested = 0
+ attr = "shieldCapacity"
+ iIngame = 100.0
+ fIngame = 3650.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1620 seconds shield recharge rate
+
+ def test_static_shieldRechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "shieldRechargeRate"
+ iIngame = 10000.0
+ fIngame = 1630000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/tengu/defensive/supplementalScreening.py b/eos/tests/typeTests/ships/strategicCruisers/tengu/defensive/supplementalScreening.py
new file mode 100755
index 000000000..9235c4566
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/tengu/defensive/supplementalScreening.py
@@ -0,0 +1,198 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Tengu"
+ self.sub = "Tengu Defensive - Supplemental Screening"
+ self.skill = "Caldari Defensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to shield hitpoints per level
+
+ def test_caldariDefensiveSystems_shieldCapacity_ship(self):
+ self.buildTested = 0
+ attr = "shieldCapacity"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 2.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 8201000.0
+ fIngame = 9601000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 157 m signature radius
+
+ def test_static_signatureRadius_ship(self):
+ self.buildTested = 0
+ attr = "signatureRadius"
+ ingame = 157.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # 410 m3 cargohold capacity
+
+ def test_static_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ ingame = 410.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship armor resistances
+
+ def test_static_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ ingame = 0.5
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ ingame = 0.9
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ ingame = 0.375
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ ingame = 0.1375
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship shield resistances
+
+ def test_static_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ ingame = 1.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ ingame = 0.5
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ ingame = 0.3
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ ingame = 0.2
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # +2500 armor hp
+
+ def test_static_armorHP_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ iIngame = 100.0
+ fIngame = 2600.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +3750 shield capacity
+
+ def test_static_shieldCapacity_ship(self):
+ self.buildTested = 0
+ attr = "shieldCapacity"
+ iIngame = 100.0
+ fIngame = 3850.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +2430 seconds shield recharge rate
+
+ def test_static_shieldRechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "shieldRechargeRate"
+ iIngame = 10000.0
+ fIngame = 2440000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/tengu/defensive/warfareProcessor.py b/eos/tests/typeTests/ships/strategicCruisers/tengu/defensive/warfareProcessor.py
new file mode 100755
index 000000000..9afba5efd
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/tengu/defensive/warfareProcessor.py
@@ -0,0 +1,240 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Tengu"
+ self.sub = "Tengu Defensive - Warfare Processor"
+ self.skill = "Caldari Defensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to effectiveness of Siege Warfare Links per subsystem skill level
+
+ def test_caldariDefensiveSystems_commandBonus_moduleGangCoordinatorSkillrqSiegeWarfare(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Siege Warfare Link - Shield Harmonizing I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariDefensiveSystems_commandBonus_moduleGangCoordinatorSkillrqOther(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Information Warfare Link - Sensor Integrity I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 99% reduction in Warfare Link module CPU need
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Information Warfare Link - Electronic Superiority I"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 8201000.0
+ fIngame = 9601000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 150 m signature radius
+
+ def test_static_signatureRadius_ship(self):
+ self.buildTested = 0
+ attr = "signatureRadius"
+ ingame = 150.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # 290 m3 cargohold capacity
+
+ def test_static_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ ingame = 290.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship armor resistances
+
+ def test_static_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ ingame = 0.5
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ ingame = 0.9
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ ingame = 0.375
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ ingame = 0.1375
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Assign ship shield resistances
+
+ def test_static_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ ingame = 1.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ ingame = 0.5
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ ingame = 0.3
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ ingame = 0.2
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # +2150 armor hp
+
+ def test_static_armorHP_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ iIngame = 100.0
+ fIngame = 2250.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +3250 shield capacity
+
+ def test_static_shieldCapacity_ship(self):
+ self.buildTested = 0
+ attr = "shieldCapacity"
+ iIngame = 100.0
+ fIngame = 3350.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1620 seconds shield recharge rate
+
+ def test_static_shieldRechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "shieldRechargeRate"
+ iIngame = 10000.0
+ fIngame = 1630000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/tengu/electronics/__init__.py b/eos/tests/typeTests/ships/strategicCruisers/tengu/electronics/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/strategicCruisers/tengu/electronics/cpuEfficiencyGate.py b/eos/tests/typeTests/ships/strategicCruisers/tengu/electronics/cpuEfficiencyGate.py
new file mode 100755
index 000000000..cb5f89c6f
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/tengu/electronics/cpuEfficiencyGate.py
@@ -0,0 +1,163 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Tengu"
+ self.sub = "Tengu Electronics - CPU Efficiency Gate"
+ self.skill = "Caldari Electronic Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to CPU per level
+
+ def test_caldariElectronicSystems_cpuOutput_ship(self):
+ self.buildTested = 0
+ attr = "cpuOutput"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 3.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 8201000.0
+ fIngame = 9401000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +420 tf cpu
+
+ def test_static_cpuOutput_ship(self):
+ self.buildTested = 0
+ attr = "cpuOutput"
+ iIngame = 0.0
+ fIngame = 420.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +65 km lock range
+
+ def test_static_maxTargetRange_ship(self):
+ self.buildTested = 0
+ attr = "maxTargetRange"
+ iIngame = 0.0
+ fIngame = 65000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +210 mm scan resolution
+
+ def test_static_scanResolution_ship(self):
+ self.buildTested = 0
+ attr = "scanResolution"
+ iIngame = 0.0
+ fIngame = 210.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add 18 gravimetric sensor strength
+
+ def test_static_scanGravimetricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrength"
+ iIngame = 0.0
+ fIngame = 18.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanLadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanLadarStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanMagnetometricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanRadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanRadarStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/tengu/electronics/dissolutionSequencer.py b/eos/tests/typeTests/ships/strategicCruisers/tengu/electronics/dissolutionSequencer.py
new file mode 100755
index 000000000..ba6c81536
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/tengu/electronics/dissolutionSequencer.py
@@ -0,0 +1,179 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Tengu"
+ self.sub = "Tengu Electronics - Dissolution Sequencer"
+ self.skill = "Caldari Electronic Systems"
+
+ # Subsystem Skill Bonus:
+ # 15% bonus to ship sensor strength per level
+
+ def test_caldariElectronicSystems_scanGravimetricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrength"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to targeting range per level
+
+ def test_caldariElectronicSystems_maxTargetRange_ship(self):
+ self.buildTested = 0
+ attr = "maxTargetRange"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 3.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 8201000.0
+ fIngame = 9401000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +475 tf cpu
+
+ def test_static_cpuOutput_ship(self):
+ self.buildTested = 0
+ attr = "cpuOutput"
+ iIngame = 0.0
+ fIngame = 475.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +75 km lock range
+
+ def test_static_maxTargetRange_ship(self):
+ self.buildTested = 0
+ attr = "maxTargetRange"
+ iIngame = 0.0
+ fIngame = 75000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +235 mm scan resolution
+
+ def test_static_scanResolution_ship(self):
+ self.buildTested = 0
+ attr = "scanResolution"
+ iIngame = 0.0
+ fIngame = 235.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add 20 gravimetric sensor strength
+
+ def test_static_scanGravimetricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrength"
+ iIngame = 0.0
+ fIngame = 20.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanLadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanLadarStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanMagnetometricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanRadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanRadarStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/tengu/electronics/emergentLocusAnalyzer.py b/eos/tests/typeTests/ships/strategicCruisers/tengu/electronics/emergentLocusAnalyzer.py
new file mode 100755
index 000000000..08601024a
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/tengu/electronics/emergentLocusAnalyzer.py
@@ -0,0 +1,239 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Tengu"
+ self.sub = "Tengu Electronics - Emergent Locus Analyzer"
+ self.skill = "Caldari Electronic Systems"
+
+ # Subsystem Skill Bonus:
+ # 10% increase to scan strength of probes per level
+
+ def test_caldariElectronicSystems_baseSensorStrength_chargeScannerProbe(self):
+ self.buildTested = 0
+ attr = "baseSensorStrength"
+ item = "Combat Scanner Probe I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 20% bonus to range of tractor beams per level
+
+ def test_caldariElectronicSystems_maxRange_moduleTractorBeam(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Small Tractor Beam I"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariElectronicSystems_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Target Painter I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 20% bonus to velocity of tractor beams per level
+
+ def test_caldariElectronicSystems_maxTractorVelocity_moduleTractorBeam(self):
+ self.buildTested = 0
+ attr = "maxTractorVelocity"
+ item = "Small Tractor Beam I"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # -99% reduced CPU need for Scan Probe Launchers
+
+ def test_static_cpu_moduleScanProbeLauncher(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Core Probe Launcher I"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Rocket Launcher I"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 4.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 8201000.0
+ fIngame = 9401000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +475 tf cpu
+
+ def test_static_cpuOutput_ship(self):
+ self.buildTested = 0
+ attr = "cpuOutput"
+ iIngame = 0.0
+ fIngame = 475.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +65 km lock range
+
+ def test_static_maxTargetRange_ship(self):
+ self.buildTested = 0
+ attr = "maxTargetRange"
+ iIngame = 0.0
+ fIngame = 65000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +250 mm scan resolution
+
+ def test_static_scanResolution_ship(self):
+ self.buildTested = 0
+ attr = "scanResolution"
+ iIngame = 0.0
+ fIngame = 250.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add 20 gravimetric sensor strength
+
+ def test_static_scanGravimetricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrength"
+ iIngame = 0.0
+ fIngame = 20.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanLadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanLadarStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanMagnetometricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanRadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanRadarStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/tengu/electronics/obfuscationManifold.py b/eos/tests/typeTests/ships/strategicCruisers/tengu/electronics/obfuscationManifold.py
new file mode 100755
index 000000000..c1636e0c4
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/tengu/electronics/obfuscationManifold.py
@@ -0,0 +1,192 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Tengu"
+ self.sub = "Tengu Electronics - Obfuscation Manifold"
+ self.skill = "Caldari Electronic Systems"
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to ECM target jammer optimal range per level
+
+ def test_caldariElectronicSystems_maxRange_moduleECM(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "ECM - Phase Inverter I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariElectronicSystems_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "ECCM Projector I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariElectronicSystems_falloff_moduleECM(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "ECM - Multispectral Jammer I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 4.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 8201000.0
+ fIngame = 9401000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +460 tf cpu
+
+ def test_static_cpuOutput_ship(self):
+ self.buildTested = 0
+ attr = "cpuOutput"
+ iIngame = 0.0
+ fIngame = 460.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +70 km lock range
+
+ def test_static_maxTargetRange_ship(self):
+ self.buildTested = 0
+ attr = "maxTargetRange"
+ iIngame = 0.0
+ fIngame = 70000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +250 mm scan resolution
+
+ def test_static_scanResolution_ship(self):
+ self.buildTested = 0
+ attr = "scanResolution"
+ iIngame = 0.0
+ fIngame = 250.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add 16 gravimetric sensor strength
+
+ def test_static_scanGravimetricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrength"
+ iIngame = 0.0
+ fIngame = 16.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanLadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanLadarStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanMagnetometricStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_scanRadarStrength_ship(self):
+ self.buildTested = 0
+ attr = "scanRadarStrength"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/tengu/engineering/__init__.py b/eos/tests/typeTests/ships/strategicCruisers/tengu/engineering/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/strategicCruisers/tengu/engineering/augmentedCapacitorReservoir.py b/eos/tests/typeTests/ships/strategicCruisers/tengu/engineering/augmentedCapacitorReservoir.py
new file mode 100755
index 000000000..eb77bbc80
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/tengu/engineering/augmentedCapacitorReservoir.py
@@ -0,0 +1,141 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Tengu"
+ self.sub = "Tengu Engineering - Augmented Capacitor Reservoir"
+ self.skill = "Caldari Engineering Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to capacitor capacity per level
+
+ def test_caldariEngineeringSystems_capacitorCapacity_ship(self):
+ self.buildTested = 0
+ attr = "capacitorCapacity"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 2.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 8201000.0
+ fIngame = 9401000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +600 MW powergrid
+
+ def test_static_powerOutput_ship(self):
+ self.buildTested = 0
+ attr = "powerOutput"
+ iIngame = 0.0
+ fIngame = 600.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1225 GJ capacitor capacity
+
+ def test_static_capacitorCapacity_ship(self):
+ self.buildTested = 0
+ attr = "capacitorCapacity"
+ iIngame = 100.0
+ fIngame = 1325.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +415 seconds capacitor recharge time
+
+ def test_static_rechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "rechargeRate"
+ iIngame = 10000.0
+ fIngame = 425000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/tengu/engineering/capacitorRegenerationMatrix.py b/eos/tests/typeTests/ships/strategicCruisers/tengu/engineering/capacitorRegenerationMatrix.py
new file mode 100755
index 000000000..3f7428baf
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/tengu/engineering/capacitorRegenerationMatrix.py
@@ -0,0 +1,141 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Tengu"
+ self.sub = "Tengu Engineering - Capacitor Regeneration Matrix"
+ self.skill = "Caldari Engineering Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% reduction in capacitor recharge rate per level
+
+ def test_caldariEngineeringSystems_rechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "rechargeRate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 3.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 8201000.0
+ fIngame = 9401000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +825 MW powergrid
+
+ def test_static_powerOutput_ship(self):
+ self.buildTested = 0
+ attr = "powerOutput"
+ iIngame = 0.0
+ fIngame = 825.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +2100 GJ capacitor capacity
+
+ def test_static_capacitorCapacity_ship(self):
+ self.buildTested = 0
+ attr = "capacitorCapacity"
+ iIngame = 100.0
+ fIngame = 2200.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +415 seconds capacitor recharge time
+
+ def test_static_rechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "rechargeRate"
+ iIngame = 10000.0
+ fIngame = 425000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/tengu/engineering/powerCoreMultiplier.py b/eos/tests/typeTests/ships/strategicCruisers/tengu/engineering/powerCoreMultiplier.py
new file mode 100755
index 000000000..9674d4e3c
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/tengu/engineering/powerCoreMultiplier.py
@@ -0,0 +1,141 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Tengu"
+ self.sub = "Tengu Engineering - Power Core Multiplier"
+ self.skill = "Caldari Engineering Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to power output per level
+
+ def test_caldariEngineeringSystems_powerOutput_ship(self):
+ self.buildTested = 0
+ attr = "powerOutput"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 2.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 8201000.0
+ fIngame = 9401000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +555 MW powergrid
+
+ def test_static_powerOutput_ship(self):
+ self.buildTested = 0
+ attr = "powerOutput"
+ iIngame = 0.0
+ fIngame = 555.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1225 GJ capacitor capacity
+
+ def test_static_capacitorCapacity_ship(self):
+ self.buildTested = 0
+ attr = "capacitorCapacity"
+ iIngame = 100.0
+ fIngame = 1325.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +415 seconds capacitor recharge time
+
+ def test_static_rechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "rechargeRate"
+ iIngame = 10000.0
+ fIngame = 425000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/tengu/engineering/supplementalCoolantInjector.py b/eos/tests/typeTests/ships/strategicCruisers/tengu/engineering/supplementalCoolantInjector.py
new file mode 100755
index 000000000..a7dccd243
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/tengu/engineering/supplementalCoolantInjector.py
@@ -0,0 +1,506 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Tengu"
+ self.sub = "Tengu Engineering - Supplemental Coolant Injector"
+ self.skill = "Caldari Engineering Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% Reduction in the amount of heat damage absorbed by modules per level
+
+ def test_caldariEngineeringSystems_heatDamage_moduleAfterburner(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "1MN MicroWarpdrive I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariEngineeringSystems_heatDamage_moduleArmorHardener(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Armor Explosive Hardener I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariEngineeringSystems_heatDamage_moduleRemoteArmorRepairer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Large Remote Armor Repair System I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariEngineeringSystems_heatDamage_moduleArmorRepairer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Large Armor Repairer I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariEngineeringSystems_heatDamage_moduleCapacitorBooster(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Medium Capacitor Booster I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariEngineeringSystems_heatDamage_moduleECCM(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "ECCM - Ladar I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariEngineeringSystems_heatDamage_moduleECM(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "ECM - White Noise Generator I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariEngineeringSystems_heatDamage_moduleEnergyDestabilizer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Energy Neutralizer I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariEngineeringSystems_heatDamage_moduleEnergyTransferArray(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Large Energy Transfer Array I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariEngineeringSystems_heatDamage_moduleEnergyVampire(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Nosferatu I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariEngineeringSystems_heatDamage_moduleEnergyWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Gatling Pulse Laser I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariEngineeringSystems_heatDamage_moduleHullRepairUnit(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Hull Repairer I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariEngineeringSystems_heatDamage_moduleHybridWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "75mm Gatling Rail I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariEngineeringSystems_heatDamage_moduleMissileLauncherAssault(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariEngineeringSystems_heatDamage_moduleMissileLauncherCitadel(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Citadel Torpedo Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariEngineeringSystems_heatDamage_moduleMissileLauncherCruise(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Cruise Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariEngineeringSystems_heatDamage_moduleMissileLauncherHeavy(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariEngineeringSystems_heatDamage_moduleMissileLauncherHeavyAssault(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariEngineeringSystems_heatDamage_moduleMissileLauncherRocket(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Rocket Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariEngineeringSystems_heatDamage_moduleMissileLauncherSiege(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Siege Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariEngineeringSystems_heatDamage_moduleMissileLauncherStandard(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Standard Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariEngineeringSystems_heatDamage_moduleProjectileWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "800mm Repeating Artillery I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariEngineeringSystems_heatDamage_moduleShieldBooster(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Medium Shield Booster I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariEngineeringSystems_heatDamage_moduleShieldHardener(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Explosion Dampening Field I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariEngineeringSystems_heatDamage_moduleShieldTransporter(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Medium Shield Transporter I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariEngineeringSystems_heatDamage_moduleStasisWeb(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Stasis Webifier I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariEngineeringSystems_heatDamage_moduleWarpScrambler(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Warp Disruptor I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 3.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1200000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 8201000.0
+ fIngame = 9401000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +825 MW powergrid
+
+ def test_static_powerOutput_ship(self):
+ self.buildTested = 0
+ attr = "powerOutput"
+ iIngame = 0.0
+ fIngame = 825.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1225 GJ capacitor capacity
+
+ def test_static_capacitorCapacity_ship(self):
+ self.buildTested = 0
+ attr = "capacitorCapacity"
+ iIngame = 100.0
+ fIngame = 1325.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +415 seconds capacitor recharge time
+
+ def test_static_rechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "rechargeRate"
+ iIngame = 10000.0
+ fIngame = 425000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/tengu/hull.py b/eos/tests/typeTests/ships/strategicCruisers/tengu/hull.py
new file mode 100755
index 000000000..8a7522d22
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/tengu/hull.py
@@ -0,0 +1,414 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Tengu"
+
+ # Caldari Strategic Cruiser Skill Bonus:
+ # 5% Reduction in the amount of heat damage absorbed by modules per level
+
+ def test_caldariStrategicCruiser_heatDamage_moduleAfterburner(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "100MN Afterburner I"
+ skill = "Caldari Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariStrategicCruiser_heatDamage_moduleArmorHardener(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Armor Explosive Hardener I"
+ skill = "Caldari Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariStrategicCruiser_heatDamage_moduleArmorRepairProjector(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Remote Armor Repair System I"
+ skill = "Caldari Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariStrategicCruiser_heatDamage_moduleArmorRepairer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Medium Armor Repairer I"
+ skill = "Caldari Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariStrategicCruiser_heatDamage_moduleCapacitorBooster(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Capacitor Booster I"
+ skill = "Caldari Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariStrategicCruiser_heatDamage_moduleECCM(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "ECCM - Gravimetric I"
+ skill = "Caldari Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariStrategicCruiser_heatDamage_moduleECM(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "ECM - Ion Field Projector I"
+ skill = "Caldari Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariStrategicCruiser_heatDamage_moduleEnergyDestabilizer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Medium Energy Neutralizer I"
+ skill = "Caldari Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariStrategicCruiser_heatDamage_moduleEnergyTransferArray(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Energy Transfer Array I"
+ skill = "Caldari Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariStrategicCruiser_heatDamage_moduleEnergyVampire(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Nosferatu I"
+ skill = "Caldari Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariStrategicCruiser_heatDamage_moduleEnergyWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Dual Heavy Beam Laser I"
+ skill = "Caldari Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariStrategicCruiser_heatDamage_moduleHullRepairer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Hull Repairer I"
+ skill = "Caldari Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariStrategicCruiser_heatDamage_moduleHybridWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Dual 250mm Railgun I"
+ skill = "Caldari Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariStrategicCruiser_heatDamage_moduleMissileLauncherAssault(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Assault Missile Launcher I"
+ skill = "Caldari Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariStrategicCruiser_heatDamage_moduleMissileLauncherCitadel(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Citadel Torpedo Launcher I"
+ skill = "Caldari Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariStrategicCruiser_heatDamage_moduleMissileLauncherCruise(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Cruise Missile Launcher I"
+ skill = "Caldari Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariStrategicCruiser_heatDamage_moduleMissileLauncherHeavy(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Missile Launcher I"
+ skill = "Caldari Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariStrategicCruiser_heatDamage_moduleMissileLauncherHeavyAssault(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Assault Missile Launcher I"
+ skill = "Caldari Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariStrategicCruiser_heatDamage_moduleMissileLauncherRocket(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Rocket Launcher I"
+ skill = "Caldari Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariStrategicCruiser_heatDamage_moduleMissileLauncherSiege(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Siege Missile Launcher I"
+ skill = "Caldari Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariStrategicCruiser_heatDamage_moduleMissileLauncherStandard(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Standard Missile Launcher I"
+ skill = "Caldari Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariStrategicCruiser_heatDamage_moduleProjectileWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Dual 180mm AutoCannon I"
+ skill = "Caldari Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariStrategicCruiser_heatDamage_moduleShieldBooster(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "X-Large Shield Booster I"
+ skill = "Caldari Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariStrategicCruiser_heatDamage_moduleShieldHardener(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Invulnerability Field I"
+ skill = "Caldari Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariStrategicCruiser_heatDamage_moduleShieldTransporter(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Large Shield Transporter I"
+ skill = "Caldari Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariStrategicCruiser_heatDamage_moduleStasisWeb(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Stasis Webifier I"
+ skill = "Caldari Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariStrategicCruiser_heatDamage_moduleWarpScrambler(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Warp Disruptor I"
+ skill = "Caldari Strategic Cruiser"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/tengu/offensive/__init__.py b/eos/tests/typeTests/ships/strategicCruisers/tengu/offensive/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/strategicCruisers/tengu/offensive/acceleratedEjectionBay.py b/eos/tests/typeTests/ships/strategicCruisers/tengu/offensive/acceleratedEjectionBay.py
new file mode 100755
index 000000000..dd1ad545a
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/tengu/offensive/acceleratedEjectionBay.py
@@ -0,0 +1,522 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Tengu"
+ self.sub = "Tengu Offensive - Accelerated Ejection Bay"
+ self.skill = "Caldari Offensive Systems"
+
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to kinetic missile damage per level
+
+ def test_caldariOffensiveSystems_kineticDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rocket"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_kineticDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Javelin Rocket"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_kineticDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Light Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_kineticDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Fury Light Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_kineticDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Serpent F.O.F. Light Missile I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_kineticDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Assault Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_kineticDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Rage Assault Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_kineticDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Heavy Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_kineticDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Fury Heavy Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_kineticDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Hydra F.O.F. Heavy Missile I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_kineticDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Torpedo"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_kineticDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Javelin Torpedo"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_kineticDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Cruise Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_kineticDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Precision Cruise Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_kineticDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Dragon F.O.F. Cruise Missile I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_kineticDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rift Citadel Torpedo"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_kineticDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rajas Citadel Cruise Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_kineticDamage_chargeMissileLightNoSkillrq(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Civilian Bloodclaw Light Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_kineticDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Antimatter Charge M"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 7.5% bonus to Assault missile launcher rate of fire per level
+
+ def test_caldariOffensiveSystems_speed_moduleLauncherMissileAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.925
+ fLvl = 4
+ fIngame = 0.7
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 7.5% bonus to Heavy Assault missile launcher rate of fire per level
+
+ def test_caldariOffensiveSystems_speed_moduleLauncherMissileHeavyAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.925
+ fLvl = 4
+ fIngame = 0.7
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 7.5% bonus to Heavy missile launcher rate of fire per level
+
+ def test_caldariOffensiveSystems_speed_moduleLauncherMissileHeavy(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.925
+ fLvl = 4
+ fIngame = 0.7
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_speed_moduleLauncherMissileOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Cruise Missile Launcher I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to heavy assault missile velocity per level
+
+ def test_caldariOffensiveSystems_maxVelocity_chargeMissileHeavyAssault(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Fulmination Assault Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_maxVelocity_chargeMissileHeavyAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Hellfire Rage Assault Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to heavy missile velocity per level
+
+ def test_caldariOffensiveSystems_maxVelocity_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Thunderbolt Heavy Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_maxVelocity_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Widowmaker Fury Heavy Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_maxVelocity_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Hellhound F.O.F. Heavy Missile I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_maxVelocity_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Inferno Torpedo"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +800000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 8201000.0
+ fIngame = 9001000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +33 tf cpu
+
+ def test_static_cpuOutput_ship(self):
+ self.buildTested = 0
+ attr = "cpuOutput"
+ iIngame = 0.0
+ fIngame = 33.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/tengu/offensive/covertReconfiguration.py b/eos/tests/typeTests/ships/strategicCruisers/tengu/offensive/covertReconfiguration.py
new file mode 100755
index 000000000..2fb4e5f81
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/tengu/offensive/covertReconfiguration.py
@@ -0,0 +1,207 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Tengu"
+ self.sub = "Tengu Offensive - Covert Reconfiguration"
+ self.skill = "Caldari Offensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to missile launcher rate of fire per level
+ # Actually affects only Assault, Heavy Assault and Heavy launchers
+
+ def test_caldariOffensiveSystems_speed_moduleLauncherMissileAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_speed_moduleLauncherMissileHeavyAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_speed_moduleLauncherMissileHeavy(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_speed_moduleLauncherMissileOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Standard Missile Launcher I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # 100% reduction in Cloaking Device CPU use
+
+ def test_static_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ iIngame = 30.0
+ fIngame = 0.0
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Capacitor Power Relay I"
+ iIngame = 4.0
+ fIngame = 4.0
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Can use covert jump portal
+
+ def test_static_jumpHarmonics_ship(self):
+ self.buildTested = 0
+ attr = "jumpHarmonics"
+ ingame = 5.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # 5 seconds cloak reactivation delay
+
+ def test_static_moduleReactivationDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ iIngame = 30000.0
+ fIngame = 5000.0
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Cynosural Field Generator I"
+ iIngame = 30000.0
+ fIngame = 30000.0
+ iEos = self.getItemAttr(attr, item, ship=self.hull)
+ fEos = self.getItemAttr(attr, item, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 4.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +800000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 8201000.0
+ fIngame = 9001000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/tengu/offensive/magneticInfusionBasin.py b/eos/tests/typeTests/ships/strategicCruisers/tengu/offensive/magneticInfusionBasin.py
new file mode 100755
index 000000000..0512f7b1d
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/tengu/offensive/magneticInfusionBasin.py
@@ -0,0 +1,187 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Tengu"
+ self.sub = "Tengu Offensive - Magnetic Infusion Basin"
+ self.skill = "Caldari Offensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to medium hybrid turret damage per level
+
+ def test_caldariOffensiveSystems_damageMultiplier_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Ion Blaster I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Electron Blaster Cannon I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 20% bonus to medium hybrid turret optimal range per level
+
+ def test_caldariOffensiveSystems_maxRange_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "250mm Railgun I"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_maxRange_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "150mm Railgun I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_falloff_moduleHybridWeaponMedium(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "Heavy Electron Blaster I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +800000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 8201000.0
+ fIngame = 9001000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +365 MW powergrid
+
+ def test_static_powerOutput_ship(self):
+ self.buildTested = 0
+ attr = "powerOutput"
+ iIngame = 0.0
+ fIngame = 365.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +450 GJ capacitor capacity
+
+ def test_static_capacitorCapacity_ship(self):
+ self.buildTested = 0
+ attr = "capacitorCapacity"
+ iIngame = 100.0
+ fIngame = 550.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/tengu/offensive/riflingLauncherPattern.py b/eos/tests/typeTests/ships/strategicCruisers/tengu/offensive/riflingLauncherPattern.py
new file mode 100755
index 000000000..bf77921a2
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/tengu/offensive/riflingLauncherPattern.py
@@ -0,0 +1,277 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Tengu"
+ self.sub = "Tengu Offensive - Rifling Launcher Pattern"
+ self.skill = "Caldari Offensive Systems"
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to ECM target jammer strength per level
+
+ def test_caldariOffensiveSystems_scanGravimetricStrengthBonus_moduleECM(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrengthBonus"
+ item = "ECM - Phase Inverter I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_scanGravimetricStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanGravimetricStrengthBonus"
+ item = "ECM Burst I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_scanLadarStrengthBonus_moduleECM(self):
+ self.buildTested = 0
+ attr = "scanLadarStrengthBonus"
+ item = "ECM - Spatial Destabilizer I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_scanLadarStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanLadarStrengthBonus"
+ item = "ECM Burst I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_scanMagnetometricStrengthBonus_moduleECM(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrengthBonus"
+ item = "ECM - Ion Field Projector I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_scanMagnetometricStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanMagnetometricStrengthBonus"
+ item = "ECM Burst I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_scanRadarStrengthBonus_moduleECM(self):
+ self.buildTested = 0
+ attr = "scanRadarStrengthBonus"
+ item = "ECM - Multispectral Jammer I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_scanRadarStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "scanRadarStrengthBonus"
+ item = "ECM Burst I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to Assault Missile Launcher Rate of Fire per level
+
+ def test_caldariOffensiveSystems_speed_moduleLauncherMissileAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to Heavy Assault Missile Launcher Rate of Fire per level
+
+ def test_caldariOffensiveSystems_speed_moduleLauncherMissileHeavyAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 5% bonus to Heavy Missile Launcher Rate of Fire per level
+
+ def test_caldariOffensiveSystems_speed_moduleLauncherMissileHeavy(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariOffensiveSystems_speed_moduleLauncherMissileOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Rocket Launcher I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add weapon hardpoints
+
+ def test_static_turretSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "turretSlotsLeft"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_launcherSlotsLeft_ship(self):
+ self.buildTested = 0
+ attr = "launcherSlotsLeft"
+ iIngame = 0.0
+ fIngame = 5.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +800000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 8201000.0
+ fIngame = 9001000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +33 tf cpu
+
+ def test_static_cpuOutput_ship(self):
+ self.buildTested = 0
+ attr = "cpuOutput"
+ iIngame = 0.0
+ fIngame = 33.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/tengu/propulsion/__init__.py b/eos/tests/typeTests/ships/strategicCruisers/tengu/propulsion/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/strategicCruisers/tengu/propulsion/fuelCatalyst.py b/eos/tests/typeTests/ships/strategicCruisers/tengu/propulsion/fuelCatalyst.py
new file mode 100755
index 000000000..f377f557f
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/tengu/propulsion/fuelCatalyst.py
@@ -0,0 +1,113 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Tengu"
+ self.sub = "Tengu Propulsion - Fuel Catalyst"
+ self.skill = "Caldari Propulsion Systems"
+
+ # Subsystem Skill Bonus:
+ # 10% bonus to afterburner speed per level
+
+ def test_amarrPropulsionSystems_speedFactor_moduleAfterburner(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "100MN Afterburner I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrPropulsionSystems_speedFactor_moduleAfterburnerNoSkillrqAfterburner(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "10MN MicroWarpdrive I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 8201000.0
+ fIngame = 9601000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +160 m/s speed
+
+ def test_static_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ iIngame = 10.0
+ fIngame = 170.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Set inertia modifier to 0.387
+
+ def test_static_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ ingame = 0.387
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/tengu/propulsion/gravitationalCapacitor.py b/eos/tests/typeTests/ships/strategicCruisers/tengu/propulsion/gravitationalCapacitor.py
new file mode 100755
index 000000000..22abf72ba
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/tengu/propulsion/gravitationalCapacitor.py
@@ -0,0 +1,114 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Tengu"
+ self.sub = "Tengu Propulsion - Gravitational Capacitor"
+ self.skill = "Caldari Propulsion Systems"
+
+ # Subsystem Skill Bonus:
+ # 15% bonus to warp speed per level
+
+ def test_caldariPropulsionSystems_baseWarpSpeed_ship(self):
+ self.buildTested = 0
+ attr = "baseWarpSpeed"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Subsystem Skill Bonus:
+ # 15% reduction in capacitor need when initiating warp per level
+
+ def test_caldariPropulsionSystems_warpCapacitorNeed_ship(self):
+ self.buildTested = 0
+ attr = "warpCapacitorNeed"
+ iLvl = 1
+ iIngame = 0.85
+ fLvl = 4
+ fIngame = 0.4
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 8201000.0
+ fIngame = 9601000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +175 m/s speed
+
+ def test_static_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ iIngame = 10.0
+ fIngame = 185.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Set inertia modifier to 0.387
+
+ def test_static_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ ingame = 0.387
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/tengu/propulsion/intercalatedNanofibers.py b/eos/tests/typeTests/ships/strategicCruisers/tengu/propulsion/intercalatedNanofibers.py
new file mode 100755
index 000000000..72ad17ed3
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/tengu/propulsion/intercalatedNanofibers.py
@@ -0,0 +1,98 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Tengu"
+ self.sub = "Tengu Propulsion - Intercalated Nanofibers"
+ self.skill = "Caldari Propulsion Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% increased agility per level
+
+ def test_caldariPropulsionSystems_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 8201000.0
+ fIngame = 9601000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +165 m/s speed
+
+ def test_static_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ iIngame = 10.0
+ fIngame = 175.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Set inertia modifier to 0.43
+
+ def test_static_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ ingame = 0.43
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
diff --git a/eos/tests/typeTests/ships/strategicCruisers/tengu/propulsion/interdictionNullifier.py b/eos/tests/typeTests/ships/strategicCruisers/tengu/propulsion/interdictionNullifier.py
new file mode 100755
index 000000000..33a9c80d0
--- /dev/null
+++ b/eos/tests/typeTests/ships/strategicCruisers/tengu/propulsion/interdictionNullifier.py
@@ -0,0 +1,108 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.hull = "Tengu"
+ self.sub = "Tengu Propulsion - Interdiction Nullifier"
+ self.skill = "Caldari Propulsion Systems"
+
+ # Subsystem Skill Bonus:
+ # 5% increased agility per level
+
+ def test_caldariPropulsionSystems_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=self.hull, miscitms=self.sub)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # Immunity to non-targeted interdiction
+
+ def test_static_warpBubbleImmune_ship(self):
+ self.buildTested = 0
+ attr = "warpBubbleImmune"
+ ingame = 1.0
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
+
+ # Hidden bonus:
+ # Add slots to ship
+
+ def test_static_hiSlots_ship(self):
+ self.buildTested = 0
+ attr = "hiSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_medSlots_ship(self):
+ self.buildTested = 0
+ attr = "medSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_lowSlots_ship(self):
+ self.buildTested = 0
+ attr = "lowSlots"
+ iIngame = 0.0
+ fIngame = 0.0
+ iEos = self.getShipAttr(attr, ship=self.hull) or 0.0
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub) or 0.0
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +1400000 kg mass
+
+ def test_static_mass_ship(self):
+ self.buildTested = 0
+ attr = "mass"
+ iIngame = 8201000.0
+ fIngame = 9601000.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # +155 m/s speed
+
+ def test_static_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ iIngame = 10.0
+ fIngame = 165.0
+ iEos = self.getShipAttr(attr, ship=self.hull)
+ fEos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # Set inertia modifier to 0.559
+
+ def test_static_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ ingame = 0.559
+ eos = self.getShipAttr(attr, ship=self.hull, miscitms=self.sub)
+ self.assertAlmostEquals(eos, ingame)
diff --git a/eos/tests/typeTests/ships/supercarriers/__init__.py b/eos/tests/typeTests/ships/supercarriers/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/supercarriers/aeon.py b/eos/tests/typeTests/ships/supercarriers/aeon.py
new file mode 100755
index 000000000..84eb7b4a3
--- /dev/null
+++ b/eos/tests/typeTests/ships/supercarriers/aeon.py
@@ -0,0 +1,317 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Aeon"
+
+ # Amarr Carrier Skill Bonuses:
+ # 50% bonus to Capital Energy transfer range per level
+
+ def test_amarrCarrier_powerTransferRange_moduleEnergyTransferCapital(self):
+ self.buildTested = 0
+ attr = "powerTransferRange"
+ item = "Capital Energy Transfer Array I"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 1.5
+ fLvl = 4
+ fIngame = 3.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCarrier_powerTransferRange_moduleEnergyTransferOther(self):
+ self.buildTested = 0
+ attr = "powerTransferRange"
+ item = "Small Energy Transfer Array I"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Carrier Skill Bonuses:
+ # 50% bonus to Capital Armor transfer range per level
+
+ def test_amarrCarrier_maxRange_moduleRemoteRepairerCapital(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Capital Remote Armor Repair System I"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 1.5
+ fLvl = 4
+ fIngame = 3.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCarrier_maxRange_moduleRemoteRepairerOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Large Remote Armor Repair System I"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Carrier Skill Bonuses:
+ # 5% bonus to all Armor resistances per level
+
+ def test_amarrCarrier_armorEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCarrier_armorEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCarrier_armorExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCarrier_armorExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCarrier_armorKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCarrier_armorKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCarrier_armorThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCarrier_armorThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "armorThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Carrier Skill Bonuses:
+ # Can deploy 3 additional Fighters or Fighter Bombers per level
+
+ def test_amarrCarrier_maxActiveDrones_ship(self):
+ self.buildTested = 0
+ attr = "maxActiveDrones"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 8.0
+ fLvl = 4
+ fIngame = 17.0
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Carrier Skill Bonuses:
+ # Can fit 1 additional Warfare Link module per level
+
+ def test_amarrCarrier_maxGroupActive_moduleGangCoordinator(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ skill = "Amarr Carrier"
+ item = "Armored Warfare Link - Passive Defense I"
+ iLvl = 1
+ iIngame = 2
+ fLvl = 4
+ fIngame = 5
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCarrier_maxGroupActive_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ skill = "Amarr Carrier"
+ item = "10MN Afterburner I"
+ iLvl = 1
+ iIngame = 1
+ fLvl = 4
+ fIngame = 1
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in CPU need for Warfare Link modules
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Armored Warfare Link - Passive Defense I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in CPU need for Drone Control Units
+ # Moved from Drone Control Unit module tests, not listed as bonus of ship
+
+ def test_static_cpu_moduleDroneControlUnit(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Drone Control Unit I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 200% bonus to Fighter or Fighter Bomber control range
+
+ def test_static_droneControlRange_ship(self):
+ self.buildTested = 0
+ attr = "droneControlRange"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 3.0
+ iEos = self.getShipAttr(attr, ship=ship_other)
+ fEos = self.getShipAttr(attr, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Advanced Spaceship Command Skill Bonus:
+ # 5% Bonus to the agility of ship per skill level
+ # Moved from Advanced Spaceship Command skill tests, not listed as bonus of ship
+
+ def test_advancedSpaceshipCommand_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Advanced Spaceship Command"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/supercarriers/hel.py b/eos/tests/typeTests/ships/supercarriers/hel.py
new file mode 100755
index 000000000..8cd1593ab
--- /dev/null
+++ b/eos/tests/typeTests/ships/supercarriers/hel.py
@@ -0,0 +1,324 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Hel"
+
+ # Minmatar Carrier Skill Bonuses:
+ # 50% bonus to Capital Shield transfer range per level
+
+ def test_minmatarCarrier_shieldTransferRange_moduleShieldTransporterCapital(self):
+ self.buildTested = 0
+ attr = "shieldTransferRange"
+ item = "Capital Shield Transporter I"
+ skill = "Minmatar Carrier"
+ iLvl = 1
+ iIngame = 1.5
+ fLvl = 4
+ fIngame = 3.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCarrier_shieldTransferRange_moduleShieldTransporterOther(self):
+ self.buildTested = 0
+ attr = "shieldTransferRange"
+ item = "Medium Shield Transporter I"
+ skill = "Minmatar Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Carrier Skill Bonuses:
+ # 50% bonus to Capital Armor transfer range per level
+
+ def test_minmatarCarrier_maxRange_moduleRemoteRepairerCapital(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Capital Remote Armor Repair System I"
+ skill = "Minmatar Carrier"
+ iLvl = 1
+ iIngame = 1.5
+ fLvl = 4
+ fIngame = 3.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCarrier_maxRange_moduleRemoteRepairerOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Small Remote Armor Repair System I"
+ skill = "Minmatar Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Carrier Skill Bonuses:
+ # 7.5% bonus to Shield transfer amount per level
+
+ def test_minmatarCarrier_shieldBonus_moduleShieldTransporterCapital(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Capital Shield Transporter I"
+ skill = "Minmatar Carrier"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCarrier_shieldBonus_moduleShieldTransporter(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Medium Shield Transporter I"
+ skill = "Minmatar Carrier"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCarrier_shieldBonus_moduleShieldTransporterCivilian(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Civilian Remote Shield Transporter"
+ skill = "Minmatar Carrier"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCarrier_shieldBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "X-Large Shield Booster I"
+ skill = "Minmatar Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Carrier Skill Bonuses:
+ # 7.5% bonus to Armor transfer amount per level
+
+ def test_minmatarCarrier_armorDamageAmount_moduleRemoteArmorRepairerCapital(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Capital Remote Armor Repair System I"
+ skill = "Minmatar Carrier"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCarrier_armorDamageAmount_moduleRemoteArmorRepairer(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Small Remote Armor Repair System I"
+ skill = "Minmatar Carrier"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCarrier_armorDamageAmount_moduleRemoteArmorRepairerCivilian(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Civilian Remote Armor Repair System"
+ skill = "Minmatar Carrier"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCarrier_armorDamageAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Small Armor Repairer I"
+ skill = "Minmatar Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Carrier Skill Bonuses:
+ # Can deploy 3 additional Fighters or Fighter Bombers per level
+
+ def test_minmatarCarrier_maxActiveDrones_ship(self):
+ self.buildTested = 0
+ attr = "maxActiveDrones"
+ skill = "Minmatar Carrier"
+ iLvl = 1
+ iIngame = 8.0
+ fLvl = 4
+ fIngame = 17.0
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Carrier Skill Bonuses:
+ # Can fit 1 additional Warfare Link module per level
+
+ def test_minmatarCarrier_maxGroupActive_moduleGangCoordinator(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ skill = "Minmatar Carrier"
+ item = "Siege Warfare Link - Shield Harmonizing I"
+ iLvl = 1
+ iIngame = 2
+ fLvl = 4
+ fIngame = 5
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarCarrier_maxGroupActive_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ skill = "Minmatar Carrier"
+ item = "Remote ECM Burst I"
+ iLvl = 1
+ iIngame = 1
+ fLvl = 4
+ fIngame = 1
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in CPU need for Warfare Link modules
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Information Warfare Link - Electronic Superiority I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in CPU need for Drone Control Units
+ # Moved from Drone Control Unit module tests, not listed as bonus of ship
+
+ def test_static_cpu_moduleDroneControlUnit(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Drone Control Unit I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 200% bonus to Fighter and Fighter Bomber control range
+
+ def test_static_droneControlRange_ship(self):
+ self.buildTested = 0
+ attr = "droneControlRange"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 3.0
+ iEos = self.getShipAttr(attr, ship=ship_other)
+ fEos = self.getShipAttr(attr, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Advanced Spaceship Command Skill Bonus:
+ # 5% Bonus to the agility of ship per skill level
+ # Moved from Advanced Spaceship Command skill tests, not listed as bonus of ship
+
+ def test_advancedSpaceshipCommand_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Advanced Spaceship Command"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/supercarriers/nyx.py b/eos/tests/typeTests/ships/supercarriers/nyx.py
new file mode 100755
index 000000000..630cf6255
--- /dev/null
+++ b/eos/tests/typeTests/ships/supercarriers/nyx.py
@@ -0,0 +1,250 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Nyx"
+
+ # Gallente Carrier Skill Bonuses:
+ # 50% bonus to Capital Shield transfer range per level
+
+ def test_gallenteCarrier_shieldTransferRange_moduleShieldTransporterCapital(self):
+ self.buildTested = 0
+ attr = "shieldTransferRange"
+ item = "Capital Shield Transporter I"
+ skill = "Gallente Carrier"
+ iLvl = 1
+ iIngame = 1.5
+ fLvl = 4
+ fIngame = 3.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCarrier_shieldTransferRange_moduleShieldTransporterOther(self):
+ self.buildTested = 0
+ attr = "shieldTransferRange"
+ item = "Large Shield Transporter I"
+ skill = "Gallente Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Carrier Skill Bonuses:
+ # 50% bonus to Capital Armor transfer range per level
+
+ def test_gallenteCarrier_maxRange_moduleRemoteRepairerCapital(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Capital Remote Armor Repair System I"
+ skill = "Gallente Carrier"
+ iLvl = 1
+ iIngame = 1.5
+ fLvl = 4
+ fIngame = 3.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCarrier_maxRange_moduleRemoteRepairerOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Large Remote Armor Repair System I"
+ skill = "Gallente Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Carrier Skill Bonuses:
+ # 5% bonus to deployed Fighters damage per level
+
+ def test_gallenteCarrier_damageMultiplier_droneFighter(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dragonfly"
+ skill = "Gallente Carrier"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Carrier Skill Bonuses:
+ # 5% bonus to deployed Fighter Bomber damage per level
+
+ def test_gallenteCarrier_damageMultiplier_droneFighterBomber(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Malleus"
+ skill = "Gallente Carrier"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCarrier_damageMultiplier_droneOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Ogre I"
+ skill = "Gallente Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Carrier Skill Bonuses:
+ # Can deploy 3 additional Fighters or Fighter Bombers per level
+
+ def test_gallenteCarrier_maxActiveDrones_ship(self):
+ self.buildTested = 0
+ attr = "maxActiveDrones"
+ skill = "Gallente Carrier"
+ iLvl = 1
+ iIngame = 8.0
+ fLvl = 4
+ fIngame = 17.0
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Carrier Skill Bonuses:
+ # Can fit 1 additional Warfare Link module per level
+
+ def test_gallenteCarrier_maxGroupActive_moduleGangCoordinator(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ skill = "Gallente Carrier"
+ item = "Mining Foreman Link - Laser Optimization I"
+ iLvl = 1
+ iIngame = 2
+ fLvl = 4
+ fIngame = 5
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteCarrier_maxGroupActive_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ skill = "Gallente Carrier"
+ item = "10MN MicroWarpdrive I"
+ iLvl = 1
+ iIngame = 1
+ fLvl = 4
+ fIngame = 1
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in CPU need for Warfare Link modules
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Skirmish Warfare Link - Rapid Deployment I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in CPU need for Drone Control Units
+ # Moved from Drone Control Unit module tests, not listed as bonus of ship
+
+ def test_static_cpu_moduleDroneControlUnit(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Drone Control Unit I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Carrier Skill Bonuses:
+ # 200% bonus to Fighter and Fighter Bomber control range
+
+ def test_static_droneControlRange_ship(self):
+ self.buildTested = 0
+ attr = "droneControlRange"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 3.0
+ iEos = self.getShipAttr(attr, ship=ship_other)
+ fEos = self.getShipAttr(attr, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Advanced Spaceship Command Skill Bonus:
+ # 5% Bonus to the agility of ship per skill level
+ # Moved from Advanced Spaceship Command skill tests, not listed as bonus of ship
+
+ def test_advancedSpaceshipCommand_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Advanced Spaceship Command"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/supercarriers/revenant.py b/eos/tests/typeTests/ships/supercarriers/revenant.py
new file mode 100755
index 000000000..fcd001ae6
--- /dev/null
+++ b/eos/tests/typeTests/ships/supercarriers/revenant.py
@@ -0,0 +1,350 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Revenant"
+
+ # Amarr Carrier Skill Bonuses:
+ # 10% bonus to fighter max velocity per level
+
+ def test_amarrCarrier_maxVelocity_droneFighter(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Einherji"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Carrier Skill Bonuses:
+ # 10% bonus to fighter-bomber max velocity per level
+
+ def test_amarrCarrier_maxVelocity_droneFighterBomber(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Tyrfing"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCarrier_maxVelocity_droneOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Berserker I"
+ skill = "Amarr Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Carrier Skill Bonuses:
+ # Can fit 1 additional Warfare Link module per level
+
+ def test_amarrCarrier_maxGroupActive_moduleGangCoordinator(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ skill = "Amarr Carrier"
+ item = "Siege Warfare Link - Shield Efficiency I"
+ iLvl = 1
+ iIngame = 2
+ fLvl = 4
+ fIngame = 5
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrCarrier_maxGroupActive_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ skill = "Amarr Carrier"
+ item = "ECM Burst I"
+ iLvl = 1
+ iIngame = 1
+ fLvl = 4
+ fIngame = 1
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Carrier Skill Bonuses:
+ # 50% bonus to Capital Energy transfer range per level
+
+ def test_caldariCarrier_powerTransferRange_moduleEnergyTransferCapital(self):
+ self.buildTested = 0
+ attr = "powerTransferRange"
+ item = "Capital Energy Transfer Array I"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 1.5
+ fLvl = 4
+ fIngame = 3.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCarrier_powerTransferRange_moduleEnergyTransferOther(self):
+ self.buildTested = 0
+ attr = "powerTransferRange"
+ item = "Small Energy Transfer Array I"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Carrier Skill Bonuses:
+ # 50% bonus to Capital Shield transfer range per level
+
+ def test_caldariCarrier_shieldTransferRange_moduleShieldTransporterCapital(self):
+ self.buildTested = 0
+ attr = "shieldTransferRange"
+ item = "Capital Shield Transporter I"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 1.5
+ fLvl = 4
+ fIngame = 3.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCarrier_shieldTransferRange_moduleShieldTransporterOther(self):
+ self.buildTested = 0
+ attr = "shieldTransferRange"
+ item = "Large Shield Transporter I"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Carrier Skill Bonuses:
+ # Can deploy 1 additional Fighters or Fighter Bombers or Drones per level
+
+ def test_caldariCarrier_maxActiveDrones_ship(self):
+ self.buildTested = 0
+ attr = "maxActiveDrones"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 6.0
+ fLvl = 4
+ fIngame = 9.0
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 100% bonus to fighter damage
+
+ def test_static_damageMultiplier_droneFighter(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Firbolg"
+ ship_other = "Hel"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 100% bonus to fighter-bomber damage
+
+ def test_static_damageMultiplier_droneFighterBomber(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Cyclops"
+ ship_other = "Hel"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_damageMultiplier_droneOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Hornet I"
+ ship_other = "Hel"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 100% bonus to fighter hitpoints
+
+ def test_static_hp_droneFighter(self):
+ self.buildTested = 0
+ item = "Templar"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ ship_other = "Hel"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, ship=ship_other)
+ fEos += self.getItemAttr(layer, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Special Ability:
+ # 100% bonus to fighter-bomber hitpoints
+
+ def test_static_hp_droneFighterBomber(self):
+ self.buildTested = 0
+ item = "Tyrfing"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ ship_other = "Hel"
+ iIngame = 1.0
+ fIngame = 2.0
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, ship=ship_other)
+ fEos += self.getItemAttr(layer, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_hp_droneOther(self):
+ self.buildTested = 0
+ item = "Praetor I"
+ layers = ("shieldCapacity", "armorHP", "hp")
+ ship_other = "Hel"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = 0
+ fEos = 0
+ for layer in layers:
+ iEos += self.getItemAttr(layer, item, ship=ship_other)
+ fEos += self.getItemAttr(layer, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonuses:
+ # 99% reduction in CPU need for Warfare Link modules
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Information Warfare Link - Recon Operation I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in CPU need for Drone Control Units
+ # Moved from Drone Control Unit module tests, not listed as bonus of ship
+
+ def test_static_cpu_moduleDroneControlUnit(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Drone Control Unit I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonuses:
+ # 200% bonus to Fighter or Fighter Bomber control range
+
+ def test_static_droneControlRange_ship(self):
+ self.buildTested = 0
+ attr = "droneControlRange"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 3.0
+ iEos = self.getShipAttr(attr, ship=ship_other)
+ fEos = self.getShipAttr(attr, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Advanced Spaceship Command Skill Bonus:
+ # 5% Bonus to the agility of ship per skill level
+ # Moved from Advanced Spaceship Command skill tests, not listed as bonus of ship
+
+ def test_advancedSpaceshipCommand_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Advanced Spaceship Command"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/supercarriers/wyvern.py b/eos/tests/typeTests/ships/supercarriers/wyvern.py
new file mode 100755
index 000000000..c816de804
--- /dev/null
+++ b/eos/tests/typeTests/ships/supercarriers/wyvern.py
@@ -0,0 +1,317 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Wyvern"
+
+ # Caldari Carrier Skill Bonuses:
+ # 50% bonus to Capital Energy transfer range per level
+
+ def test_caldariCarrier_powerTransferRange_moduleEnergyTransferCapital(self):
+ self.buildTested = 0
+ attr = "powerTransferRange"
+ item = "Capital Energy Transfer Array I"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 1.5
+ fLvl = 4
+ fIngame = 3.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCarrier_powerTransferRange_moduleEnergyTransferOther(self):
+ self.buildTested = 0
+ attr = "powerTransferRange"
+ item = "Medium Energy Transfer Array I"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Carrier Skill Bonuses:
+ # 50% bonus to Capital Shield transfer range per level
+
+ def test_caldariCarrier_shieldTransferRange_moduleShieldTransporterCapital(self):
+ self.buildTested = 0
+ attr = "shieldTransferRange"
+ item = "Capital Shield Transporter I"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 1.5
+ fLvl = 4
+ fIngame = 3.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCarrier_shieldTransferRange_moduleShieldTransporterOther(self):
+ self.buildTested = 0
+ attr = "shieldTransferRange"
+ item = "Small Shield Transporter I"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Carrier Skill Bonuses:
+ # 5% bonus to all Shield resistances per level
+
+ def test_caldariCarrier_shieldEmDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCarrier_shieldEmDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldEmDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCarrier_shieldExplosiveDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCarrier_shieldExplosiveDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldExplosiveDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCarrier_shieldKineticDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCarrier_shieldKineticDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldKineticDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCarrier_shieldThermalDamageResonance_ship(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCarrier_shieldThermalDamageResonance_other(self):
+ self.buildTested = 0
+ attr = "shieldThermalDamageResonance"
+ item = "Damage Control I"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Carrier Skill Bonuses:
+ # Can deploy 3 additional Fighters or Fighter Bombers per level
+
+ def test_caldariCarrier_maxActiveDrones_ship(self):
+ self.buildTested = 0
+ attr = "maxActiveDrones"
+ skill = "Caldari Carrier"
+ iLvl = 1
+ iIngame = 8.0
+ fLvl = 4
+ fIngame = 17.0
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Carrier Skill Bonuses:
+ # Can fit 1 additional Warfare Link module per level
+
+ def test_caldariCarrier_maxGroupActive_moduleGangCoordinator(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ skill = "Caldari Carrier"
+ item = "Siege Warfare Link - Shield Efficiency I"
+ iLvl = 1
+ iIngame = 2
+ fLvl = 4
+ fIngame = 5
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariCarrier_maxGroupActive_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ skill = "Caldari Carrier"
+ item = "Remote ECM Burst I"
+ iLvl = 1
+ iIngame = 1
+ fLvl = 4
+ fIngame = 1
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in CPU need for Warfare Link modules
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Skirmish Warfare Link - Interdiction Maneuvers I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in CPU need for Drone Control Units
+ # Moved from Drone Control Unit module tests, not listed as bonus of ship
+
+ def test_static_cpu_moduleDroneControlUnit(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Drone Control Unit I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 200% bonus to Fighter or Fighter Bomber control range
+
+ def test_static_droneControlRange_ship(self):
+ self.buildTested = 0
+ attr = "droneControlRange"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 3.0
+ iEos = self.getShipAttr(attr, ship=ship_other)
+ fEos = self.getShipAttr(attr, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Advanced Spaceship Command Skill Bonus:
+ # 5% Bonus to the agility of ship per skill level
+ # Moved from Advanced Spaceship Command skill tests, not listed as bonus of ship
+
+ def test_advancedSpaceshipCommand_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Advanced Spaceship Command"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/titans/__init__.py b/eos/tests/typeTests/ships/titans/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/titans/avatar.py b/eos/tests/typeTests/ships/titans/avatar.py
new file mode 100755
index 000000000..0fd41befb
--- /dev/null
+++ b/eos/tests/typeTests/ships/titans/avatar.py
@@ -0,0 +1,135 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Avatar"
+
+ # Amarr Titan Skill Bonuses:
+ # 100% bonus to Capital Energy Turret damage per level
+
+ def test_amarrTitan_damageMultiplier_moduleEnergyWeaponCapital(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual Giga Pulse Laser I"
+ skill = "Amarr Titan"
+ iLvl = 1
+ iIngame = 2.0
+ fLvl = 4
+ fIngame = 5.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrTitan_damageMultiplier_moduleEnergyWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Medium Pulse Laser I"
+ skill = "Amarr Titan"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Titan Skill Bonuses:
+ # 7.5% bonus to gang members' capacitor recharge rate per level
+
+ def test_amarrTitan_rechargeRate_fleetShip(self):
+ self.buildTested = 0
+ attr = "rechargeRate"
+ skill = "Amarr Titan"
+ iLvl = 1
+ iIngame = 0.925
+ fLvl = 4
+ fIngame = 0.7
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship, gang=True)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship, gang=True)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Titan Skill Bonuses:
+ # Can fit 1 additional Warfare Link module per level
+
+ def test_amarrTitan_maxGroupActive_moduleGangCoordinator(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ skill = "Amarr Titan"
+ item = "Armored Warfare Link - Passive Defense I"
+ iLvl = 1
+ iIngame = 2
+ fLvl = 4
+ fIngame = 5
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_amarrTitan_maxGroupActive_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ skill = "Amarr Titan"
+ item = "ECM Burst I"
+ iLvl = 1
+ iIngame = 1
+ fLvl = 4
+ fIngame = 1
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in CPU need for Warfare Link modules
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Information Warfare Link - Recon Operation I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Advanced Spaceship Command Skill Bonus:
+ # 5% Bonus to the agility of ship per skill level
+ # Moved from Advanced Spaceship Command skill tests, not listed as bonus of ship
+
+ def test_advancedSpaceshipCommand_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Advanced Spaceship Command"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/titans/erebus.py b/eos/tests/typeTests/ships/titans/erebus.py
new file mode 100755
index 000000000..9a75a3b53
--- /dev/null
+++ b/eos/tests/typeTests/ships/titans/erebus.py
@@ -0,0 +1,136 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Erebus"
+
+ # Gallente Titan Skill Bonuses:
+ # 100% bonus to Capital Hybrid Turret damage per level
+
+ def test_gallenteTitan_damageMultiplier_moduleHybridWeaponCapital(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Ion Siege Blaster Cannon I"
+ skill = "Gallente Titan"
+ iLvl = 1
+ iIngame = 2.0
+ fLvl = 4
+ fIngame = 5.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteTitan_damageMultiplier_moduleHybridWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Electron Blaster Cannon I"
+ skill = "Gallente Titan"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Titan Skill Bonuses:
+ # 7.5% bonus to gang members' maximum armor HP per level
+
+ def test_gallenteTitan_armorHP_fleetShip(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ skill = "Gallente Titan"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship, gang=True)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship, gang=True)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Titan Skill Bonuses:
+ # Can fit 1 additional Warfare Link module per level
+
+ def test_gallenteTitan_maxGroupActive_moduleGangCoordinator(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ skill = "Gallente Titan"
+ item = "Information Warfare Link - Recon Operation I"
+ iLvl = 1
+ iIngame = 2
+ fLvl = 4
+ fIngame = 5
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_gallenteTitan_maxGroupActive_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ skill = "Gallente Titan"
+ item = "100MN MicroWarpdrive I"
+ iLvl = 1
+ iIngame = 1
+ fLvl = 4
+ fIngame = 1
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Titan Skill Bonuses:
+ # 99% reduction in CPU need for Warfare Link modules
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Skirmish Warfare Link - Interdiction Maneuvers I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Advanced Spaceship Command Skill Bonus:
+ # 5% Bonus to the agility of ship per skill level
+ # Moved from Advanced Spaceship Command skill tests, not listed as bonus of ship
+
+ def test_advancedSpaceshipCommand_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Advanced Spaceship Command"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/titans/leviathan.py b/eos/tests/typeTests/ships/titans/leviathan.py
new file mode 100755
index 000000000..aa5120761
--- /dev/null
+++ b/eos/tests/typeTests/ships/titans/leviathan.py
@@ -0,0 +1,151 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Leviathan"
+
+ # Caldari Titan Skill Bonuses:
+ # 125% bonus to Citadel Missile kinetic damage per level
+
+ def test_caldariTitan_kineticDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rift Citadel Torpedo"
+ skill = "Caldari Titan"
+ iLvl = 1
+ iIngame = 2.25
+ fLvl = 4
+ fIngame = 6.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariTitan_kineticDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rajas Citadel Cruise Missile"
+ skill = "Caldari Titan"
+ iLvl = 1
+ iIngame = 2.25
+ fLvl = 4
+ fIngame = 6.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariTitan_kineticDamage_chargeMissileOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Light Missile"
+ skill = "Caldari Titan"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Titan Skill Bonuses:
+ # 7.5% bonus to gang members' maximum shield HP per level
+
+ def test_caldariTitan_shieldCapacity_fleetShip(self):
+ self.buildTested = 0
+ attr = "shieldCapacity"
+ skill = "Caldari Titan"
+ iLvl = 1
+ iIngame = 1.075
+ fLvl = 4
+ fIngame = 1.3
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship, gang=True)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship, gang=True)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Titan Skill Bonuses:
+ # Can fit 1 additional Warfare Link module per level
+
+ def test_caldariTitan_maxGroupActive_moduleGangCoordinator(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ skill = "Caldari Titan"
+ item = "Siege Warfare Link - Shield Efficiency I"
+ iLvl = 1
+ iIngame = 2
+ fLvl = 4
+ fIngame = 5
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_caldariTitan_maxGroupActive_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ skill = "Caldari Titan"
+ item = "1MN Afterburner I"
+ iLvl = 1
+ iIngame = 1
+ fLvl = 4
+ fIngame = 1
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Titan Skill Bonuses:
+ # 99% reduction in CPU need for Warfare Link modules
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Armored Warfare Link - Damage Control I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Advanced Spaceship Command Skill Bonus:
+ # 5% Bonus to the agility of ship per skill level
+ # Moved from Advanced Spaceship Command skill tests, not listed as bonus of ship
+
+ def test_advancedSpaceshipCommand_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Advanced Spaceship Command"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/titans/ragnarok.py b/eos/tests/typeTests/ships/titans/ragnarok.py
new file mode 100755
index 000000000..b40e74873
--- /dev/null
+++ b/eos/tests/typeTests/ships/titans/ragnarok.py
@@ -0,0 +1,135 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Ragnarok"
+
+ # Minmatar Titan Skill Bonuses:
+ # 125% bonus to Capital Projectile Turret damage per level
+
+ def test_minmatarTitan_damageMultiplier_moduleProjectileWeaponCapital(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Quad 3500mm Siege Artillery I"
+ skill = "Minmatar Titan"
+ iLvl = 1
+ iIngame = 2.25
+ fLvl = 4
+ fIngame = 6.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarTitan_damageMultiplier_moduleProjectileWeaponOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "650mm Artillery Cannon I"
+ skill = "Minmatar Titan"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Titan Skill Bonuses:
+ # 7.5% reduction in gang members' signature radius per level
+
+ def test_minmatarTitan_signatureRadius_fleetShip(self):
+ self.buildTested = 0
+ attr = "signatureRadius"
+ skill = "Minmatar Titan"
+ iLvl = 1
+ iIngame = 0.925
+ fLvl = 4
+ fIngame = 0.7
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship, gang=True)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship, gang=True)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Titan Skill Bonuses:
+ # Can fit 1 additional Warfare Link module per level
+
+ def test_minmatarTitan_maxGroupActive_moduleGangCoordinator(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ skill = "Minmatar Titan"
+ item = "Skirmish Warfare Link - Evasive Maneuvers I"
+ iLvl = 1
+ iIngame = 2
+ fLvl = 4
+ fIngame = 5
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_minmatarTitan_maxGroupActive_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ skill = "Minmatar Titan"
+ item = "ECM Burst I"
+ iLvl = 1
+ iIngame = 1
+ fLvl = 4
+ fIngame = 1
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 99% reduction in CPU need for Warfare Link modules
+
+ def test_static_cpu_moduleGangCoordinatorSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Information Warfare Link - Sensor Integrity I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 0.01
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleGangCoordinatorNoSkillrqLeadership(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Command Processor I"
+ ship_other = "Abaddon"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Advanced Spaceship Command Skill Bonus:
+ # 5% Bonus to the agility of ship per skill level
+ # Moved from Advanced Spaceship Command skill tests, not listed as bonus of ship
+
+ def test_advancedSpaceshipCommand_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ skill = "Advanced Spaceship Command"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/transportShips/__init__.py b/eos/tests/typeTests/ships/transportShips/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/ships/transportShips/bustard.py b/eos/tests/typeTests/ships/transportShips/bustard.py
new file mode 100755
index 000000000..66e1d47e2
--- /dev/null
+++ b/eos/tests/typeTests/ships/transportShips/bustard.py
@@ -0,0 +1,130 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Bustard"
+
+ # Caldari Industrial Skill Bonus:
+ # +5% cargo capacity per level
+
+ def test_caldariIndustrial_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Caldari Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Industrial Skill Bonus:
+ # +5% velocity per level
+
+ def test_caldariIndustrial_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Caldari Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Transport Ships Skill Bonus:
+ # +5% shield booster boost amount per level
+
+ def test_transportShips_shieldBonus_moduleShieldBooster(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Medium Shield Booster I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_shieldBonus_moduleShieldBoosterCapital(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Capital Shield Booster I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_shieldBonus_moduleShieldBoosterCivilian(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Civilian Shield Booster I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_shieldBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Small Shield Transporter I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Transport Ships Skill Bonus:
+ # +5% bonus shield HP per level
+
+ def test_transportShips_shieldCapacity_ship(self):
+ self.buildTested = 0
+ attr = "shieldCapacity"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # +2 warp strength
+
+ def test_static_warpScrambleStatus_ship(self):
+ self.buildTested = 0
+ attr = "warpScrambleStatus"
+ ingame = -2.0
+ eos = self.getShipAttr(attr, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
diff --git a/eos/tests/typeTests/ships/transportShips/crane.py b/eos/tests/typeTests/ships/transportShips/crane.py
new file mode 100755
index 000000000..af9a1c178
--- /dev/null
+++ b/eos/tests/typeTests/ships/transportShips/crane.py
@@ -0,0 +1,191 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Crane"
+
+ # Caldari Industrial Skill Bonus:
+ # +5% cargo capacity per level
+
+ def test_caldariIndustrial_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Caldari Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Caldari Industrial Skill Bonus:
+ # +5% velocity per level
+
+ def test_caldariIndustrial_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Caldari Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Transport Ships Skill Bonus:
+ # +5% shield booster boost amount
+
+ def test_transportShips_shieldBonus_moduleShieldBooster(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Small Shield Booster I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_shieldBonus_moduleShieldBoosterCapital(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Capital Shield Booster I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_shieldBonus_moduleShieldBoosterCivilian(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Civilian Shield Booster I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_shieldBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Medium Shield Transporter I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Transport Ships Skill Bonus:
+ # -98.5% to -99.25% bonus to cpu need of covert ops cloaks
+ # Static part
+
+ def test_static_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 0.015
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Micro Capacitor Booster I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Transport Ships Skill Bonus:
+ # -98.5% to -99.25% bonus to cpu need of covert ops cloaks
+ # Dynamic part
+
+ def test_transportShips_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 0.0135
+ fLvl = 4
+ fIngame = 0.009
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "LADAR Backup Array I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 5 seconds cloak reactivation delay
+
+ def test_static_moduleReactivationDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 5000.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ iItem = "Prototype Cloaking Device I"
+ iIngame = 5000.0
+ fItem = "Cynosural Field Generator I"
+ fIngame = 30000.0
+ iEos = self.getItemAttr(attr, iItem, ship=self.ship)
+ fEos = self.getItemAttr(attr, fItem, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/transportShips/impel.py b/eos/tests/typeTests/ships/transportShips/impel.py
new file mode 100755
index 000000000..a1178a593
--- /dev/null
+++ b/eos/tests/typeTests/ships/transportShips/impel.py
@@ -0,0 +1,130 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Impel"
+
+ # Amarr Industrial Skill Bonus:
+ # +5% cargo capacity per level
+
+ def test_amarrIndustrial_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Amarr Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Industrial Skill Bonus:
+ # +5% velocity per level
+
+ def test_amarrIndustrial_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Amarr Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Transport Ships Skill Bonus:
+ # +5% armor repairer repair amount per level
+
+ def test_transportShips_armorDamageAmount_moduleArmorRepairer(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Medium Armor Repairer I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_armorDamageAmount_moduleArmorRepairerCapital(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Capital Armor Repairer I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_armorDamageAmount_moduleArmorRepairerCivilian(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Civilian Armor Repairer"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_armorDamageAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Small Remote Armor Repair System I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Transport Ships Skill Bonus:
+ # +5% bonus to armor HP per level
+
+ def test_transportShips_armorHP_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # +2 warp strength
+
+ def test_static_warpScrambleStatus_ship(self):
+ self.buildTested = 0
+ attr = "warpScrambleStatus"
+ ingame = -2.0
+ eos = self.getShipAttr(attr, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
diff --git a/eos/tests/typeTests/ships/transportShips/mastodon.py b/eos/tests/typeTests/ships/transportShips/mastodon.py
new file mode 100755
index 000000000..2160c3043
--- /dev/null
+++ b/eos/tests/typeTests/ships/transportShips/mastodon.py
@@ -0,0 +1,130 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Mastodon"
+
+ # Minmatar Industrial Skill Bonus:
+ # +5% cargo capacity per level
+
+ def test_minmatarIndustrial_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Minmatar Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Industrial Skill Bonus:
+ # +5% velocity per level
+
+ def test_minmatarIndustrial_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Minmatar Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Transport Ships Skill Bonus:
+ # +5% shield booster boost amount per level
+
+ def test_transportShips_shieldBonus_moduleShieldBooster(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Large Shield Booster I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_shieldBonus_moduleShieldBoosterCapital(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Capital Shield Booster I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_shieldBonus_moduleShieldBoosterCivilian(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Civilian Shield Booster I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_shieldBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Medium Shield Transporter I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Transport Ships Skill Bonus:
+ # +5% bonus to shield HP per level
+
+ def test_transportShips_shieldCapacity_ship(self):
+ self.buildTested = 0
+ attr = "shieldCapacity"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # +2 warp strength
+
+ def test_static_warpScrambleStatus_ship(self):
+ self.buildTested = 0
+ attr = "warpScrambleStatus"
+ ingame = -2.0
+ eos = self.getShipAttr(attr, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
diff --git a/eos/tests/typeTests/ships/transportShips/occator.py b/eos/tests/typeTests/ships/transportShips/occator.py
new file mode 100755
index 000000000..1ad90476a
--- /dev/null
+++ b/eos/tests/typeTests/ships/transportShips/occator.py
@@ -0,0 +1,130 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Occator"
+
+ # Gallente Industrial Skill Bonus:
+ # +5% cargo capacity per level
+
+ def test_gallenteIndustrial_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Gallente Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Industrial Skill Bonus:
+ # +5% velocity per level
+
+ def test_gallenteIndustrial_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Gallente Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Transport Ships Skill Bonus:
+ # +5% armor repairer boost amount per level
+
+ def test_transportShips_armorDamageAmount_moduleArmorRepairer(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Small Armor Repairer I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_armorDamageAmount_moduleArmorRepairerCapital(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Capital Armor Repairer I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_armorDamageAmount_moduleArmorRepairerCivilian(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Civilian Armor Repairer"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_armorDamageAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Large Remote Armor Repair System I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Transport Ships Skill Bonus:
+ # +5% bonus to armor HP per level
+
+ def test_transportShips_armorHP_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Role Bonus:
+ # +2 warp strengthv
+
+ def test_static_warpScrambleStatus_ship(self):
+ self.buildTested = 0
+ attr = "warpScrambleStatus"
+ ingame = -2.0
+ eos = self.getShipAttr(attr, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
diff --git a/eos/tests/typeTests/ships/transportShips/prorator.py b/eos/tests/typeTests/ships/transportShips/prorator.py
new file mode 100755
index 000000000..e527f2720
--- /dev/null
+++ b/eos/tests/typeTests/ships/transportShips/prorator.py
@@ -0,0 +1,191 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Prorator"
+
+ # Amarr Industrial Skill Bonus:
+ # +5% cargo capacity per level
+
+ def test_amarrIndustrial_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Amarr Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Amarr Industrial Skill Bonus:
+ # +5% velocity per level
+
+ def test_amarrIndustrial_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Amarr Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Transport Ships Skill Bonus:
+ # +5% armor repairer repair amount
+
+ def test_transportShips_armorDamageAmount_moduleArmorRepairer(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Small Armor Repairer I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_armorDamageAmount_moduleArmorRepairerCapital(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Capital Armor Repairer I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_armorDamageAmount_moduleArmorRepairerCivilian(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Civilian Armor Repairer"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_armorDamageAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Large Remote Armor Repair System I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Transport Ships Skill Bonus:
+ # -98.5% to -99.25% bonus to cpu need of covert ops cloaks
+ # Static part
+
+ def test_static_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 0.015
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "10MN Afterburner I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Transport Ships Skill Bonus:
+ # -98.5% to -99.25% bonus to cpu need of covert ops cloaks
+ # Dynamic part
+
+ def test_transportShips_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 0.0135
+ fLvl = 4
+ fIngame = 0.009
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Codebreaker I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 5 seconds cloak reactivation delay
+
+ def test_static_moduleReactivationDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 5000.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ iItem = "Prototype Cloaking Device I"
+ iIngame = 5000.0
+ fItem = "Cynosural Field Generator I"
+ fIngame = 30000.0
+ iEos = self.getItemAttr(attr, iItem, ship=self.ship)
+ fEos = self.getItemAttr(attr, fItem, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/transportShips/prowler.py b/eos/tests/typeTests/ships/transportShips/prowler.py
new file mode 100755
index 000000000..b364fe9e3
--- /dev/null
+++ b/eos/tests/typeTests/ships/transportShips/prowler.py
@@ -0,0 +1,191 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Prowler"
+
+ # Minmatar Industrial Skill Bonus:
+ # +5% cargo capacity per level
+
+ def test_minmatarIndustrial_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Minmatar Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Minmatar Industrial Skill Bonus:
+ # +5% velocity per level
+
+ def test_minmatarIndustrial_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Minmatar Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Transport Ships Skill Bonus:
+ # +5% shield booster boost amount per level
+
+ def test_transportShips_shieldBonus_moduleShieldBooster(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Small Shield Booster I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_shieldBonus_moduleShieldBoosterCapital(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Capital Shield Booster I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_shieldBonus_moduleShieldBoosterCivilian(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Civilian Shield Booster I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_shieldBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Small Shield Transporter I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Transport Ships Skill Bonus:
+ # -98.5% to -99.25% bonus to cpu need of covert ops cloaks
+ # Static part
+
+ def test_static_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 0.015
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Tracking Computer I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Transport Ships Skill Bonus:
+ # -98.5% to -99.25% bonus to cpu need of covert ops cloaks
+ # Dynamic part
+
+ def test_transportShips_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 0.0135
+ fLvl = 4
+ fIngame = 0.009
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Stasis Webifier I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 5 seconds cloak reactivation delay
+
+ def test_static_moduleReactivationDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 5000.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ iItem = "Prototype Cloaking Device I"
+ iIngame = 5000.0
+ fItem = "Cynosural Field Generator I"
+ fIngame = 30000.0
+ iEos = self.getItemAttr(attr, iItem, ship=self.ship)
+ fEos = self.getItemAttr(attr, fItem, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/ships/transportShips/viator.py b/eos/tests/typeTests/ships/transportShips/viator.py
new file mode 100755
index 000000000..aae0eaec6
--- /dev/null
+++ b/eos/tests/typeTests/ships/transportShips/viator.py
@@ -0,0 +1,191 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.ship = "Viator"
+
+ # Gallente Industrial Skill Bonus:
+ # +5% cargo capacity per level
+
+ def test_gallenteIndustrial_capacity_ship(self):
+ self.buildTested = 0
+ attr = "capacity"
+ skill = "Gallente Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Gallente Industrial Skill Bonus:
+ # +5% velocity per level
+
+ def test_gallenteIndustrial_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ skill = "Gallente Industrial"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getShipAttr(attr, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Transport Ships Skill Bonus:
+ # -5% armor repairer duration per level
+
+ def test_transportShips_duration_moduleArmorRepairer(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Medium Armor Repairer I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_duration_moduleArmorRepairerCapital(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Capital Armor Repairer I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_duration_moduleArmorRepairerCivilian(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Civilian Armor Repairer"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_duration_moduleOther(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Medium Remote Armor Repair System I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Transport Ships Skill Bonus:
+ # -98.5% to -99.25% bonus to cpu need of covert ops cloaks
+ # Static part
+
+ def test_static_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 0.015
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_static_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Ship Scanner I"
+ ship_other = "Drake"
+ iIngame = 1.0
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, ship=ship_other)
+ fEos = self.getItemAttr(attr, item, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Transport Ships Skill Bonus:
+ # -98.5% to -99.25% bonus to cpu need of covert ops cloaks
+ # Dynamic part
+
+ def test_transportShips_cpu_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Prototype Cloaking Device I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 0.0135
+ fLvl = 4
+ fIngame = 0.009
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_transportShips_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Quad Light Beam Laser I"
+ skill = "Transport Ships"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(skill, iLvl), ship=self.ship)
+ fEos = self.getItemAttr(attr, item, skill=(skill, fLvl), ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus:
+ # 5 seconds cloak reactivation delay
+
+ def test_static_moduleReactivationDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Prototype Cloaking Device I"
+ ingame = 5000.0
+ eos = self.getItemAttr(attr, item, ship=self.ship)
+ self.assertAlmostEquals(eos, ingame)
+
+ def test_static_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ iItem = "Prototype Cloaking Device I"
+ iIngame = 5000.0
+ fItem = "Cynosural Field Generator I"
+ fIngame = 30000.0
+ iEos = self.getItemAttr(attr, iItem, ship=self.ship)
+ fEos = self.getItemAttr(attr, fItem, ship=self.ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/__init__.py b/eos/tests/typeTests/skills/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/skills/drones/__init__.py b/eos/tests/typeTests/skills/drones/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/skills/drones/advancedDroneInterfacing.py b/eos/tests/typeTests/skills/drones/advancedDroneInterfacing.py
new file mode 100755
index 000000000..62ab8d504
--- /dev/null
+++ b/eos/tests/typeTests/skills/drones/advancedDroneInterfacing.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Advanced Drone Interfacing"
+
+ # Allows the use of the Drone Control Unit module. One extra module can be fitted per skill level.
+
+ def test_maxGroupActive_moduleDroneControlUnit(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ item = "Drone Control Unit I"
+ iLvl = 1
+ iIngame = 1
+ fLvl = 4
+ fIngame = 4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxGroupActive_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ item = "Gas Cloud Harvester I"
+ iLvl = 1
+ iIngame = 0
+ fLvl = 4
+ fIngame = 0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/drones/amarrDroneSpecialization.py b/eos/tests/typeTests/skills/drones/amarrDroneSpecialization.py
new file mode 100755
index 000000000..a3888a782
--- /dev/null
+++ b/eos/tests/typeTests/skills/drones/amarrDroneSpecialization.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Amarr Drone Specialization"
+
+ # 2% bonus to advanced Amarr drone damage per level.
+
+ def test_damageMultiplier_droneWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Acolyte II"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_droneCombatNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Acolyte I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/drones/caldariDroneSpecialization.py b/eos/tests/typeTests/skills/drones/caldariDroneSpecialization.py
new file mode 100755
index 000000000..16cef6704
--- /dev/null
+++ b/eos/tests/typeTests/skills/drones/caldariDroneSpecialization.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Caldari Drone Specialization"
+
+ # 2% bonus to advanced Caldari drone damage per level.
+
+ def test_damageMultiplier_droneWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Hornet II"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_droneCombatNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Hornet I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/drones/combatDroneOperation.py b/eos/tests/typeTests/skills/drones/combatDroneOperation.py
new file mode 100755
index 000000000..ca68daadc
--- /dev/null
+++ b/eos/tests/typeTests/skills/drones/combatDroneOperation.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Combat Drone Operation"
+
+ # 5% Bonus to drone damage of light and medium drones per level.
+
+ def test_damageMultiplier_droneWithScoutSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Warrior I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_droneCombatOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Bouncer I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/drones/droneDurability.py b/eos/tests/typeTests/skills/drones/droneDurability.py
new file mode 100755
index 000000000..2462c02e2
--- /dev/null
+++ b/eos/tests/typeTests/skills/drones/droneDurability.py
@@ -0,0 +1,121 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Drone Durability"
+ self.layers = ("shieldCapacity", "armorHP", "hp")
+
+ # 5% bonus to drone shield, armor and hull hit points per level.
+
+ def test_hp_droneCombat(self):
+ self.buildTested = 0
+ item = "Berserker I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = 0
+ fEos = 0
+ for layer in self.layers:
+ iEos += self.getItemAttr(layer, item, skill=(self.skill, iLvl))
+ fEos += self.getItemAttr(layer, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_hp_droneLogistic(self):
+ self.buildTested = 0
+ item = "Heavy Shield Maintenance Bot II"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = 0
+ fEos = 0
+ for layer in self.layers:
+ iEos += self.getItemAttr(layer, item, skill=(self.skill, iLvl))
+ fEos += self.getItemAttr(layer, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_hp_droneEwar(self):
+ self.buildTested = 0
+ item = "Wasp EC-900"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = 0
+ fEos = 0
+ for layer in self.layers:
+ iEos += self.getItemAttr(layer, item, skill=(self.skill, iLvl))
+ fEos += self.getItemAttr(layer, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_hp_droneCapDrain(self):
+ self.buildTested = 0
+ item = "Praetor EV-900"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = 0
+ fEos = 0
+ for layer in self.layers:
+ iEos += self.getItemAttr(layer, item, skill=(self.skill, iLvl))
+ fEos += self.getItemAttr(layer, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_hp_droneWeb(self):
+ self.buildTested = 0
+ item = "Berserker SW-900"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = 0
+ fEos = 0
+ for layer in self.layers:
+ iEos += self.getItemAttr(layer, item, skill=(self.skill, iLvl))
+ fEos += self.getItemAttr(layer, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_hp_droneMining(self):
+ self.buildTested = 0
+ item = "Mining Drone I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = 0
+ fEos = 0
+ for layer in self.layers:
+ iEos += self.getItemAttr(layer, item, skill=(self.skill, iLvl))
+ fEos += self.getItemAttr(layer, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_hp_droneOther(self):
+ self.buildTested = 0
+ item = "Einherji"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = 0
+ fEos = 0
+ for layer in self.layers:
+ iEos += self.getItemAttr(layer, item, skill=(self.skill, iLvl))
+ fEos += self.getItemAttr(layer, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/drones/droneInterfacing.py b/eos/tests/typeTests/skills/drones/droneInterfacing.py
new file mode 100755
index 000000000..6437c5132
--- /dev/null
+++ b/eos/tests/typeTests/skills/drones/droneInterfacing.py
@@ -0,0 +1,66 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Drone Interfacing"
+
+ # 20% bonus to drone damage per level
+
+ def test_damageMultiplier_droneCombatWithDroneSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Hobgoblin II"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_droneCombatNoDroneSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Einherji"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 20% bonus to drone mining yield per level
+
+ def test_miningAmount_droneMining(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Harvester Mining Drone"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningAmount_other(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Miner II"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/drones/droneNavigation.py b/eos/tests/typeTests/skills/drones/droneNavigation.py
new file mode 100755
index 000000000..ac949ec77
--- /dev/null
+++ b/eos/tests/typeTests/skills/drones/droneNavigation.py
@@ -0,0 +1,106 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Drone Navigation"
+
+ # 5% increase in drone MicroWarpdrive speed per level.
+
+ def test_maxVelocity_droneCombat(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Warrior II"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxVelocity_droneLogistic(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Light Armor Maintenance Bot II"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxVelocity_droneEwar(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Hobgoblin SD-300"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxVelocity_droneCapDrain(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Acolyte EV-300"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxVelocity_droneWeb(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Berserker SW-900"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxVelocity_droneMining(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Mining Drone I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxVelocity_droneOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Cyclops"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/drones/droneSharpshooting.py b/eos/tests/typeTests/skills/drones/droneSharpshooting.py
new file mode 100755
index 000000000..62c18bf48
--- /dev/null
+++ b/eos/tests/typeTests/skills/drones/droneSharpshooting.py
@@ -0,0 +1,106 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Drone Sharpshooting"
+
+ # Increases drone optimal range.
+
+ def test_maxRange_droneCombat(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Warden II"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxRange_droneLogistic(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Heavy Armor Maintenance Bot I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxRange_droneEwar(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Praetor TD-900"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxRange_droneCapDrain(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Praetor EV-900"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxRange_droneWeb(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Berserker SW-900"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxRange_droneMining(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Mining Drone I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxRange_droneOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Templar"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/drones/drones.py b/eos/tests/typeTests/skills/drones/drones.py
new file mode 100755
index 000000000..546d89afe
--- /dev/null
+++ b/eos/tests/typeTests/skills/drones/drones.py
@@ -0,0 +1,21 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Drones"
+
+ # Can operate 1 drone per skill level.
+
+ def test_maxActiveDrones(self):
+ self.buildTested = 0
+ attr = "maxActiveDrones"
+ iLvl = 1
+ iIngame = 1
+ fLvl = 4
+ fIngame = 4
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl))
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl))
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/drones/electronicWarfareDroneInterfacing.py b/eos/tests/typeTests/skills/drones/electronicWarfareDroneInterfacing.py
new file mode 100755
index 000000000..b64f905b6
--- /dev/null
+++ b/eos/tests/typeTests/skills/drones/electronicWarfareDroneInterfacing.py
@@ -0,0 +1,21 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Electronic Warfare Drone Interfacing"
+
+ # 3000m drone control range bonus per level.
+
+ def test_droneControlRange(self):
+ self.buildTested = 0
+ attr = "droneControlRange"
+ iLvl = 1
+ iIngame = 3000
+ fLvl = 4
+ fIngame = 12000
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl))
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl))
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/drones/fighterBombers.py b/eos/tests/typeTests/skills/drones/fighterBombers.py
new file mode 100755
index 000000000..1706bde93
--- /dev/null
+++ b/eos/tests/typeTests/skills/drones/fighterBombers.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Fighter Bombers"
+
+ # 20% increase in fighter bomber damage per level.
+
+ def test_damageMultiplier_droneFighterBomber(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Mantis"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_droneOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dragonfly"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/drones/fighters.py b/eos/tests/typeTests/skills/drones/fighters.py
new file mode 100755
index 000000000..2d54aa82d
--- /dev/null
+++ b/eos/tests/typeTests/skills/drones/fighters.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Fighters"
+
+ # 20% increase in fighter damage per level.
+
+ def test_damageMultiplier_droneFighter(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Templar"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_droneOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Praetor II"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/drones/gallenteDroneSpecialization.py b/eos/tests/typeTests/skills/drones/gallenteDroneSpecialization.py
new file mode 100755
index 000000000..0d61e7863
--- /dev/null
+++ b/eos/tests/typeTests/skills/drones/gallenteDroneSpecialization.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Gallente Drone Specialization"
+
+ # 2% bonus to advanced Gallente drone damage per level.
+
+ def test_damageMultiplier_droneWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Hobgoblin II"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_droneCombatNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Hobgoblin I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/drones/heavyDroneOperation.py b/eos/tests/typeTests/skills/drones/heavyDroneOperation.py
new file mode 100755
index 000000000..bb8a55f06
--- /dev/null
+++ b/eos/tests/typeTests/skills/drones/heavyDroneOperation.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Heavy Drone Operation"
+
+ # 5% Bonus to heavy drone damage per level.
+
+ def test_damageMultiplier_droneHeavy(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Ogre I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_droneCombatOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Hammerhead I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/drones/miningDroneOperation.py b/eos/tests/typeTests/skills/drones/miningDroneOperation.py
new file mode 100755
index 000000000..689cfdc76
--- /dev/null
+++ b/eos/tests/typeTests/skills/drones/miningDroneOperation.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Mining Drone Operation"
+
+ # 5% Bonus to mining drone yield per skill level.
+
+ def test_miningAmount_droneMining(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Harvester Mining Drone"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningAmount_otherSkillrqMining(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Miner I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/drones/minmatarDroneSpecialization.py b/eos/tests/typeTests/skills/drones/minmatarDroneSpecialization.py
new file mode 100755
index 000000000..2b5e8b1e6
--- /dev/null
+++ b/eos/tests/typeTests/skills/drones/minmatarDroneSpecialization.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Minmatar Drone Specialization"
+
+ # 2% bonus to advanced Minmatar drone damage per level.
+
+ def test_damageMultiplier_droneWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Warrior II"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_droneCombatNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Warrior I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/drones/repairDroneOperation.py b/eos/tests/typeTests/skills/drones/repairDroneOperation.py
new file mode 100755
index 000000000..c6fc88c45
--- /dev/null
+++ b/eos/tests/typeTests/skills/drones/repairDroneOperation.py
@@ -0,0 +1,64 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Repair Drone Operation"
+
+ # 5% increased repair amount per level.
+
+ def test_armorDamageAmount_droneLogistic(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Light Armor Maintenance Bot I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_armorDamageAmount_otherSkillrqRemoteArmorRepairSystems(self):
+ self.buildTested = 0
+ attr = "armorDamageAmount"
+ item = "Medium Remote Armor Repair System I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_shieldBonus_droneLogistic(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Light Shield Maintenance Bot I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_shieldBonus_otherSkillrqShieldEmissionSystems(self):
+ self.buildTested = 0
+ attr = "shieldBonus"
+ item = "Medium Shield Transporter I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/drones/scoutDroneOperation.py b/eos/tests/typeTests/skills/drones/scoutDroneOperation.py
new file mode 100755
index 000000000..8396b8f47
--- /dev/null
+++ b/eos/tests/typeTests/skills/drones/scoutDroneOperation.py
@@ -0,0 +1,21 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Scout Drone Operation"
+
+ # Bonus: drone control range increased by 5000 meters per skill level.
+
+ def test_droneControlRange(self):
+ self.buildTested = 0
+ attr = "droneControlRange"
+ iLvl = 1
+ iIngame = 5000
+ fLvl = 4
+ fIngame = 20000
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl))
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl))
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/drones/sentryDroneInterfacing.py b/eos/tests/typeTests/skills/drones/sentryDroneInterfacing.py
new file mode 100755
index 000000000..4c2ef41fc
--- /dev/null
+++ b/eos/tests/typeTests/skills/drones/sentryDroneInterfacing.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Sentry Drone Interfacing"
+
+ # 5% bonus to Sentry Drone damage per level.
+
+ def test_damageMultiplier_droneSentry(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Garde I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_droneCombatOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Vespa II"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/electronics/__init__.py b/eos/tests/typeTests/skills/electronics/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/skills/electronics/cloaking.py b/eos/tests/typeTests/skills/electronics/cloaking.py
new file mode 100755
index 000000000..f6acafdca
--- /dev/null
+++ b/eos/tests/typeTests/skills/electronics/cloaking.py
@@ -0,0 +1,22 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Cloaking"
+
+ # 10% reduction in targeting delay after uncloaking per skill level.
+
+ def test_cloakingTargetingDelay_moduleCloakingDevice(self):
+ self.buildTested = 0
+ attr = "cloakingTargetingDelay"
+ item = "Prototype Cloaking Device I"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/electronics/cynosuralFieldTheory.py b/eos/tests/typeTests/skills/electronics/cynosuralFieldTheory.py
new file mode 100755
index 000000000..6d57a4916
--- /dev/null
+++ b/eos/tests/typeTests/skills/electronics/cynosuralFieldTheory.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Cynosural Field Theory"
+
+ # 10% reduction in liquid ozone consumption for module activation per skill level.
+
+ def test_consumptionQuantity_moduleCynosuralField(self):
+ self.buildTested = 0
+ attr = "consumptionQuantity"
+ item = "Cynosural Field Generator I"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_consumptionQuantity_moduleOther(self):
+ self.buildTested = 0
+ attr = "consumptionQuantity"
+ item = "Clone Vat Bay I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/electronics/electronicWarfare.py b/eos/tests/typeTests/skills/electronics/electronicWarfare.py
new file mode 100755
index 000000000..f145fa578
--- /dev/null
+++ b/eos/tests/typeTests/skills/electronics/electronicWarfare.py
@@ -0,0 +1,50 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Electronic Warfare"
+
+ # 5% less capacitor need for ECM and ECM Burst systems per skill level.
+
+ def test_capacitorNeed_moduleEcmSkillrq(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "ECM - Multispectral Jammer I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleEcmBurstSkillrq(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "ECM Burst I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleOtherSkillrq(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "ECCM - Omni I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/electronics/electronics.py b/eos/tests/typeTests/skills/electronics/electronics.py
new file mode 100755
index 000000000..7d28eaa33
--- /dev/null
+++ b/eos/tests/typeTests/skills/electronics/electronics.py
@@ -0,0 +1,21 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Electronics"
+
+ # 5% Bonus to ship CPU output per skill level.
+
+ def test_cpuOutput_ship(self):
+ self.buildTested = 0
+ attr = "cpuOutput"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl))
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/electronics/electronicsUpgrades.py b/eos/tests/typeTests/skills/electronics/electronicsUpgrades.py
new file mode 100755
index 000000000..3da96a985
--- /dev/null
+++ b/eos/tests/typeTests/skills/electronics/electronicsUpgrades.py
@@ -0,0 +1,64 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Electronics Upgrades"
+
+ # 5% reduction of CPU needs for all modules requiring Electronics Upgrades per skill level.
+
+ def test_cpu_moduleSensorBackupArraySkillrq(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "RADAR Backup Array I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_cpu_moduleSensorBackupArrayNoSkillrq(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Basic RADAR Backup Array"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_cpu_moduleSignalAmplifierSkillrq(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Signal Amplifier I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_cpu_moduleSignalAmplifierNoSkillrq(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Basic Signal Amplifier"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/electronics/frequencyModulation.py b/eos/tests/typeTests/skills/electronics/frequencyModulation.py
new file mode 100755
index 000000000..9cf4a9a78
--- /dev/null
+++ b/eos/tests/typeTests/skills/electronics/frequencyModulation.py
@@ -0,0 +1,114 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Frequency Modulation"
+
+ # 10% bonus to falloff for ECM per skill level.
+
+ def test_falloff_moduleEcm(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "ECM - Phase Inverter I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Hidden bonus: 10% bonus to falloff for ECM Burst per skill level.
+
+ def test_falloff_moduleEcmBurst(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "ECM Burst I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_falloff_moduleOtherSkillrqElectronicWarfare(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "ECCM Projector I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 10% bonus to falloff for Remote Sensor Dampeners per skill level.
+
+ def test_falloff_moduleRemoteSensorDamper(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "Remote Sensor Dampener I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_falloff_moduleOtherSkillrqSensorLinking(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "Remote Sensor Booster I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 10% bonus to falloff for Tracking Disruptors per skill level.
+
+ def test_falloff_moduleTrackingDisruptor(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "Tracking Disruptor I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 10% bonus to falloff for Target Painters per skill level.
+
+ def test_falloff_moduleTargetPainter(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "Target Painter I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/electronics/longDistanceJamming.py b/eos/tests/typeTests/skills/electronics/longDistanceJamming.py
new file mode 100755
index 000000000..9a4606476
--- /dev/null
+++ b/eos/tests/typeTests/skills/electronics/longDistanceJamming.py
@@ -0,0 +1,126 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Long Distance Jamming"
+
+ # 10% bonus to optimal range of ECM per skill level.
+
+ def test_maxRange_moduleEcmSkillrqEwar(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "ECM - Multispectral Jammer I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxRange_moduleOtherSkillrqEwar(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "ECCM Projector I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_ecmBurstRange_moduleEcmBurst(self):
+ self.buildTested = 0
+ attr = "ecmBurstRange"
+ item = "ECM Burst I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_ecmBurstRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "ecmBurstRange"
+ item = "Remote ECM Burst I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 10% bonus to optimal range of Remote Sensor Dampers per skill level.
+
+ def test_maxRange_moduleRemoteSensorDamperSkillrqSenslink(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Remote Sensor Dampener I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxRange_moduleOtherSkillrqSenslink(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Tracking Link I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 10% bonus to optimal range of Tracking Disruptors per skill level.
+
+ def test_maxRange_moduleTrackingDisruptor(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Tracking Disruptor I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 10% bonus to optimal range of Target Painters per skill level.
+
+ def test_maxRange_moduleTargetPainter(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Target Painter I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/electronics/longRangeTargeting.py b/eos/tests/typeTests/skills/electronics/longRangeTargeting.py
new file mode 100755
index 000000000..50e255bad
--- /dev/null
+++ b/eos/tests/typeTests/skills/electronics/longRangeTargeting.py
@@ -0,0 +1,21 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Long Range Targeting"
+
+ # 5% Bonus to targeting range per skill level.
+
+ def test_maxTargetRange_ship(self):
+ self.buildTested = 0
+ attr = "maxTargetRange"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl))
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/electronics/multitasking.py b/eos/tests/typeTests/skills/electronics/multitasking.py
new file mode 100755
index 000000000..e9a758b12
--- /dev/null
+++ b/eos/tests/typeTests/skills/electronics/multitasking.py
@@ -0,0 +1,21 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Multitasking"
+
+ # +1 extra target per skill level, up to the ship's maximum allowed number of targets locked.
+
+ def test_maxTargetsLockedFromSkills(self):
+ self.buildTested = 0
+ attr = "maxTargetsLockedFromSkills"
+ iLvl = 1
+ iIngame = 1
+ fLvl = 4
+ fIngame = 4
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl))
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl))
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/electronics/projectedElectronicCounterMeasures.py b/eos/tests/typeTests/skills/electronics/projectedElectronicCounterMeasures.py
new file mode 100755
index 000000000..af12ad944
--- /dev/null
+++ b/eos/tests/typeTests/skills/electronics/projectedElectronicCounterMeasures.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Projected Electronic Counter Measures"
+
+ # Each skill level gives a 5% reduction in module activation time.
+
+ def test_duration_remoteEcmBurst(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Remote ECM Burst I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_duration_moduleOther(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Warp Disruptor I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/electronics/propulsionJamming.py b/eos/tests/typeTests/skills/electronics/propulsionJamming.py
new file mode 100755
index 000000000..8d38c6367
--- /dev/null
+++ b/eos/tests/typeTests/skills/electronics/propulsionJamming.py
@@ -0,0 +1,94 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Propulsion Jamming"
+
+ # 5% Reduction to warp scrambler capacitor need per skill level.
+
+ def test_capacitorNeed_moduleWarpDisruptor(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Warp Disruptor I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleWarpDisruptorNoSkillrq(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Warp Disruptor"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 5% Reduction to stasis web capacitor need per skill level.
+
+ def test_capacitorNeed_moduleStasisWebifier(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Stasis Webifier I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleStasisWebifierNoSkillrq(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Stasis Webifier"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleWarpDisruptFieldGenerator(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Warp Disruption Field Generator I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Ice Harvester I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/electronics/sensorLinking.py b/eos/tests/typeTests/skills/electronics/sensorLinking.py
new file mode 100755
index 000000000..5f4481914
--- /dev/null
+++ b/eos/tests/typeTests/skills/electronics/sensorLinking.py
@@ -0,0 +1,50 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Sensor Linking"
+
+ # 5% less capacitor need for sensor link per skill level.
+
+ def test_capacitorNeed_moduleRemoteSensorBooster(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Remote Sensor Booster I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleRemoteSensorDamper(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Remote Sensor Dampener I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleOtherSkillrq(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Tracking Link I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/electronics/signalDispersion.py b/eos/tests/typeTests/skills/electronics/signalDispersion.py
new file mode 100755
index 000000000..c58175efd
--- /dev/null
+++ b/eos/tests/typeTests/skills/electronics/signalDispersion.py
@@ -0,0 +1,56 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Signal Dispersion"
+
+ # 5% bonus to strength of all ECM jammers per skill level.
+
+ def test_scanSensorStrengthBonus_moduleEcm(self):
+ self.buildTested = 0
+ sensorTypes = ("Gravimetric", "Ladar", "Magnetometric", "Radar")
+ item = "ECM - Multispectral Jammer I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ for type in sensorTypes:
+ attr = "scan{0}StrengthBonus".format(type)
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_scanSensorStrengthBonus_moduleEcmBurst(self):
+ self.buildTested = 0
+ sensorTypes = ("Gravimetric", "Ladar", "Magnetometric", "Radar")
+ item = "ECM Burst I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ for type in sensorTypes:
+ attr = "scan{0}StrengthBonus".format(type)
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_scanSensorStrengthBonus_moduleOther(self):
+ self.buildTested = 0
+ sensorTypes = ("Gravimetric", "Ladar", "Magnetometric", "Radar")
+ item = "Remote ECM Burst I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ for type in sensorTypes:
+ attr = "scan{0}StrengthBonus".format(type)
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/electronics/signalSuppression.py b/eos/tests/typeTests/skills/electronics/signalSuppression.py
new file mode 100755
index 000000000..55c64b429
--- /dev/null
+++ b/eos/tests/typeTests/skills/electronics/signalSuppression.py
@@ -0,0 +1,37 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Signal Suppression"
+ self.attrs = ("maxTargetRangeBonus", "scanResolutionBonus")
+
+ # 5% bonus to remote sensor dampers' scan resolution and targeting range suppression per skill level.
+
+ def test_sensorDamp_moduleRemoteSensorDamper(self):
+ self.buildTested = 0
+ item = "Remote Sensor Dampener I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ for attr in self.attrs:
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_sensorDamp_moduleOtherSkillrqSenslink(self):
+ self.buildTested = 0
+ item = "Remote Sensor Booster I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ for attr in self.attrs:
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/electronics/signatureAnalysis.py b/eos/tests/typeTests/skills/electronics/signatureAnalysis.py
new file mode 100755
index 000000000..f622fad12
--- /dev/null
+++ b/eos/tests/typeTests/skills/electronics/signatureAnalysis.py
@@ -0,0 +1,21 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Signature Analysis"
+
+ # 5% improved targeting speed per skill level.
+
+ def test_scanResolution_ship(self):
+ self.buildTested = 0
+ attr = "scanResolution"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl))
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/electronics/signatureFocusing.py b/eos/tests/typeTests/skills/electronics/signatureFocusing.py
new file mode 100755
index 000000000..41815efac
--- /dev/null
+++ b/eos/tests/typeTests/skills/electronics/signatureFocusing.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Signature Focusing"
+
+ # 5% bonus to target painter modules' signature radius multiplier per skill level.
+
+ def test_signatureRadiusBonus_moduleTargetPainter(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "Target Painter I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_signatureRadiusBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "signatureRadiusBonus"
+ item = "1MN MicroWarpdrive I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/electronics/survey.py b/eos/tests/typeTests/skills/electronics/survey.py
new file mode 100755
index 000000000..216a884d7
--- /dev/null
+++ b/eos/tests/typeTests/skills/electronics/survey.py
@@ -0,0 +1,68 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Survey"
+
+ # 5% improvement per level in the scan speed of cargo scanner.
+
+ def test_duration_moduleCargoScanner(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Cargo Scanner I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 5% improvement per level in the scan speed of ship scanner.
+
+ def test_duration_moduleShipScanner(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Ship Scanner I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 5% improvement per level in the scan speed of survey scanner.
+
+ def test_duration_moduleSurveyScanner(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Survey Scanner I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_duration_moduleOther(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Analyzer I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/electronics/targetPainting.py b/eos/tests/typeTests/skills/electronics/targetPainting.py
new file mode 100755
index 000000000..066dc98bc
--- /dev/null
+++ b/eos/tests/typeTests/skills/electronics/targetPainting.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Target Painting"
+
+ # 5% less capacitor need for target painters per skill level.
+
+ def test_capacitorNeed_moduleTargetPainter(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Target Painter I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Salvager I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/electronics/targeting.py b/eos/tests/typeTests/skills/electronics/targeting.py
new file mode 100755
index 000000000..a94bb412b
--- /dev/null
+++ b/eos/tests/typeTests/skills/electronics/targeting.py
@@ -0,0 +1,21 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Targeting"
+
+ # +1 extra target per skill level, up to the ship's maximum allowed number of targets locked.
+
+ def test_maxTargetsLockedFromSkills(self):
+ self.buildTested = 0
+ attr = "maxTargetsLockedFromSkills"
+ iLvl = 1
+ iIngame = 1
+ fLvl = 4
+ fIngame = 4
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl))
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl))
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/electronics/turretDestabilization.py b/eos/tests/typeTests/skills/electronics/turretDestabilization.py
new file mode 100755
index 000000000..a001b8f2f
--- /dev/null
+++ b/eos/tests/typeTests/skills/electronics/turretDestabilization.py
@@ -0,0 +1,37 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Turret Destabilization"
+ self.attrs = ("maxRangeBonus", "falloffBonus", "trackingSpeedBonus")
+
+ # 5% bonus to Tracking Disruptor modules' tracking speed, optimal range and falloff disruption per skill level.
+
+ def test_turretDisruption_moduleTrackingDisruptor(self):
+ self.buildTested = 0
+ item = "Tracking Disruptor I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ for attr in self.attrs:
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_turretDisruption_moduleOther(self):
+ self.buildTested = 0
+ item = "Tracking Link I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ for attr in self.attrs:
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/electronics/weaponDisruption.py b/eos/tests/typeTests/skills/electronics/weaponDisruption.py
new file mode 100755
index 000000000..80e254930
--- /dev/null
+++ b/eos/tests/typeTests/skills/electronics/weaponDisruption.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Weapon Disruption"
+
+ # 5% less capacitor need for weapon disruptors per skill level.
+
+ def test_capacitorNeed_moduleTrackingDisruptor(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Tracking Disruptor I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "ECM Burst I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/engineering/__init__.py b/eos/tests/typeTests/skills/engineering/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/skills/engineering/capitalEnergyEmissionSystems.py b/eos/tests/typeTests/skills/engineering/capitalEnergyEmissionSystems.py
new file mode 100755
index 000000000..e4272ac76
--- /dev/null
+++ b/eos/tests/typeTests/skills/engineering/capitalEnergyEmissionSystems.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Capital Energy Emission Systems"
+
+ # 5% reduced capacitor need of capital energy emission systems per skill level.
+
+ def test_capacitorNeed_moduleEnergyTransferSkillrq(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Capital Energy Transfer Array I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleEnergyTransferNoSkillrq(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Small Energy Transfer Array I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/engineering/capitalShieldEmissionSystems.py b/eos/tests/typeTests/skills/engineering/capitalShieldEmissionSystems.py
new file mode 100755
index 000000000..12a7d69a0
--- /dev/null
+++ b/eos/tests/typeTests/skills/engineering/capitalShieldEmissionSystems.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Capital Shield Emission Systems"
+
+ # 5% reduced capacitor need for capital shield emission system modules per skill level.
+
+ def test_capacitorNeed_moduleShieldTransporterSkillrq(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Capital Shield Transporter I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleShieldTransporterNoSkillrq(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Small Shield Transporter I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/engineering/capitalShieldOperation.py b/eos/tests/typeTests/skills/engineering/capitalShieldOperation.py
new file mode 100755
index 000000000..b0c7c2bf2
--- /dev/null
+++ b/eos/tests/typeTests/skills/engineering/capitalShieldOperation.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Capital Shield Operation"
+
+ # 2% reduction in capacitor need for capital shield boosters per skill level.
+
+ def test_capacitorNeed_moduleShieldBoosterSkillrq(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Capital Shield Booster I"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleShieldBoosterNoSkillrq(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Small Shield Booster I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/engineering/emShieldCompensation.py b/eos/tests/typeTests/skills/engineering/emShieldCompensation.py
new file mode 100755
index 000000000..046b170a8
--- /dev/null
+++ b/eos/tests/typeTests/skills/engineering/emShieldCompensation.py
@@ -0,0 +1,94 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "EM Shield Compensation"
+
+ # To passive shield hardeners: 5% bonus per skill level to Shield EM resistance
+
+ def test_emDamageResistanceBonus_moduleShieldAmplifierSkillrqShieldUpgrades(self):
+ self.buildTested = 0
+ attr = "emDamageResistanceBonus"
+ item = "Magnetic Scattering Amplifier I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamageResistanceBonus_moduleShieldAmplifierSkillrqEngineering(self):
+ self.buildTested = 0
+ attr = "emDamageResistanceBonus"
+ item = "Basic Magnetic Scattering Amplifier"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamageResistanceBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "emDamageResistanceBonus"
+ item = "Large Anti-EM Pump I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # To active shield hardeners: 3% bonus per skill level to Shield EM resistance when the modules are not active
+
+ def test_passiveEmDamageResistanceBonus_moduleShieldHardenerSkillrqTacticalShieldManipulation(self):
+ self.buildTested = 0
+ attr = "passiveEmDamageResistanceBonus"
+ item = "Photon Scattering Field I"
+ iLvl = 1
+ iIngame = 3.0
+ fLvl = 4
+ fIngame = 12.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_passiveEmDamageResistanceBonus_moduleShieldHardenerSkillrqEngineering(self):
+ self.buildTested = 0
+ attr = "passiveEmDamageResistanceBonus"
+ item = "Civilian Photon Scattering Field"
+ iLvl = 1
+ iIngame = 3.0
+ fLvl = 4
+ fIngame = 12.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_passiveEmDamageResistanceBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "passiveEmDamageResistanceBonus"
+ item = "Armor EM Hardener I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/engineering/energyEmissionSystems.py b/eos/tests/typeTests/skills/engineering/energyEmissionSystems.py
new file mode 100755
index 000000000..08615c695
--- /dev/null
+++ b/eos/tests/typeTests/skills/engineering/energyEmissionSystems.py
@@ -0,0 +1,50 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Energy Emission Systems"
+
+ # 5% reduced capacitor need of energy emission weapons per skill level.
+
+ def test_capacitorNeed_moduleEnergyTransfer(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Medium Energy Transfer Array I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleEnergyDestabilizer(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Medium Energy Neutralizer I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "200mm Railgun I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/engineering/energyGridUpgrades.py b/eos/tests/typeTests/skills/engineering/energyGridUpgrades.py
new file mode 100755
index 000000000..2adda9c4a
--- /dev/null
+++ b/eos/tests/typeTests/skills/engineering/energyGridUpgrades.py
@@ -0,0 +1,148 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Energy Grid Upgrades"
+
+ # 5% reduction in CPU needs of modules requiring Energy Grid Upgrades per skill level.
+
+ def test_cpu_moduleCapacitorBattery(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Medium Capacitor Battery I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_cpu_moduleCapacitorBatteryNoSkillrq(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Micro Capacitor Battery I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_cpu_moduleCapacitorFluxCoil(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Capacitor Flux Coil I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_cpu_moduleCapacitorPowerRelay(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Capacitor Power Relay I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_cpu_moduleCapacitorRecharger(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Cap Recharger I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_cpu_modulePowerDiagnosticSystem(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Power Diagnostic System I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_cpu_moduleReactorControlUnit(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Reactor Control Unit I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_cpu_moduleShieldFluxCoil(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Shield Flux Coil I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_cpu_moduleShieldPowerRelay(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Shield Power Relay I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Miner I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/engineering/energyManagement.py b/eos/tests/typeTests/skills/engineering/energyManagement.py
new file mode 100755
index 000000000..e72e8ce08
--- /dev/null
+++ b/eos/tests/typeTests/skills/engineering/energyManagement.py
@@ -0,0 +1,21 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Energy Management"
+
+ # 5% bonus to capacitor capacity per skill level.
+
+ def test_capacitorCapacity_ship(self):
+ self.buildTested = 0
+ attr = "capacitorCapacity"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl))
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/engineering/energyPulseWeapons.py b/eos/tests/typeTests/skills/engineering/energyPulseWeapons.py
new file mode 100755
index 000000000..ade507b41
--- /dev/null
+++ b/eos/tests/typeTests/skills/engineering/energyPulseWeapons.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Energy Pulse Weapons"
+
+ # 5% decrease in smartbomb duration per skill level.
+
+ def test_duration_moduleSmartBomb(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Medium EMP Smartbomb I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_duration_moduleOther(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Ice Harvester I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/engineering/energySystemsOperation.py b/eos/tests/typeTests/skills/engineering/energySystemsOperation.py
new file mode 100755
index 000000000..ed484e4f8
--- /dev/null
+++ b/eos/tests/typeTests/skills/engineering/energySystemsOperation.py
@@ -0,0 +1,21 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Energy Systems Operation"
+
+ # 5% reduction in capacitor recharge time per skill level.
+
+ def test_rechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "rechargeRate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl))
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/engineering/engineering.py b/eos/tests/typeTests/skills/engineering/engineering.py
new file mode 100755
index 000000000..7ef84a71f
--- /dev/null
+++ b/eos/tests/typeTests/skills/engineering/engineering.py
@@ -0,0 +1,21 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Engineering"
+
+ # 5% Bonus to ship's powergrid output per skill level.
+
+ def test_powerOutput_ship(self):
+ self.buildTested = 0
+ attr = "powerOutput"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl))
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/engineering/explosiveShieldCompensation.py b/eos/tests/typeTests/skills/engineering/explosiveShieldCompensation.py
new file mode 100755
index 000000000..96fc29e22
--- /dev/null
+++ b/eos/tests/typeTests/skills/engineering/explosiveShieldCompensation.py
@@ -0,0 +1,94 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Explosive Shield Compensation"
+
+ # To passive shield hardeners: 5% bonus per skill level to Shield Explosive resistance
+
+ def test_explosiveDamageResistanceBonus_moduleShieldAmplifierSkillrqShieldUpgrades(self):
+ self.buildTested = 0
+ attr = "explosiveDamageResistanceBonus"
+ item = "Explosion Dampening Amplifier I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamageResistanceBonus_moduleShieldAmplifierSkillrqEngineering(self):
+ self.buildTested = 0
+ attr = "explosiveDamageResistanceBonus"
+ item = "Basic Explosion Dampening Amplifier"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamageResistanceBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "explosiveDamageResistanceBonus"
+ item = "Small Anti-Explosive Screen Reinforcer I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # To active shield hardeners: 3% bonus per skill level to Shield Explosive resistance when the modules are not active
+
+ def test_passiveExplosiveDamageResistanceBonus_moduleShieldHardenerSkillrqTacticalShieldManipulation(self):
+ self.buildTested = 0
+ attr = "passiveExplosiveDamageResistanceBonus"
+ item = "Explosion Dampening Field I"
+ iLvl = 1
+ iIngame = 3.0
+ fLvl = 4
+ fIngame = 12.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_passiveExplosiveDamageResistanceBonus_moduleShieldHardenerSkillrqEngineering(self):
+ self.buildTested = 0
+ attr = "passiveExplosiveDamageResistanceBonus"
+ item = "Civilian Explosion Dampening Field"
+ iLvl = 1
+ iIngame = 3.0
+ fLvl = 4
+ fIngame = 12.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_passiveExplosiveDamageResistanceBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "passiveExplosiveDamageResistanceBonus"
+ item = "Armor Explosive Hardener I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/engineering/kineticShieldCompensation.py b/eos/tests/typeTests/skills/engineering/kineticShieldCompensation.py
new file mode 100755
index 000000000..44e1ba042
--- /dev/null
+++ b/eos/tests/typeTests/skills/engineering/kineticShieldCompensation.py
@@ -0,0 +1,94 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Kinetic Shield Compensation"
+
+ # To passive shield hardeners: 5% bonus per skill level to Shield Kinetic resistance
+
+ def test_kineticDamageResistanceBonus_moduleShieldAmplifierSkillrqShieldUpgrades(self):
+ self.buildTested = 0
+ attr = "kineticDamageResistanceBonus"
+ item = "Kinetic Deflection Amplifier I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamageResistanceBonus_moduleShieldAmplifierSkillrqEngineering(self):
+ self.buildTested = 0
+ attr = "kineticDamageResistanceBonus"
+ item = "Basic Kinetic Deflection Amplifier"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamageResistanceBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "kineticDamageResistanceBonus"
+ item = "Medium Anti-Kinetic Screen Reinforcer I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # To active shield hardeners: 3% bonus per skill level to Shield Kinetic resistance when the modules are not active
+
+ def test_passiveKineticDamageResistanceBonus_moduleShieldHardenerSkillrqTacticalShieldManipulation(self):
+ self.buildTested = 0
+ attr = "passiveKineticDamageResistanceBonus"
+ item = "Ballistic Deflection Field I"
+ iLvl = 1
+ iIngame = 3.0
+ fLvl = 4
+ fIngame = 12.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_passiveKineticDamageResistanceBonus_moduleShieldHardenerSkillrqEngineering(self):
+ self.buildTested = 0
+ attr = "passiveKineticDamageResistanceBonus"
+ item = "Civilian Ballistic Deflection Field"
+ iLvl = 1
+ iIngame = 3.0
+ fLvl = 4
+ fIngame = 12.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_passiveKineticDamageResistanceBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "passiveKineticDamageResistanceBonus"
+ item = "Armor Kinetic Hardener I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/engineering/shieldCompensation.py b/eos/tests/typeTests/skills/engineering/shieldCompensation.py
new file mode 100755
index 000000000..3a337473f
--- /dev/null
+++ b/eos/tests/typeTests/skills/engineering/shieldCompensation.py
@@ -0,0 +1,64 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Shield Compensation"
+
+ # 2% less capacitor need for shield boosters per skill level.
+
+ def test_capacitorNeed_moduleShieldBoosterSkillrqShieldOperation(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Large Shield Booster I"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleShieldBoosterSkillrqCapitalShieldOperation(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Capital Shield Booster I"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleShieldBoosterSkillrqNone(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Shield Booster I"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Medium Proton Smartbomb I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/engineering/shieldEmissionSystems.py b/eos/tests/typeTests/skills/engineering/shieldEmissionSystems.py
new file mode 100755
index 000000000..804c0d233
--- /dev/null
+++ b/eos/tests/typeTests/skills/engineering/shieldEmissionSystems.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Shield Emission Systems"
+
+ # 5% reduced capacitor need for shield emission system modules per skill level.
+
+ def test_capacitorNeed_moduleShieldTransporter(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Large Shield Transporter I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleShieldTransporterNoSkillrq(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Remote Shield Transporter"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/engineering/shieldManagement.py b/eos/tests/typeTests/skills/engineering/shieldManagement.py
new file mode 100755
index 000000000..ad5564358
--- /dev/null
+++ b/eos/tests/typeTests/skills/engineering/shieldManagement.py
@@ -0,0 +1,21 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Shield Management"
+
+ # 5% bonus to shield capacity per skill level.
+
+ def test_shieldCapacity_ship(self):
+ self.buildTested = 0
+ attr = "shieldCapacity"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl))
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/engineering/shieldOperation.py b/eos/tests/typeTests/skills/engineering/shieldOperation.py
new file mode 100755
index 000000000..b950426ef
--- /dev/null
+++ b/eos/tests/typeTests/skills/engineering/shieldOperation.py
@@ -0,0 +1,21 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Shield Operation"
+
+ # 5% reduction in shield recharge time per skill level.
+
+ def test_shieldRechargeRate_ship(self):
+ self.buildTested = 0
+ attr = "shieldRechargeRate"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl))
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/engineering/shieldUpgrades.py b/eos/tests/typeTests/skills/engineering/shieldUpgrades.py
new file mode 100755
index 000000000..4eec760d9
--- /dev/null
+++ b/eos/tests/typeTests/skills/engineering/shieldUpgrades.py
@@ -0,0 +1,79 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Shield Upgrades"
+
+ # 5% reduction in shield upgrade powergrid needs.
+
+ def test_power_moduleShieldAmplifier(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Magnetic Scattering Amplifier I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_power_moduleShieldExtender(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Large Shield Extender I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_power_moduleShieldExtenderNoSkillrq(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Micro Shield Extender I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+
+ def test_power_moduleShieldRecharger(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Shield Recharger I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_power_moduleOther(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Large EMP Smartbomb I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/engineering/tacticalShieldManipulation.py b/eos/tests/typeTests/skills/engineering/tacticalShieldManipulation.py
new file mode 100755
index 000000000..0a0d315f6
--- /dev/null
+++ b/eos/tests/typeTests/skills/engineering/tacticalShieldManipulation.py
@@ -0,0 +1,21 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Tactical Shield Manipulation"
+
+ # Reduces the chance of damage penetrating the shield when it falls below 25% by 5% per skill level, with 0% chance at level 5.
+
+ def test_shieldUniformity(self):
+ self.buildTested = 0
+ attr = "shieldUniformity"
+ iLvl = 1
+ iIngame = 0.8
+ fLvl = 4
+ fIngame = 0.95
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl))
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl))
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/engineering/thermicShieldCompensation.py b/eos/tests/typeTests/skills/engineering/thermicShieldCompensation.py
new file mode 100755
index 000000000..c25c47d41
--- /dev/null
+++ b/eos/tests/typeTests/skills/engineering/thermicShieldCompensation.py
@@ -0,0 +1,94 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Thermic Shield Compensation"
+
+ # To passive shield hardeners: 5% bonus per skill level to Shield Thermal resistance
+
+ def test_thermalDamageResistanceBonus_moduleShieldAmplifierSkillrqShieldUpgrades(self):
+ self.buildTested = 0
+ attr = "thermalDamageResistanceBonus"
+ item = "Heat Dissipation Amplifier I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamageResistanceBonus_moduleShieldAmplifierSkillrqEngineering(self):
+ self.buildTested = 0
+ attr = "thermalDamageResistanceBonus"
+ item = "Basic Heat Dissipation Amplifier"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamageResistanceBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "thermalDamageResistanceBonus"
+ item = "Small Anti-Thermic Pump I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # To active shield hardeners: 3% bonus per skill level to Shield Thermal resistance when the modules are not active
+
+ def test_passiveThermicDamageResistanceBonus_moduleShieldHardenerSkillrqTacticalShieldManipulation(self):
+ self.buildTested = 0
+ attr = "passiveThermicDamageResistanceBonus"
+ item = "Heat Dissipation Field I"
+ iLvl = 1
+ iIngame = 3.0
+ fLvl = 4
+ fIngame = 12.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_passiveThermicDamageResistanceBonus_moduleShieldHardenerSkillrqEngineering(self):
+ self.buildTested = 0
+ attr = "passiveThermicDamageResistanceBonus"
+ item = "Civilian Heat Dissipation Field"
+ iLvl = 1
+ iIngame = 3.0
+ fLvl = 4
+ fIngame = 12.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_passiveThermicDamageResistanceBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "passiveThermicDamageResistanceBonus"
+ item = "Armor Thermic Hardener I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/__init__.py b/eos/tests/typeTests/skills/gunnery/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/skills/gunnery/advancedWeaponUpgrades.py b/eos/tests/typeTests/skills/gunnery/advancedWeaponUpgrades.py
new file mode 100755
index 000000000..19344355f
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/advancedWeaponUpgrades.py
@@ -0,0 +1,206 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Advanced Weapon Upgrades"
+
+ # Reduces the powergrid needs of weapon turrets by 2% per skill level.
+
+ def test_power_moduleEnergyWeapon(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Dual Light Beam Laser I"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_power_moduleHybridWeapon(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "250mm Railgun I"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_power_moduleProjectileWeapon(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "1400mm Howitzer Artillery I"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # Reduces the powergrid needs of launchers by 2% per skill level.
+
+ def test_power_moduleMissileLauncherStandard(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Standard Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_power_moduleMissileLauncherStandardNoSkillrqMissileLauncherOperation(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Civilian Standard Missile Launcher"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_power_moduleMissileLauncherRocket(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Rocket Launcher I"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_power_moduleMissileLauncherAssault(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_power_moduleMissileLauncherHeavy(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Heavy Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_power_moduleMissileLauncherHeavyAssault(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Heavy Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_power_moduleMissileLauncherCruise(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Cruise Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_power_moduleMissileLauncherSiege(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Siege Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_power_moduleMissileLauncherCitadel(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Citadel Cruise Launcher I"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_power_moduleMissileLauncherBomb(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Bomb Launcher I"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_power_moduleOther(self):
+ self.buildTested = 0
+ attr = "power"
+ item = "Large Hull Repairer I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/capitalEnergyTurret.py b/eos/tests/typeTests/skills/gunnery/capitalEnergyTurret.py
new file mode 100755
index 000000000..b27dd27d7
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/capitalEnergyTurret.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Capital Energy Turret"
+
+ # 5% Bonus to capital energy turret damage per level.
+
+ def test_damageMultiplier_moduleEnergyWeaponCapital(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual Giga Beam Laser I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleEnergyWeapon(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Gatling Pulse Laser I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/capitalHybridTurret.py b/eos/tests/typeTests/skills/gunnery/capitalHybridTurret.py
new file mode 100755
index 000000000..99d794ba5
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/capitalHybridTurret.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Capital Hybrid Turret"
+
+ # 5% Bonus to capital hybrid turret damage per level.
+
+ def test_damageMultiplier_moduleHybridWeaponCapital(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Ion Siege Blaster Cannon I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleHybridWeapon(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Electron Blaster Cannon I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/capitalProjectileTurret.py b/eos/tests/typeTests/skills/gunnery/capitalProjectileTurret.py
new file mode 100755
index 000000000..97bf5e546
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/capitalProjectileTurret.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Capital Projectile Turret"
+
+ # 5% Bonus to capital projectile turret damage per level.
+
+ def test_damageMultiplier_moduleProjectileWeaponCapital(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "6x2500mm Repeating Artillery I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleProjectileWeapon(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "125mm Gatling AutoCannon I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/controlledBursts.py b/eos/tests/typeTests/skills/gunnery/controlledBursts.py
new file mode 100755
index 000000000..dc1828ee4
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/controlledBursts.py
@@ -0,0 +1,50 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Controlled Bursts"
+
+ # 5% reduction in capacitor need of weapon turrets per skill level.
+
+ def test_capacitorNeed_moduleEnergyWeapon(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Quad Light Beam Laser I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleHybridWeapon(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "200mm Railgun I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Armor EM Hardener I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/gunnery.py b/eos/tests/typeTests/skills/gunnery/gunnery.py
new file mode 100755
index 000000000..e1dd7dc1b
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/gunnery.py
@@ -0,0 +1,64 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Gunnery"
+
+ # 2% Bonus to weapon turrets' rate of fire per skill level.
+
+ def test_speed_moduleEnergyWeapon(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Dual Light Beam Laser I"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleHybridWeapon(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Dual 150mm Railgun I"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleProjectileWeapon(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "150mm Light AutoCannon I"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Rocket Launcher I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/largeAtrillerySpecialization.py b/eos/tests/typeTests/skills/gunnery/largeAtrillerySpecialization.py
new file mode 100755
index 000000000..d4edecc2f
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/largeAtrillerySpecialization.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Large Artillery Specialization"
+
+ # 2% bonus per skill level to the damage of large turrets requiring Large Artillery Specialization.
+
+ def test_damageMultiplier_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "1400mm Howitzer Artillery II"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "1400mm Howitzer Artillery I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/largeAutocannonSpecialization.py b/eos/tests/typeTests/skills/gunnery/largeAutocannonSpecialization.py
new file mode 100755
index 000000000..deb0148d0
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/largeAutocannonSpecialization.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Large Autocannon Specialization"
+
+ # 2% Bonus per skill level to the damage of large turrets requiring Large Autocannon Specialization.
+
+ def test_damageMultiplier_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "800mm Repeating Artillery II"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "800mm Repeating Artillery I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/largeBeamLaserSpecialization.py b/eos/tests/typeTests/skills/gunnery/largeBeamLaserSpecialization.py
new file mode 100755
index 000000000..8246b131e
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/largeBeamLaserSpecialization.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Large Beam Laser Specialization"
+
+ # 2% Bonus per skill level to the damage of large turrets requiring Large Beam Laser Specialization.
+
+ def test_damageMultiplier_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Tachyon Beam Laser II"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Tachyon Beam Laser I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/largeBlasterSpecialization.py b/eos/tests/typeTests/skills/gunnery/largeBlasterSpecialization.py
new file mode 100755
index 000000000..08922195f
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/largeBlasterSpecialization.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Large Blaster Specialization"
+
+ # 2% Bonus per skill level to the damage of large turrets requiring Large Blaster Specialization.
+
+ def test_damageMultiplier_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Neutron Blaster Cannon II"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Neutron Blaster Cannon I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/largeEnergyTurret.py b/eos/tests/typeTests/skills/gunnery/largeEnergyTurret.py
new file mode 100755
index 000000000..be143a533
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/largeEnergyTurret.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Large Energy Turret"
+
+ # 5% Bonus to large energy turret damage per level.
+
+ def test_damageMultiplier_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual Heavy Beam Laser I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Quad Light Beam Laser I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/largeHybridTurret.py b/eos/tests/typeTests/skills/gunnery/largeHybridTurret.py
new file mode 100755
index 000000000..19f883b8b
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/largeHybridTurret.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Large Hybrid Turret"
+
+ # 5% Bonus to large hybrid turret damage per level.
+
+ def test_damageMultiplier_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Electron Blaster Cannon I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "150mm Railgun I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/largeProjectileTurret.py b/eos/tests/typeTests/skills/gunnery/largeProjectileTurret.py
new file mode 100755
index 000000000..1d559b72e
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/largeProjectileTurret.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Large Projectile Turret"
+
+ # 5% Bonus to large projectile turret damage per level.
+
+ def test_damageMultiplier_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual 425mm AutoCannon I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "425mm AutoCannon I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/largePulseLaserSpecialization.py b/eos/tests/typeTests/skills/gunnery/largePulseLaserSpecialization.py
new file mode 100755
index 000000000..52016589a
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/largePulseLaserSpecialization.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Large Pulse Laser Specialization"
+
+ # 2% bonus per skill level to the damage of large turrets requiring Large Pulse Laser Specialization.
+
+ def test_damageMultiplier_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Mega Pulse Laser II"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Mega Pulse Laser I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/largeRailgunSpecialization.py b/eos/tests/typeTests/skills/gunnery/largeRailgunSpecialization.py
new file mode 100755
index 000000000..1cb52f6d6
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/largeRailgunSpecialization.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Large Railgun Specialization"
+
+ # 2% bonus per skill level to the damage of large turrets requiring Large Railgun Specialization.
+
+ def test_damageMultiplier_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "425mm Railgun II"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "425mm Railgun I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/mediumAtrillerySpecialization.py b/eos/tests/typeTests/skills/gunnery/mediumAtrillerySpecialization.py
new file mode 100755
index 000000000..97bc01f3d
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/mediumAtrillerySpecialization.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Medium Artillery Specialization"
+
+ # 2% bonus per skill level to the damage of medium turrets requiring Medium Artillery Specialization.
+
+ def test_damageMultiplier_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "720mm Howitzer Artillery II"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "720mm Howitzer Artillery I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/mediumAutocannonSpecialization.py b/eos/tests/typeTests/skills/gunnery/mediumAutocannonSpecialization.py
new file mode 100755
index 000000000..7d4eed8d9
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/mediumAutocannonSpecialization.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Medium Autocannon Specialization"
+
+ # 2% bonus per skill level to the damage of medium turrets requiring Medium Autocannon Specialization.
+
+ def test_damageMultiplier_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "425mm AutoCannon II"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "425mm AutoCannon I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/mediumBeamLaserSpecialization.py b/eos/tests/typeTests/skills/gunnery/mediumBeamLaserSpecialization.py
new file mode 100755
index 000000000..9df0903e2
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/mediumBeamLaserSpecialization.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Medium Beam Laser Specialization"
+
+ # 2% bonus per skill level to the damage of medium turrets requiring Medium Beam Laser Specialization.
+
+ def test_damageMultiplier_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Beam Laser II"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Beam Laser I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/mediumBlasterSpecialization.py b/eos/tests/typeTests/skills/gunnery/mediumBlasterSpecialization.py
new file mode 100755
index 000000000..99d82c575
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/mediumBlasterSpecialization.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Medium Blaster Specialization"
+
+ # 2% bonus per skill level to the damage of medium turrets requiring Medium Blaster Specialization.
+
+ def test_damageMultiplier_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Neutron Blaster II"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Neutron Blaster I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/mediumEnergyTurret.py b/eos/tests/typeTests/skills/gunnery/mediumEnergyTurret.py
new file mode 100755
index 000000000..fe5897517
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/mediumEnergyTurret.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Medium Energy Turret"
+
+ # 5% Bonus to medium energy turret damage per level.
+
+ def test_damageMultiplier_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Pulse Laser I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Gatling Pulse Laser I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/mediumHybridTurret.py b/eos/tests/typeTests/skills/gunnery/mediumHybridTurret.py
new file mode 100755
index 000000000..ad0209c78
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/mediumHybridTurret.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Medium Hybrid Turret"
+
+ # 5% Bonus to medium hybrid turret damage per level.
+
+ def test_damageMultiplier_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "200mm Railgun II"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "425mm Railgun I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/mediumProjectileTurret.py b/eos/tests/typeTests/skills/gunnery/mediumProjectileTurret.py
new file mode 100755
index 000000000..1ad80bf6e
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/mediumProjectileTurret.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Medium Projectile Turret"
+
+ # 5% Bonus to medium projectile turret damage per level.
+
+ def test_damageMultiplier_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "650mm Artillery Cannon I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "200mm AutoCannon I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/mediumPulseLaserSpecialization.py b/eos/tests/typeTests/skills/gunnery/mediumPulseLaserSpecialization.py
new file mode 100755
index 000000000..0eae0358b
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/mediumPulseLaserSpecialization.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Medium Pulse Laser Specialization"
+
+ # 2% bonus per skill level to the damage of medium turrets requiring Medium Pulse Laser Specialization.
+
+ def test_damageMultiplier_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Pulse Laser II"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Pulse Laser I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/mediumRailgunSpecialization.py b/eos/tests/typeTests/skills/gunnery/mediumRailgunSpecialization.py
new file mode 100755
index 000000000..2324454e6
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/mediumRailgunSpecialization.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Medium Railgun Specialization"
+
+ # 2% bonus per skill level to the damage of medium turrets requiring Medium Railgun Specialization.
+
+ def test_damageMultiplier_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "250mm Railgun II"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "250mm Railgun I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/motionPrediction.py b/eos/tests/typeTests/skills/gunnery/motionPrediction.py
new file mode 100755
index 000000000..06c8eae6c
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/motionPrediction.py
@@ -0,0 +1,50 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Motion Prediction"
+
+ # 5% bonus per skill level to weapon turret tracking speeds.
+
+ def test_trackingSpeed_moduleEnergyWeapon(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "Dual Heavy Beam Laser I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_trackingSpeed_moduleHybridWeapon(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "250mm Railgun I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_trackingSpeed_moduleProjectileWeapon(self):
+ self.buildTested = 0
+ attr = "trackingSpeed"
+ item = "150mm Light AutoCannon I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/rapidFiring.py b/eos/tests/typeTests/skills/gunnery/rapidFiring.py
new file mode 100755
index 000000000..70a63db25
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/rapidFiring.py
@@ -0,0 +1,64 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Rapid Firing"
+
+ # 4% bonus per skill level to weapon turret rate of fire.
+
+ def test_speed_moduleEnergyWeapon(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Medium Pulse Laser I"
+ iLvl = 1
+ iIngame = 0.96
+ fLvl = 4
+ fIngame = 0.84
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleHybridWeapon(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Neutron Blaster I"
+ iLvl = 1
+ iIngame = 0.96
+ fLvl = 4
+ fIngame = 0.84
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleProjectileWeapon(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "220mm Vulcan AutoCannon I"
+ iLvl = 1
+ iIngame = 0.96
+ fLvl = 4
+ fIngame = 0.84
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/sharpshooter.py b/eos/tests/typeTests/skills/gunnery/sharpshooter.py
new file mode 100755
index 000000000..36b553af4
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/sharpshooter.py
@@ -0,0 +1,64 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Sharpshooter"
+
+ # 5% bonus to weapon turret optimal range per skill level.
+
+ def test_maxRange_moduleEnergyWeapon(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Focused Medium Beam Laser I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxRange_moduleHybridWeapon(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Dual 1000mm Railgun I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxRange_moduleProjectileWeapon(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "425mm AutoCannon I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxRange_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxRange"
+ item = "Miner I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/smallAtrillerySpecialization.py b/eos/tests/typeTests/skills/gunnery/smallAtrillerySpecialization.py
new file mode 100755
index 000000000..5688489ed
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/smallAtrillerySpecialization.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Small Artillery Specialization"
+
+ # 2% bonus per skill level to the damage of small turrets requiring Small Artillery Specialization.
+
+ def test_damageMultiplier_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "280mm Howitzer Artillery II"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "280mm Howitzer Artillery I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/smallAutocannonSpecialization.py b/eos/tests/typeTests/skills/gunnery/smallAutocannonSpecialization.py
new file mode 100755
index 000000000..997995914
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/smallAutocannonSpecialization.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Small Autocannon Specialization"
+
+ # 2% bonus per skill level to the damage of small turrets requiring Small Autocannon Specialization.
+
+ def test_damageMultiplier_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "200mm AutoCannon II"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "200mm AutoCannon I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/smallBeamLaserSpecialization.py b/eos/tests/typeTests/skills/gunnery/smallBeamLaserSpecialization.py
new file mode 100755
index 000000000..1e9635296
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/smallBeamLaserSpecialization.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Small Beam Laser Specialization"
+
+ # 2% bonus per skill level to the damage of small turrets requiring Small Beam Laser Specialization.
+
+ def test_damageMultiplier_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Medium Beam Laser II"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Medium Beam Laser I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/smallBlasterSpecialization.py b/eos/tests/typeTests/skills/gunnery/smallBlasterSpecialization.py
new file mode 100755
index 000000000..3370cb85c
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/smallBlasterSpecialization.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Small Blaster Specialization"
+
+ # 2% bonus per skill level to the damage of small turrets requiring Small Blaster Specialization.
+
+ def test_damageMultiplier_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Light Neutron Blaster II"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Light Neutron Blaster I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/smallEnergyTurret.py b/eos/tests/typeTests/skills/gunnery/smallEnergyTurret.py
new file mode 100755
index 000000000..a1e9f05be
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/smallEnergyTurret.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Small Energy Turret"
+
+ # 5% Bonus to small energy turret damage per level.
+
+ def test_damageMultiplier_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual Light Pulse Laser I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heavy Pulse Laser I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/smallHybridTurret.py b/eos/tests/typeTests/skills/gunnery/smallHybridTurret.py
new file mode 100755
index 000000000..bc5598317
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/smallHybridTurret.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Small Hybrid Turret"
+
+ # 5% Bonus to small hybrid turret damage per level.
+
+ def test_damageMultiplier_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "150mm Railgun I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Ion Blaster Cannon I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/smallProjectileTurret.py b/eos/tests/typeTests/skills/gunnery/smallProjectileTurret.py
new file mode 100755
index 000000000..f35e4b359
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/smallProjectileTurret.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Small Projectile Turret"
+
+ # 5% Bonus to small projectile turret damage per level.
+
+ def test_damageMultiplier_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "280mm Howitzer Artillery I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "720mm Howitzer Artillery I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/smallPulseLaserSpecialization.py b/eos/tests/typeTests/skills/gunnery/smallPulseLaserSpecialization.py
new file mode 100755
index 000000000..e6745ebad
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/smallPulseLaserSpecialization.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Small Pulse Laser Specialization"
+
+ # 2% bonus per skill level to the damage of small turrets requiring Small Pulse Laser Specialization.
+
+ def test_damageMultiplier_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Medium Pulse Laser II"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Medium Pulse Laser I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/smallRailgunSpecialization.py b/eos/tests/typeTests/skills/gunnery/smallRailgunSpecialization.py
new file mode 100755
index 000000000..219139d21
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/smallRailgunSpecialization.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Small Railgun Specialization"
+
+ # 2% bonus per skill level to the damage of small turrets requiring Small Railgun Specialization.
+
+ def test_damageMultiplier_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "150mm Railgun II"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "150mm Railgun I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/surgicalStrike.py b/eos/tests/typeTests/skills/gunnery/surgicalStrike.py
new file mode 100755
index 000000000..ecb705f85
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/surgicalStrike.py
@@ -0,0 +1,64 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Surgical Strike"
+
+ # 3% bonus per skill level to the damage of all weapon turrets.
+
+ def test_damageMultiplier_moduleEnergyWeapon(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Mega Beam Laser I"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleHybridWeapon(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Dual 150mm Railgun I"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleProjectileWeapon(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Quad 3500mm Siege Artillery I"
+ iLvl = 1
+ iIngame = 1.03
+ fLvl = 4
+ fIngame = 1.12
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_damageMultiplier_moduleOther(self):
+ self.buildTested = 0
+ attr = "damageMultiplier"
+ item = "Heat Sink I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/tacticalWeaponReconfiguration.py b/eos/tests/typeTests/skills/gunnery/tacticalWeaponReconfiguration.py
new file mode 100755
index 000000000..4e4d34738
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/tacticalWeaponReconfiguration.py
@@ -0,0 +1,50 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Tactical Weapon Reconfiguration"
+
+ # 25-unit reduction in strontium clathrate consumption amount for siege module activation per skill level.
+
+ def test_consumptionQuantity_moduleSiegeModuleSkillrq(self):
+ self.buildTested = 0
+ attr = "consumptionQuantity"
+ item = "Siege Module I"
+ iLvl = 1
+ iIngame = 225
+ fLvl = 4
+ fIngame = 150
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_consumptionQuantity_moduleSiegeModuleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "consumptionQuantity"
+ item = "Triage Module I"
+ iLvl = 1
+ iIngame = 500
+ fLvl = 4
+ fIngame = 500
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_consumptionQuantity_moduleOther(self):
+ self.buildTested = 0
+ attr = "consumptionQuantity"
+ item = "Jump Portal Generator I"
+ iLvl = 1
+ iIngame = 500
+ fLvl = 4
+ fIngame = 500
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/trajectoryAnalysis.py b/eos/tests/typeTests/skills/gunnery/trajectoryAnalysis.py
new file mode 100755
index 000000000..c4f522511
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/trajectoryAnalysis.py
@@ -0,0 +1,64 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Trajectory Analysis"
+
+ # 5% bonus per skill level to weapon turret accuracy falloff.
+
+ def test_falloff_moduleEnergyWeapon(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "Heavy Beam Laser I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_falloff_moduleHybridWeapon(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "75mm Gatling Rail I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_falloff_moduleProjectileWeapon(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "650mm Artillery Cannon I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_falloff_moduleOther(self):
+ self.buildTested = 0
+ attr = "falloff"
+ item = "Cargo Scanner I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/gunnery/weaponUpgrades.py b/eos/tests/typeTests/skills/gunnery/weaponUpgrades.py
new file mode 100755
index 000000000..a5e1c0eaf
--- /dev/null
+++ b/eos/tests/typeTests/skills/gunnery/weaponUpgrades.py
@@ -0,0 +1,222 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Weapon Upgrades"
+
+ # 5% reduction per skill level in the CPU needs of weapon turrets.
+
+ def test_cpu_moduleEnergyWeapon(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Focused Medium Pulse Laser I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_cpu_moduleHybridWeapon(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "350mm Railgun I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_cpu_moduleProjectileWeapon(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "425mm AutoCannon I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 5% reduction per skill level in the CPU needs of launchers.
+
+ def test_cpu_moduleMissileLauncherStandard(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Standard Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_cpu_moduleMissileLauncherStandardNoSkillrqMissileLauncherOperation(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Civilian Standard Missile Launcher"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_cpu_moduleMissileLauncherRocket(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Rocket Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_cpu_moduleMissileLauncherAssault(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_cpu_moduleMissileLauncherHeavy(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Heavy Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_cpu_moduleMissileLauncherHeavyAssault(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Heavy Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_cpu_moduleMissileLauncherCruise(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Cruise Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_cpu_moduleMissileLauncherSiege(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Siege Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_cpu_moduleMissileLauncherCitadel(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Citadel Cruise Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_cpu_moduleMissileLauncherBomb(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Bomb Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # 5% reduction per skill level in the CPU needs of smartbombs.
+
+ def test_cpu_moduleSmartBomb(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "Medium EMP Smartbomb I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_cpu_moduleOther(self):
+ self.buildTested = 0
+ attr = "cpu"
+ item = "100MN Afterburner I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/industry/__init__.py b/eos/tests/typeTests/skills/industry/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/skills/industry/deepCoreMining.py b/eos/tests/typeTests/skills/industry/deepCoreMining.py
new file mode 100755
index 000000000..a549a6435
--- /dev/null
+++ b/eos/tests/typeTests/skills/industry/deepCoreMining.py
@@ -0,0 +1,22 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Deep Core Mining"
+
+ # 20% reduction per skill level in the chance of a damage cloud forming while mining Mercoxit.
+
+ def test_damageCloudChance_moduleDeepCoreMiner(self):
+ self.buildTested = 0
+ attr = "damageCloudChance"
+ item = "Deep Core Mining Laser I"
+ iLvl = 1
+ iIngame = 0.8
+ fLvl = 4
+ fIngame = 0.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/industry/gasCloudHarvesting.py b/eos/tests/typeTests/skills/industry/gasCloudHarvesting.py
new file mode 100755
index 000000000..22f7bedb1
--- /dev/null
+++ b/eos/tests/typeTests/skills/industry/gasCloudHarvesting.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Gas Cloud Harvesting"
+
+ # Allows use of one gas cloud harvester per level.
+
+ def test_maxGroupActive_moduleGasCloudHarvester(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ item = "Gas Cloud Harvester I"
+ iLvl = 1
+ iIngame = 1
+ fLvl = 4
+ fIngame = 4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxGroupActive_moduleOther(self):
+ self.buildTested = 0
+ attr = "maxGroupActive"
+ item = "10MN Afterburner I"
+ iLvl = 1
+ iIngame = 0
+ fLvl = 4
+ fIngame = 0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/industry/iceHarvesting.py b/eos/tests/typeTests/skills/industry/iceHarvesting.py
new file mode 100755
index 000000000..17cf61cb1
--- /dev/null
+++ b/eos/tests/typeTests/skills/industry/iceHarvesting.py
@@ -0,0 +1,50 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Ice Harvesting"
+
+ # 5% reduction per skill level to the cycle time of ice harvesters.
+
+ def test_duration_moduleStripMinerSkillrq(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Ice Harvester I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_duration_moduleStripMinerNoSkillrq(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Strip Miner I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_duration_moduleOther(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Heavy Capacitor Booster I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/industry/industrialReconfiguration.py b/eos/tests/typeTests/skills/industry/industrialReconfiguration.py
new file mode 100755
index 000000000..450beb8a6
--- /dev/null
+++ b/eos/tests/typeTests/skills/industry/industrialReconfiguration.py
@@ -0,0 +1,50 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Industrial Reconfiguration"
+
+ # 50-unit reduction in heavy water consumption amount for industrial core module activation per skill level.
+
+ def test_consumptionQuantity_moduleSiegeModuleSkillrq(self):
+ self.buildTested = 0
+ attr = "consumptionQuantity"
+ item = "Industrial Core I"
+ iLvl = 1
+ iIngame = 450
+ fLvl = 4
+ fIngame = 300
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_consumptionQuantity_moduleSiegeModuleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "consumptionQuantity"
+ item = "Siege Module I"
+ iLvl = 1
+ iIngame = 500
+ fLvl = 4
+ fIngame = 500
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_consumptionQuantity_moduleOther(self):
+ self.buildTested = 0
+ attr = "consumptionQuantity"
+ item = "Cynosural Field Generator I"
+ iLvl = 1
+ iIngame = 500
+ fLvl = 4
+ fIngame = 500
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/industry/mining.py b/eos/tests/typeTests/skills/industry/mining.py
new file mode 100755
index 000000000..f3bb58868
--- /dev/null
+++ b/eos/tests/typeTests/skills/industry/mining.py
@@ -0,0 +1,92 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Mining"
+
+ # 5% bonus to mining turret yield per skill level.
+
+ def test_miningAmount_moduleMiningLaser(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Miner I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningAmount_moduleFrequencyMiningLaser(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Modulated Strip Miner II"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningAmount_moduleStripMiner(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Strip Miner I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningAmount_moduleStripMinerNoSkillrq(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Ice Harvester I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Gas Cloud Harvester I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningAmount_droneMining(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Mining Drone I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/industry/miningUpgrades.py b/eos/tests/typeTests/skills/industry/miningUpgrades.py
new file mode 100755
index 000000000..d10590a44
--- /dev/null
+++ b/eos/tests/typeTests/skills/industry/miningUpgrades.py
@@ -0,0 +1,22 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Mining Upgrades"
+
+ # 5% reduction per skill level in CPU penalty of mining upgrade modules.
+
+ def test_cpuPenaltyPercent_moduleMiningUpgrade(self):
+ self.buildTested = 0
+ attr = "cpuPenaltyPercent"
+ item = "Mining Laser Upgrade I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/leadership/__init__.py b/eos/tests/typeTests/skills/leadership/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/skills/leadership/armoredWarfare.py b/eos/tests/typeTests/skills/leadership/armoredWarfare.py
new file mode 100755
index 000000000..49a0322ec
--- /dev/null
+++ b/eos/tests/typeTests/skills/leadership/armoredWarfare.py
@@ -0,0 +1,35 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Armored Warfare"
+
+ # Grants a 2% bonus to fleet members' armor hit points per skill level.
+
+ def test_armorHP_fleetShip(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), gang=True)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), gang=True)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_armorHP_fleetChargeBomb(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ item = "Shrapnel Bomb"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), gang=True)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), gang=True)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/leadership/armoredWarfareSpecialist.py b/eos/tests/typeTests/skills/leadership/armoredWarfareSpecialist.py
new file mode 100755
index 000000000..340a50d17
--- /dev/null
+++ b/eos/tests/typeTests/skills/leadership/armoredWarfareSpecialist.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Armored Warfare Specialist"
+
+ # Multiplies the effectiveness of armored warfare link modules by 100% per skill level after level 2 is trained.
+
+ def test_commandBonus_moduleGangCoordinatorSkillrq(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Armored Warfare Link - Passive Defense I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 4.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandBonus_moduleGangCoordinatorNoSkillrq(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Mining Foreman Link - Harvester Capacitor Efficiency I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/leadership/informationWarfare.py b/eos/tests/typeTests/skills/leadership/informationWarfare.py
new file mode 100755
index 000000000..5150d65ea
--- /dev/null
+++ b/eos/tests/typeTests/skills/leadership/informationWarfare.py
@@ -0,0 +1,35 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Information Warfare"
+
+ # Grants a 2% bonus to fleet members' targeting range per skill level.
+
+ def test_maxTargetRange_fleetShip(self):
+ self.buildTested = 0
+ attr = "maxTargetRange"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), gang=True)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), gang=True)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxTargetRange_fleetSubsystem(self):
+ self.buildTested = 0
+ attr = "maxTargetRange"
+ item = "Loki Electronics - Emergent Locus Analyzer"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), gang=True)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), gang=True)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/leadership/informationWarfareSpecialist.py b/eos/tests/typeTests/skills/leadership/informationWarfareSpecialist.py
new file mode 100755
index 000000000..b3067715a
--- /dev/null
+++ b/eos/tests/typeTests/skills/leadership/informationWarfareSpecialist.py
@@ -0,0 +1,50 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Information Warfare Specialist"
+
+ # Multiplies the effectiveness of information warfare link modules by 100% per skill level after level 2 is trained.
+
+ def test_commandBonus_moduleGangCoordinatorSkillrq(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Information Warfare Link - Sensor Integrity I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 4.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandBonus_moduleGangCoordinatorNoSkillrq(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Siege Warfare Link - Shield Efficiency I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandBonusHidden_moduleGangCoordinatorSkillrq(self):
+ self.buildTested = 0
+ attr = "commandBonusHidden"
+ item = "Information Warfare Link - Electronic Superiority I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 4.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/leadership/leadership.py b/eos/tests/typeTests/skills/leadership/leadership.py
new file mode 100755
index 000000000..f1dade83e
--- /dev/null
+++ b/eos/tests/typeTests/skills/leadership/leadership.py
@@ -0,0 +1,35 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Leadership"
+
+ # Grants a 2% bonus to fleet members' targeting speed per skill level.
+
+ def test_scanResolution_fleetShip(self):
+ self.buildTested = 0
+ attr = "scanResolution"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), gang=True)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), gang=True)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_scanResolution_fleetSubsystem(self):
+ self.buildTested = 0
+ attr = "scanResolution"
+ item = "Legion Electronics - Energy Parasitic Complex"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), gang=True)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), gang=True)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/leadership/miningDirector.py b/eos/tests/typeTests/skills/leadership/miningDirector.py
new file mode 100755
index 000000000..d996a3f2a
--- /dev/null
+++ b/eos/tests/typeTests/skills/leadership/miningDirector.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Mining Director"
+
+ # 100% bonus to effectiveness of Mining Foreman link modules per level after level 2 is trained.
+
+ def test_commandBonus_moduleGangCoordinatorSkillrq(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Mining Foreman Link - Mining Laser Field Enhancement I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 4.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandBonus_moduleGangCoordinatorNoSkillrq(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Information Warfare Link - Recon Operation I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/leadership/miningForeman.py b/eos/tests/typeTests/skills/leadership/miningForeman.py
new file mode 100755
index 000000000..5bccf1932
--- /dev/null
+++ b/eos/tests/typeTests/skills/leadership/miningForeman.py
@@ -0,0 +1,92 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Mining Foreman"
+
+ # Grants a 2% bonus to fleet members' mining yield per level.
+
+ def test_miningAmount_fleetModuleMiningLaser(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Miner I"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), gang=True)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), gang=True)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningAmount_fleetModuleFrequencyMiningLaser(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Modulated Deep Core Strip Miner II"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), gang=True)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), gang=True)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningAmount_fleetModuleStripMiner(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Strip Miner I"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), gang=True)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), gang=True)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningAmount_fleetModuleStripMinerNoSkillrq(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Ice Harvester I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), gang=True)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), gang=True)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningAmount_fleetModuleOther(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Gas Cloud Harvester I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), gang=True)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), gang=True)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningAmount_fleetDroneMining(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Harvester Mining Drone"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), gang=True)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), gang=True)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/leadership/siegeWarfare.py b/eos/tests/typeTests/skills/leadership/siegeWarfare.py
new file mode 100755
index 000000000..4d45546a5
--- /dev/null
+++ b/eos/tests/typeTests/skills/leadership/siegeWarfare.py
@@ -0,0 +1,35 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Siege Warfare"
+
+ # Grants a 2% bonus to fleet members' shield capacity per skill level.
+
+ def test_shieldCapacity_fleetShip(self):
+ self.buildTested = 0
+ attr = "shieldCapacity"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), gang=True)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), gang=True)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_shieldCapacity_fleetSubsystem(self):
+ self.buildTested = 0
+ attr = "shieldCapacity"
+ item = "Loki Defensive - Amplification Node"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), gang=True)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), gang=True)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/leadership/siegeWarfareSpecialist.py b/eos/tests/typeTests/skills/leadership/siegeWarfareSpecialist.py
new file mode 100755
index 000000000..e2b9b79f4
--- /dev/null
+++ b/eos/tests/typeTests/skills/leadership/siegeWarfareSpecialist.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Siege Warfare Specialist"
+
+ # Multiplies the effectiveness of siege warfare link modules by 100% per skill level after level 2 is trained.
+
+ def test_commandBonus_moduleGangCoordinatorSkillrq(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Siege Warfare Link - Shield Harmonizing I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 4.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandBonus_moduleGangCoordinatorNoSkillrq(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Armored Warfare Link - Damage Control I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/leadership/skirmishWarfare.py b/eos/tests/typeTests/skills/leadership/skirmishWarfare.py
new file mode 100755
index 000000000..d4ca49829
--- /dev/null
+++ b/eos/tests/typeTests/skills/leadership/skirmishWarfare.py
@@ -0,0 +1,35 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Skirmish Warfare"
+
+ # Grants a 2% bonus to fleet members' agility per skill level.
+
+ def test_agility_fleetShip(self):
+ self.buildTested = 0
+ attr = "agility"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), gang=True)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), gang=True)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_agility_fleetSubsystem(self):
+ self.buildTested = 0
+ attr = "agility"
+ item = "Tengu Propulsion - Gravitational Capacitor"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl), gang=True)
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl), gang=True)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/leadership/skirmishWarfareSpecialist.py b/eos/tests/typeTests/skills/leadership/skirmishWarfareSpecialist.py
new file mode 100755
index 000000000..8e62585af
--- /dev/null
+++ b/eos/tests/typeTests/skills/leadership/skirmishWarfareSpecialist.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Skirmish Warfare Specialist"
+
+ # Multiplies the effectiveness of skirmish warfare link modules by 100% per skill level after level 2 is trained.
+
+ def test_commandBonus_moduleGangCoordinatorSkillrq(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Skirmish Warfare Link - Interdiction Maneuvers I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 4.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandBonus_moduleGangCoordinatorNoSkillrq(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Siege Warfare Link - Active Shielding I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/leadership/warfareLinkSpecialist.py b/eos/tests/typeTests/skills/leadership/warfareLinkSpecialist.py
new file mode 100755
index 000000000..3531aa4cf
--- /dev/null
+++ b/eos/tests/typeTests/skills/leadership/warfareLinkSpecialist.py
@@ -0,0 +1,92 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Warfare Link Specialist"
+
+ # Boosts effectiveness of all warfare link and mining foreman modules by 10% per level.
+
+ def test_commandBonus_moduleGangCoordinatorSkillrqArmored(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Armored Warfare Link - Passive Defense I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandBonus_moduleGangCoordinatorSkillrqInformation(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Information Warfare Link - Recon Operation I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandBonus_moduleGangCoordinatorSkillrqMining(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Mining Foreman Link - Laser Optimization I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandBonus_moduleGangCoordinatorSkillrqSiege(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Siege Warfare Link - Shield Efficiency I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandBonus_moduleGangCoordinatorSkillrqSkirmish(self):
+ self.buildTested = 0
+ attr = "commandBonus"
+ item = "Skirmish Warfare Link - Evasive Maneuvers I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_commandBonusHidden_moduleGangCoordinatorSkillrqInformation(self):
+ self.buildTested = 0
+ attr = "commandBonusHidden"
+ item = "Information Warfare Link - Electronic Superiority I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/mechanic/__init__.py b/eos/tests/typeTests/skills/mechanic/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/skills/mechanic/armorRigging.py b/eos/tests/typeTests/skills/mechanic/armorRigging.py
new file mode 100755
index 000000000..9bfce1618
--- /dev/null
+++ b/eos/tests/typeTests/skills/mechanic/armorRigging.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Armor Rigging"
+
+ # 10% reduction in Armor Rig drawbacks per level.
+
+ def test_drawback_moduleRigArmor(self):
+ self.buildTested = 0
+ attr = "drawback"
+ item = "Medium Anti-Thermic Pump I"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_drawback_moduleRigOther(self):
+ self.buildTested = 0
+ attr = "drawback"
+ item = "Large Energy Locus Coordinator I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/mechanic/astronauticsRigging.py b/eos/tests/typeTests/skills/mechanic/astronauticsRigging.py
new file mode 100755
index 000000000..9d946917d
--- /dev/null
+++ b/eos/tests/typeTests/skills/mechanic/astronauticsRigging.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Astronautics Rigging"
+
+ # 10% reduction in Astronautics Rig drawbacks per level.
+
+ def test_drawback_moduleRigAstronautics(self):
+ self.buildTested = 0
+ attr = "drawback"
+ item = "Small Polycarbon Engine Housing I"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_drawback_moduleRigOther(self):
+ self.buildTested = 0
+ attr = "drawback"
+ item = "Medium Anti-EM Pump I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/mechanic/capitalRemoteArmorRepairSystems.py b/eos/tests/typeTests/skills/mechanic/capitalRemoteArmorRepairSystems.py
new file mode 100755
index 000000000..7d289c55f
--- /dev/null
+++ b/eos/tests/typeTests/skills/mechanic/capitalRemoteArmorRepairSystems.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Capital Remote Armor Repair Systems"
+
+ # 5% reduced capacitor need for capital remote armor repair system modules per skill level.
+
+ def test_capacitorNeed_moduleArmorRepairProjectorSkillrq(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Capital Remote Armor Repair System I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleArmorRepairProjectorNoSkillrq(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Medium Remote Armor Repair System I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/mechanic/capitalRemoteHullRepairSystems.py b/eos/tests/typeTests/skills/mechanic/capitalRemoteHullRepairSystems.py
new file mode 100755
index 000000000..2c04f7098
--- /dev/null
+++ b/eos/tests/typeTests/skills/mechanic/capitalRemoteHullRepairSystems.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Capital Remote Hull Repair Systems"
+
+ # 5% reduced capacitor need for capital class remote hull repair system modules per skill level.
+
+ def test_capacitorNeed_moduleRemoteHullRepairerSkillrq(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Capital Remote Hull Repair System I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleRemoteHullRepairerNoSkillrq(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Large Remote Hull Repair System I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/mechanic/capitalRepairSystems.py b/eos/tests/typeTests/skills/mechanic/capitalRepairSystems.py
new file mode 100755
index 000000000..d8573b44a
--- /dev/null
+++ b/eos/tests/typeTests/skills/mechanic/capitalRepairSystems.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Capital Repair Systems"
+
+ # 5% reduction in capital repair systems duration per skill level.
+
+ def test_duration_moduleArmorRepairerSkillrq(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Capital Armor Repairer I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_duration_moduleArmorRepairerNoSkillrq(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Medium Armor Repairer I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/mechanic/dronesRigging.py b/eos/tests/typeTests/skills/mechanic/dronesRigging.py
new file mode 100755
index 000000000..c3512a64b
--- /dev/null
+++ b/eos/tests/typeTests/skills/mechanic/dronesRigging.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Drones Rigging"
+
+ # 10% reduction in Drone Rig drawbacks per level.
+
+ def test_drawback_moduleRigDrones(self):
+ self.buildTested = 0
+ attr = "drawback"
+ item = "Large Stasis Drone Augmentor I"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_drawback_moduleRigOther(self):
+ self.buildTested = 0
+ attr = "drawback"
+ item = "Large Hybrid Ambit Extension I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/mechanic/electronicSuperiorityRigging.py b/eos/tests/typeTests/skills/mechanic/electronicSuperiorityRigging.py
new file mode 100755
index 000000000..2456e7b2e
--- /dev/null
+++ b/eos/tests/typeTests/skills/mechanic/electronicSuperiorityRigging.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Electronic Superiority Rigging"
+
+ # 10% reduction in Electronic Superiority Rig drawbacks per level.
+
+ def test_drawback_moduleRigElectronicSuperiority(self):
+ self.buildTested = 0
+ attr = "drawback"
+ item = "Medium Targeting System Subcontroller I"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_drawback_moduleRigOther(self):
+ self.buildTested = 0
+ attr = "drawback"
+ item = "Medium Hybrid Metastasis Adjuster I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/mechanic/emArmorCompensation.py b/eos/tests/typeTests/skills/mechanic/emArmorCompensation.py
new file mode 100755
index 000000000..5585aff31
--- /dev/null
+++ b/eos/tests/typeTests/skills/mechanic/emArmorCompensation.py
@@ -0,0 +1,94 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "EM Armor Compensation"
+
+ # To passive armor hardeners: 5% bonus per skill level to Armor EM resistance
+
+ def test_emDamageResistanceBonus_moduleArmorCoatingSkillrqHullUpgrades(self):
+ self.buildTested = 0
+ attr = "emDamageResistanceBonus"
+ item = "Reflective Plating I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamageResistanceBonus_moduleArmorCoatingSkillrqMechanic(self):
+ self.buildTested = 0
+ attr = "emDamageResistanceBonus"
+ item = "Basic Reflective Plating"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamageResistanceBonus_moduleArmorPlatinEnergized(self):
+ self.buildTested = 0
+ attr = "emDamageResistanceBonus"
+ item = "Energized Reflective Membrane I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamageResistanceBonus_moduleOtherSkillrqHullUpgrades(self):
+ self.buildTested = 0
+ attr = "emDamageResistanceBonus"
+ item = "Armor EM Hardener I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # To active armor hardeners: 3% bonus per skill level to Armor EM resistance when the modules are not active
+
+ def test_passiveEmDamageResistanceBonus_moduleArmorHardener(self):
+ self.buildTested = 0
+ attr = "passiveEmDamageResistanceBonus"
+ item = "Armor EM Hardener I"
+ iLvl = 1
+ iIngame = 3.0
+ fLvl = 4
+ fIngame = 12.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_passiveEmDamageResistanceBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "passiveEmDamageResistanceBonus"
+ item = "Photon Scattering Field I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/mechanic/energyWeaponRigging.py b/eos/tests/typeTests/skills/mechanic/energyWeaponRigging.py
new file mode 100755
index 000000000..f8bce05d7
--- /dev/null
+++ b/eos/tests/typeTests/skills/mechanic/energyWeaponRigging.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Energy Weapon Rigging"
+
+ # 10% reduction in Energy Weapon Rig drawbacks per level.
+
+ def test_drawback_moduleRigEnergyWeapon(self):
+ self.buildTested = 0
+ attr = "drawback"
+ item = "Medium Energy Burst Aerator I"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_drawback_moduleRigOther(self):
+ self.buildTested = 0
+ attr = "drawback"
+ item = "Small Salvage Tackle I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/mechanic/explosiveArmorCompensation.py b/eos/tests/typeTests/skills/mechanic/explosiveArmorCompensation.py
new file mode 100755
index 000000000..cd3efccc6
--- /dev/null
+++ b/eos/tests/typeTests/skills/mechanic/explosiveArmorCompensation.py
@@ -0,0 +1,94 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Explosive Armor Compensation"
+
+ # To passive armor hardeners: 5% bonus per skill level to Armor Explosive resistance
+
+ def test_explosiveDamageResistanceBonus_moduleArmorCoatingSkillrqHullUpgrades(self):
+ self.buildTested = 0
+ attr = "explosiveDamageResistanceBonus"
+ item = "Reactive Plating I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamageResistanceBonus_moduleArmorCoatingSkillrqMechanic(self):
+ self.buildTested = 0
+ attr = "explosiveDamageResistanceBonus"
+ item = "Basic Reactive Plating"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamageResistanceBonus_moduleArmorPlatinEnergized(self):
+ self.buildTested = 0
+ attr = "explosiveDamageResistanceBonus"
+ item = "Energized Reactive Membrane I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamageResistanceBonus_moduleOtherSkillrqHullUpgrades(self):
+ self.buildTested = 0
+ attr = "explosiveDamageResistanceBonus"
+ item = "Armor Explosive Hardener I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # To active armor hardeners: 3% bonus per skill level to Armor Explosive resistance when the modules are not active
+
+ def test_passiveExplosiveDamageResistanceBonus_moduleArmorHardener(self):
+ self.buildTested = 0
+ attr = "passiveExplosiveDamageResistanceBonus"
+ item = "Armor Explosive Hardener I"
+ iLvl = 1
+ iIngame = 3.0
+ fLvl = 4
+ fIngame = 12.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_passiveExplosiveDamageResistanceBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "passiveExplosiveDamageResistanceBonus"
+ item = "Explosion Dampening Field I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/mechanic/hullUpgrades.py b/eos/tests/typeTests/skills/mechanic/hullUpgrades.py
new file mode 100755
index 000000000..b957d5072
--- /dev/null
+++ b/eos/tests/typeTests/skills/mechanic/hullUpgrades.py
@@ -0,0 +1,21 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Hull Upgrades"
+
+ # Grants a 5% bonus to armor hit points per skill level.
+
+ def test_armorHP_ship(self):
+ self.buildTested = 0
+ attr = "armorHP"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl))
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/mechanic/hybridWeaponRigging.py b/eos/tests/typeTests/skills/mechanic/hybridWeaponRigging.py
new file mode 100755
index 000000000..6a70e6bbb
--- /dev/null
+++ b/eos/tests/typeTests/skills/mechanic/hybridWeaponRigging.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Hybrid Weapon Rigging"
+
+ # 10% reduction in Hybrid Weapon Rig drawbacks per level.
+
+ def test_drawback_moduleRigHybridWeapon(self):
+ self.buildTested = 0
+ attr = "drawback"
+ item = "Small Algid Hybrid Administrations Unit I"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_drawback_moduleRigOther(self):
+ self.buildTested = 0
+ attr = "drawback"
+ item = "Medium Engine Thermal Shielding I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/mechanic/kineticArmorCompensation.py b/eos/tests/typeTests/skills/mechanic/kineticArmorCompensation.py
new file mode 100755
index 000000000..51441d100
--- /dev/null
+++ b/eos/tests/typeTests/skills/mechanic/kineticArmorCompensation.py
@@ -0,0 +1,94 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Kinetic Armor Compensation"
+
+ # To passive armor hardeners: 5% bonus per skill level to Armor Kinetic resistance
+
+ def test_kineticDamageResistanceBonus_moduleArmorCoatingSkillrqHullUpgrades(self):
+ self.buildTested = 0
+ attr = "kineticDamageResistanceBonus"
+ item = "Magnetic Plating I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamageResistanceBonus_moduleArmorCoatingSkillrqMechanic(self):
+ self.buildTested = 0
+ attr = "kineticDamageResistanceBonus"
+ item = "Basic Magnetic Plating"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamageResistanceBonus_moduleArmorPlatinEnergized(self):
+ self.buildTested = 0
+ attr = "kineticDamageResistanceBonus"
+ item = "Energized Magnetic Membrane I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamageResistanceBonus_moduleOtherSkillrqHullUpgrades(self):
+ self.buildTested = 0
+ attr = "kineticDamageResistanceBonus"
+ item = "Armor Kinetic Hardener I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # To active armor hardeners: 3% bonus per skill level to Armor Kinetic resistance when the modules are not active
+
+ def test_passiveKineticDamageResistanceBonus_moduleArmorHardener(self):
+ self.buildTested = 0
+ attr = "passiveKineticDamageResistanceBonus"
+ item = "Armor Kinetic Hardener I"
+ iLvl = 1
+ iIngame = 3.0
+ fLvl = 4
+ fIngame = 12.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_passiveKineticDamageResistanceBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "passiveKineticDamageResistanceBonus"
+ item = "Ballistic Deflection Field I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/mechanic/launcherRigging.py b/eos/tests/typeTests/skills/mechanic/launcherRigging.py
new file mode 100755
index 000000000..9d7b6b10f
--- /dev/null
+++ b/eos/tests/typeTests/skills/mechanic/launcherRigging.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Launcher Rigging"
+
+ # 10% reduction in Launcher Rig drawbacks per level.
+
+ def test_drawback_moduleRigLauncher(self):
+ self.buildTested = 0
+ attr = "drawback"
+ item = "Small Warhead Rigor Catalyst I"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_drawback_moduleRigOther(self):
+ self.buildTested = 0
+ attr = "drawback"
+ item = "Medium Drone Speed Augmentor I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/mechanic/mechanic.py b/eos/tests/typeTests/skills/mechanic/mechanic.py
new file mode 100755
index 000000000..9ca6d7cfe
--- /dev/null
+++ b/eos/tests/typeTests/skills/mechanic/mechanic.py
@@ -0,0 +1,21 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Mechanics"
+
+ # 5% bonus to structure hit points per skill level.
+
+ def test_hp_ship(self):
+ self.buildTested = 0
+ attr = "hp"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl))
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/mechanic/projectileWeaponRigging.py b/eos/tests/typeTests/skills/mechanic/projectileWeaponRigging.py
new file mode 100755
index 000000000..672b3eebf
--- /dev/null
+++ b/eos/tests/typeTests/skills/mechanic/projectileWeaponRigging.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Projectile Weapon Rigging"
+
+ # 10% reduction in Projectile Weapon Rig drawbacks per level.
+
+ def test_drawback_moduleRigProjectileWeapon(self):
+ self.buildTested = 0
+ attr = "drawback"
+ item = "Large Projectile Ambit Extension I"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_drawback_moduleRigOther(self):
+ self.buildTested = 0
+ attr = "drawback"
+ item = "Medium Core Defence Field Purger I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/mechanic/remoteArmorRepairSystems.py b/eos/tests/typeTests/skills/mechanic/remoteArmorRepairSystems.py
new file mode 100755
index 000000000..b27074f03
--- /dev/null
+++ b/eos/tests/typeTests/skills/mechanic/remoteArmorRepairSystems.py
@@ -0,0 +1,50 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Remote Armor Repair Systems"
+
+ # 5% reduced capacitor need for remote armor repair system modules per skill level.
+
+ def test_capacitorNeed_moduleArmorRepairerSkillrq(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Large Remote Armor Repair System I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleArmorRepairerNoSkillrq(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Remote Armor Repair System"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Gatling Pulse Laser I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/mechanic/remoteHullRepairSystems.py b/eos/tests/typeTests/skills/mechanic/remoteHullRepairSystems.py
new file mode 100755
index 000000000..fe75a1bf8
--- /dev/null
+++ b/eos/tests/typeTests/skills/mechanic/remoteHullRepairSystems.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Remote Hull Repair Systems"
+
+ # 5% reduced capacitor need for remote hull repair system modules per skill level.
+
+ def test_capacitorNeed_moduleRemoteHullRepairer(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Large Remote Hull Repair System I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleOther(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Ship Scanner I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/mechanic/repairSystems.py b/eos/tests/typeTests/skills/mechanic/repairSystems.py
new file mode 100755
index 000000000..9e3f5ca75
--- /dev/null
+++ b/eos/tests/typeTests/skills/mechanic/repairSystems.py
@@ -0,0 +1,78 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Repair Systems"
+
+ # 5% reduction in repair systems duration per skill level.
+
+ def test_duration_moduleArmorRepairerSkillrq(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Medium Armor Repairer I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_duration_moduleArmorRepairerNoSkillrqCapital(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Capital Armor Repairer I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_duration_moduleArmorRepairerNoSkillrqCivilian(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Civilian Armor Repairer"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_duration_moduleHullRepairer(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Small Hull Repairer I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_duration_moduleOther(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Damage Control I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/mechanic/salvaging.py b/eos/tests/typeTests/skills/mechanic/salvaging.py
new file mode 100755
index 000000000..d12c7276e
--- /dev/null
+++ b/eos/tests/typeTests/skills/mechanic/salvaging.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Salvaging"
+
+ # 5% increase in chance of salvage retrieval per level.
+
+ def test_accessDifficultyBonus_moduleDataMinerSkillrq(self):
+ self.buildTested = 0
+ attr = "accessDifficultyBonus"
+ item = "Salvager I"
+ iLvl = 1
+ iIngame = 5.0
+ fLvl = 4
+ fIngame = 20.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_accessDifficultyBonus_moduleDataMinerNoSkillrq(self):
+ self.buildTested = 0
+ attr = "accessDifficultyBonus"
+ item = "Analyzer I"
+ iLvl = 1
+ iIngame = 5.0
+ fLvl = 4
+ fIngame = 5.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/mechanic/shieldRigging.py b/eos/tests/typeTests/skills/mechanic/shieldRigging.py
new file mode 100755
index 000000000..2f06441ff
--- /dev/null
+++ b/eos/tests/typeTests/skills/mechanic/shieldRigging.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Shield Rigging"
+
+ # 10% reduction in Shield Rig drawbacks per level.
+
+ def test_drawback_moduleRigShield(self):
+ self.buildTested = 0
+ attr = "drawback"
+ item = "Medium Anti-Kinetic Screen Reinforcer I"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_drawback_moduleRigOther(self):
+ self.buildTested = 0
+ attr = "drawback"
+ item = "Small Anti-EM Pump I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/mechanic/tacticalLogisticsReconfiguration.py b/eos/tests/typeTests/skills/mechanic/tacticalLogisticsReconfiguration.py
new file mode 100755
index 000000000..234478f7a
--- /dev/null
+++ b/eos/tests/typeTests/skills/mechanic/tacticalLogisticsReconfiguration.py
@@ -0,0 +1,50 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Tactical Logistics Reconfiguration"
+
+ # 25-unit reduction in strontium clathrate consumption amount for triage module activation per skill level.
+
+ def test_consumptionQuantity_moduleSiegeModuleSkillrq(self):
+ self.buildTested = 0
+ attr = "consumptionQuantity"
+ item = "Triage Module I"
+ iLvl = 1
+ iIngame = 225
+ fLvl = 4
+ fIngame = 150
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_consumptionQuantity_moduleSiegeModuleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "consumptionQuantity"
+ item = "Industrial Core I"
+ iLvl = 1
+ iIngame = 500
+ fLvl = 4
+ fIngame = 500
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_consumptionQuantity_moduleOther(self):
+ self.buildTested = 0
+ attr = "consumptionQuantity"
+ item = "Covert Cynosural Field Generator I"
+ iLvl = 1
+ iIngame = 500
+ fLvl = 4
+ fIngame = 500
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/mechanic/thermicArmorCompensation.py b/eos/tests/typeTests/skills/mechanic/thermicArmorCompensation.py
new file mode 100755
index 000000000..0b1edaf0a
--- /dev/null
+++ b/eos/tests/typeTests/skills/mechanic/thermicArmorCompensation.py
@@ -0,0 +1,94 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Thermic Armor Compensation"
+
+ # To passive armor hardeners: 5% bonus per skill level to Armor Thermal resistance
+
+ def test_thermalDamageResistanceBonus_moduleArmorCoatingSkillrqHullUpgrades(self):
+ self.buildTested = 0
+ attr = "thermalDamageResistanceBonus"
+ item = "Thermic Plating I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamageResistanceBonus_moduleArmorCoatingSkillrqMechanic(self):
+ self.buildTested = 0
+ attr = "thermalDamageResistanceBonus"
+ item = "Basic Thermic Plating"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamageResistanceBonus_moduleArmorPlatinEnergized(self):
+ self.buildTested = 0
+ attr = "thermalDamageResistanceBonus"
+ item = "Energized Thermic Membrane I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamageResistanceBonus_moduleOtherSkillrqHullUpgrades(self):
+ self.buildTested = 0
+ attr = "thermalDamageResistanceBonus"
+ item = "Armor Thermic Hardener I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ # To active armor hardeners: 3% bonus per skill level to Armor Thermal resistance when the modules are not active
+
+ def test_passiveThermicDamageResistanceBonus_moduleArmorHardener(self):
+ self.buildTested = 0
+ attr = "passiveThermicDamageResistanceBonus"
+ item = "Armor Thermic Hardener I"
+ iLvl = 1
+ iIngame = 3.0
+ fLvl = 4
+ fIngame = 12.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_passiveThermicDamageResistanceBonus_moduleOther(self):
+ self.buildTested = 0
+ attr = "passiveThermicDamageResistanceBonus"
+ item = "Heat Dissipation Field I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/missileLauncherOperation/__init__.py b/eos/tests/typeTests/skills/missileLauncherOperation/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/skills/missileLauncherOperation/bombDeployment.py b/eos/tests/typeTests/skills/missileLauncherOperation/bombDeployment.py
new file mode 100755
index 000000000..326a64410
--- /dev/null
+++ b/eos/tests/typeTests/skills/missileLauncherOperation/bombDeployment.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Bomb Deployment"
+
+ # 5% reduction of Bomb Launcher reactivation delay per skill level.
+
+ def test_moduleReactivationDelay_moduleLauncherBomb(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Bomb Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_moduleReactivationDelay_moduleOther(self):
+ self.buildTested = 0
+ attr = "moduleReactivationDelay"
+ item = "Cynosural Field Generator I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/missileLauncherOperation/citadelCruiseMissiles.py b/eos/tests/typeTests/skills/missileLauncherOperation/citadelCruiseMissiles.py
new file mode 100755
index 000000000..e4105f273
--- /dev/null
+++ b/eos/tests/typeTests/skills/missileLauncherOperation/citadelCruiseMissiles.py
@@ -0,0 +1,120 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Citadel Cruise Missiles"
+
+ # 5% bonus to Citadel Cruise Missile damage per skill level.
+
+ def test_emDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Thunar Citadel Cruise Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Gremlin Rocket"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Catastrophe Citadel Cruise Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Fulmination Assault Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rajas Citadel Cruise Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Torpedo"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Sol Citadel Cruise Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Flameburst Light Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/missileLauncherOperation/citadelTorpedoes.py b/eos/tests/typeTests/skills/missileLauncherOperation/citadelTorpedoes.py
new file mode 100755
index 000000000..e785aa4b4
--- /dev/null
+++ b/eos/tests/typeTests/skills/missileLauncherOperation/citadelTorpedoes.py
@@ -0,0 +1,120 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Citadel Torpedoes"
+
+ # 5% bonus to citadel torpedo damage per skill level.
+
+ def test_emDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Thor Citadel Torpedo"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Sabretooth Light Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Doom Citadel Torpedo"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Phalanx Rocket"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rift Citadel Torpedo"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Assault Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Purgatory Citadel Torpedo"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Widowmaker Heavy Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/missileLauncherOperation/cruiseMissileSpecialization.py b/eos/tests/typeTests/skills/missileLauncherOperation/cruiseMissileSpecialization.py
new file mode 100755
index 000000000..e5b33694c
--- /dev/null
+++ b/eos/tests/typeTests/skills/missileLauncherOperation/cruiseMissileSpecialization.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Cruise Missile Specialization"
+
+ # 2% bonus per level to the rate of fire of modules requiring Cruise Missile Specialization.
+
+ def test_speed_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Cruise Missile Launcher II"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Cruise Missile Launcher I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/missileLauncherOperation/cruiseMissiles.py b/eos/tests/typeTests/skills/missileLauncherOperation/cruiseMissiles.py
new file mode 100755
index 000000000..b8ad31141
--- /dev/null
+++ b/eos/tests/typeTests/skills/missileLauncherOperation/cruiseMissiles.py
@@ -0,0 +1,232 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Cruise Missiles"
+
+ # 5% bonus to cruise missile damage per skill level.
+
+ def test_emDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Paradise Cruise Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Paradise Precision Cruise Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Hunter F.O.F. Cruise Missile I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Mjolnir Torpedo"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Devastator Cruise Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Devastator Fury Cruise Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Obliterator F.O.F. Cruise Missile I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Fulmination Assault Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Cruise Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Precision Cruise Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Dragon F.O.F. Cruise Missile I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Light Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Cataclysm Cruise Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Cataclysm Fury Cruise Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Phoenix F.O.F. Cruise Missile I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Foxfire Rocket"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/missileLauncherOperation/defenderMissiles.py b/eos/tests/typeTests/skills/missileLauncherOperation/defenderMissiles.py
new file mode 100755
index 000000000..e6dbb3518
--- /dev/null
+++ b/eos/tests/typeTests/skills/missileLauncherOperation/defenderMissiles.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Defender Missiles"
+
+ # 5% bonus to defender missile max velocity per skill level.
+
+ def test_maxVelocity_chargeMissileDefender(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Defender I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxVelocity_chargeOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Phalanx Rocket"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/missileLauncherOperation/fofMissiles.py b/eos/tests/typeTests/skills/missileLauncherOperation/fofMissiles.py
new file mode 100755
index 000000000..606de1f03
--- /dev/null
+++ b/eos/tests/typeTests/skills/missileLauncherOperation/fofMissiles.py
@@ -0,0 +1,232 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "FoF Missiles"
+
+ # 5% bonus to F.O.F (light, heavy and cruise) damage per skill level.
+
+ def test_emDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Seeker F.O.F. Light Missile I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Stalker F.O.F. Heavy Missile I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Hunter F.O.F. Cruise Missile I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Paradise Cruise Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Exterminator F.O.F. Light Missile I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Eradicator F.O.F. Heavy Missile I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Obliterator F.O.F. Cruise Missile I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Phalanx Rocket"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Serpent F.O.F. Light Missile I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Hydra F.O.F. Heavy Missile I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Dragon F.O.F. Cruise Missile I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rajas Citadel Cruise Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Firefly F.O.F. Light Missile I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Hellhound F.O.F. Heavy Missile I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Phoenix F.O.F. Cruise Missile I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Purgatory Citadel Torpedo"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/missileLauncherOperation/guidedMissilePrecision.py b/eos/tests/typeTests/skills/missileLauncherOperation/guidedMissilePrecision.py
new file mode 100755
index 000000000..af873460d
--- /dev/null
+++ b/eos/tests/typeTests/skills/missileLauncherOperation/guidedMissilePrecision.py
@@ -0,0 +1,176 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Guided Missile Precision"
+
+ # 5% decreased factor of signature radius for light, heavy and cruise missile explosions per level of skill.
+
+ def test_aoeCloudSize_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "aoeCloudSize"
+ item = "Flameburst Light Missile"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeCloudSize_chargeMissileLightNoSkillrqMissileOp(self):
+ self.buildTested = 0
+ attr = "aoeCloudSize"
+ item = "Civilian Bloodclaw Light Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeCloudSize_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "aoeCloudSize"
+ item = "Piranha Precision Light Missile"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeCloudSize_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "aoeCloudSize"
+ item = "Seeker F.O.F. Light Missile I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeCloudSize_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "aoeCloudSize"
+ item = "Scourge Heavy Missile"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeCloudSize_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "aoeCloudSize"
+ item = "Thunderbolt Precision Heavy Missile"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeCloudSize_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "aoeCloudSize"
+ item = "Hydra F.O.F. Heavy Missile I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeCloudSize_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "aoeCloudSize"
+ item = "Devastator Cruise Missile"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeCloudSize_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "aoeCloudSize"
+ item = "Wrath Fury Cruise Missile"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeCloudSize_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "aoeCloudSize"
+ item = "Hunter F.O.F. Cruise Missile I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeCloudSize_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "aoeCloudSize"
+ item = "Rajas Citadel Cruise Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeCloudSize_chargeOther(self):
+ self.buildTested = 0
+ attr = "aoeCloudSize"
+ item = "Terror Assault Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/missileLauncherOperation/heavyAssaultMissileSpecialization.py b/eos/tests/typeTests/skills/missileLauncherOperation/heavyAssaultMissileSpecialization.py
new file mode 100755
index 000000000..0f4ecb815
--- /dev/null
+++ b/eos/tests/typeTests/skills/missileLauncherOperation/heavyAssaultMissileSpecialization.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Heavy Assault Missile Specialization"
+
+ # 2% bonus per level to the rate of fire of modules requiring Heavy Assault Missile Specialization.
+
+ def test_speed_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Assault Missile Launcher II"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/missileLauncherOperation/heavyAssaultMissiles.py b/eos/tests/typeTests/skills/missileLauncherOperation/heavyAssaultMissiles.py
new file mode 100755
index 000000000..7f0938049
--- /dev/null
+++ b/eos/tests/typeTests/skills/missileLauncherOperation/heavyAssaultMissiles.py
@@ -0,0 +1,176 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Heavy Assault Missiles"
+
+ # 5% bonus to heavy assault missile damage per skill level.
+
+ def test_emDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Torrent Assault Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Torrent Rage Assault Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Mjolnir Torpedo"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Fulmination Assault Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Fulmination Javelin Assault Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Piranha Light Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Assault Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Rage Assault Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rajas Citadel Cruise Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Hellfire Assault Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Hellfire Rage Assault Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Widowmaker Heavy Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/missileLauncherOperation/heavyMissileSpecialization.py b/eos/tests/typeTests/skills/missileLauncherOperation/heavyMissileSpecialization.py
new file mode 100755
index 000000000..e5ca246b2
--- /dev/null
+++ b/eos/tests/typeTests/skills/missileLauncherOperation/heavyMissileSpecialization.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Heavy Missile Specialization"
+
+ # 2% bonus per level to the rate of fire of modules requiring Heavy Missile Specialization.
+
+ def test_speed_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Missile Launcher II"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Missile Launcher I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/missileLauncherOperation/heavyMissiles.py b/eos/tests/typeTests/skills/missileLauncherOperation/heavyMissiles.py
new file mode 100755
index 000000000..38147054e
--- /dev/null
+++ b/eos/tests/typeTests/skills/missileLauncherOperation/heavyMissiles.py
@@ -0,0 +1,232 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Heavy Missiles"
+
+ # 5% bonus to heavy missile damage per skill level.
+
+ def test_emDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Thunderbolt Heavy Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Thunderbolt Precision Heavy Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Stalker F.O.F. Heavy Missile I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Paradise Cruise Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Havoc Heavy Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Havoc Fury Heavy Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Eradicator F.O.F. Heavy Missile I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Doom Citadel Torpedo"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Heavy Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Fury Heavy Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Hydra F.O.F. Heavy Missile I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rajas Citadel Cruise Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Widowmaker Heavy Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Widowmaker Precision Heavy Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Hellhound F.O.F. Heavy Missile I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Inferno Torpedo"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/missileLauncherOperation/missileBombardment.py b/eos/tests/typeTests/skills/missileLauncherOperation/missileBombardment.py
new file mode 100755
index 000000000..dcc81d458
--- /dev/null
+++ b/eos/tests/typeTests/skills/missileLauncherOperation/missileBombardment.py
@@ -0,0 +1,288 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Missile Bombardment"
+
+ # 10% bonus to all missiles' maximum flight time per level.
+
+ def test_explosionDelay_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Foxfire Rocket"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosionDelay_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Gremlin Rage Rocket"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosionDelay_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Bloodclaw Light Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosionDelay_chargeMissileLightNoSkillrqMissileOp(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Civilian Bloodclaw Light Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosionDelay_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Sabretooth Fury Light Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosionDelay_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Firefly F.O.F. Light Missile I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosionDelay_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Torrent Assault Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosionDelay_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Terror Javelin Assault Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosionDelay_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Havoc Heavy Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosionDelay_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Scourge Fury Heavy Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosionDelay_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Hellhound F.O.F. Heavy Missile I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosionDelay_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Inferno Torpedo"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosionDelay_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Mjolnir Javelin Torpedo"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosionDelay_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Cataclysm Cruise Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosionDelay_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Devastator Precision Cruise Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosionDelay_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Hunter F.O.F. Cruise Missile I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosionDelay_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Rift Citadel Torpedo"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosionDelay_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Sol Citadel Cruise Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosionDelay_chargeMissileDefender(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Defender I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosionDelay_chargeOther(self):
+ self.buildTested = 0
+ attr = "explosionDelay"
+ item = "Electron Bomb"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/missileLauncherOperation/missileLauncherOperation.py b/eos/tests/typeTests/skills/missileLauncherOperation/missileLauncherOperation.py
new file mode 100755
index 000000000..7c3aacc60
--- /dev/null
+++ b/eos/tests/typeTests/skills/missileLauncherOperation/missileLauncherOperation.py
@@ -0,0 +1,148 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Missile Launcher Operation"
+
+ # 2% Bonus to missile launcher rate of fire per skill level.
+
+ def test_speed_moduleLauncherMissileRocket(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Rocket Launcher I"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleLauncherMissileStandard(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Standard Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleLauncherMissileStandardNoSkillrqMissileOp(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Civilian Standard Missile Launcher"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleLauncherMissileAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleLauncherMissileHeavyAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleLauncherMissileHeavy(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleLauncherMissileSiege(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Siege Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleLauncherMissileCruise(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Cruise Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleLauncherMissileCitadel(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Citadel Cruise Launcher I"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Mega Pulse Laser I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/missileLauncherOperation/missileProjection.py b/eos/tests/typeTests/skills/missileLauncherOperation/missileProjection.py
new file mode 100755
index 000000000..7e0856cf5
--- /dev/null
+++ b/eos/tests/typeTests/skills/missileLauncherOperation/missileProjection.py
@@ -0,0 +1,288 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Missile Projection"
+
+ # 10% bonus to all missiles' maximum velocity per level.
+
+ def test_maxVelocity_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Phalanx Rocket"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxVelocity_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Thorn Javelin Rocket"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxVelocity_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Piranha Light Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxVelocity_chargeMissileLightNoSkillrqMissileOp(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Civilian Bloodclaw Light Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxVelocity_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Flameburst Precision Light Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxVelocity_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Exterminator F.O.F. Light Missile I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxVelocity_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Fulmination Assault Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxVelocity_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Hellfire Javelin Assault Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxVelocity_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Widowmaker Heavy Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxVelocity_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Havoc Fury Heavy Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxVelocity_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Stalker F.O.F. Heavy Missile I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxVelocity_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Mjolnir Torpedo"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxVelocity_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Juggernaut Javelin Torpedo"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxVelocity_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Wrath Cruise Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxVelocity_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Devastator Fury Cruise Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxVelocity_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Dragon F.O.F. Cruise Missile I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxVelocity_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Thor Citadel Torpedo"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxVelocity_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Thunar Citadel Cruise Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxVelocity_chargeMissileDefender(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Defender I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxVelocity_chargeOther(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Lockbreaker Bomb"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/missileLauncherOperation/rapidLaunch.py b/eos/tests/typeTests/skills/missileLauncherOperation/rapidLaunch.py
new file mode 100755
index 000000000..3c9becbdb
--- /dev/null
+++ b/eos/tests/typeTests/skills/missileLauncherOperation/rapidLaunch.py
@@ -0,0 +1,148 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Rapid Launch"
+
+ # 3% bonus to missile launcher rate of fire per level.
+
+ def test_speed_moduleLauncherMissileRocket(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Rocket Launcher I"
+ iLvl = 1
+ iIngame = 0.97
+ fLvl = 4
+ fIngame = 0.88
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleLauncherMissileStandard(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Standard Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.97
+ fLvl = 4
+ fIngame = 0.88
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleLauncherMissileStandardNoSkillrqMissileOp(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Civilian Standard Missile Launcher"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleLauncherMissileAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.97
+ fLvl = 4
+ fIngame = 0.88
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleLauncherMissileHeavyAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.97
+ fLvl = 4
+ fIngame = 0.88
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleLauncherMissileHeavy(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Heavy Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.97
+ fLvl = 4
+ fIngame = 0.88
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleLauncherMissileSiege(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Siege Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.97
+ fLvl = 4
+ fIngame = 0.88
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleLauncherMissileCruise(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Cruise Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.97
+ fLvl = 4
+ fIngame = 0.88
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleLauncherMissileCitadel(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Citadel Torpedo Launcher I"
+ iLvl = 1
+ iIngame = 0.97
+ fLvl = 4
+ fIngame = 0.88
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleOther(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Dual 150mm Railgun I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/missileLauncherOperation/rocketSpecialization.py b/eos/tests/typeTests/skills/missileLauncherOperation/rocketSpecialization.py
new file mode 100755
index 000000000..c9a6943f3
--- /dev/null
+++ b/eos/tests/typeTests/skills/missileLauncherOperation/rocketSpecialization.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Rocket Specialization"
+
+ # 2% bonus per level to the rate of fire of modules requiring Rocket Specialization.
+
+ def test_speed_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Rocket Launcher II"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Rocket Launcher I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/missileLauncherOperation/rockets.py b/eos/tests/typeTests/skills/missileLauncherOperation/rockets.py
new file mode 100755
index 000000000..727f1d3cb
--- /dev/null
+++ b/eos/tests/typeTests/skills/missileLauncherOperation/rockets.py
@@ -0,0 +1,176 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Rockets"
+
+ # 5% bonus to rocket damage per skill level.
+
+ def test_emDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Gremlin Rocket"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Gremlin Rage Rocket"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Mjolnir Torpedo"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Phalanx Rocket"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Phalanx Rage Rocket"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Bane Torpedo"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rocket"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Javelin Rocket"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rift Citadel Torpedo"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Foxfire Rocket"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Foxfire Javelin Rocket"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Flameburst Light Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/missileLauncherOperation/standardMissileSpecialization.py b/eos/tests/typeTests/skills/missileLauncherOperation/standardMissileSpecialization.py
new file mode 100755
index 000000000..d27dba219
--- /dev/null
+++ b/eos/tests/typeTests/skills/missileLauncherOperation/standardMissileSpecialization.py
@@ -0,0 +1,64 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Standard Missile Specialization"
+
+ # 2% bonus per level to the rate of fire of modules requiring Standard Missile Specialization.
+
+ def test_speed_moduleWithSkillrqStandard(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Standard Missile Launcher II"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleNoSkillrqStandard(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Standard Missile Launcher I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleWithSkillrqAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Assault Missile Launcher II"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleNoSkillrqAssault(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/missileLauncherOperation/standardMissiles.py b/eos/tests/typeTests/skills/missileLauncherOperation/standardMissiles.py
new file mode 100755
index 000000000..1b506fbae
--- /dev/null
+++ b/eos/tests/typeTests/skills/missileLauncherOperation/standardMissiles.py
@@ -0,0 +1,246 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Standard Missiles"
+
+ # 5% Bonus to light missile damage per skill level.
+
+ def test_emDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Sabretooth Light Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Sabretooth Fury Light Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Seeker F.O.F. Light Missile I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Gremlin Rocket"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Piranha Light Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Piranha Precision Light Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Exterminator F.O.F. Light Missile I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Havoc Heavy Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Light Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Fury Light Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Serpent F.O.F. Light Missile I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileLightNoSkillrqMissileOp(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Civilian Bloodclaw Light Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Torpedo"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Flameburst Light Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Flameburst Fury Light Missile"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Firefly F.O.F. Light Missile I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Sol Citadel Cruise Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/missileLauncherOperation/targetNavigationPrediction.py b/eos/tests/typeTests/skills/missileLauncherOperation/targetNavigationPrediction.py
new file mode 100755
index 000000000..c5a0cd6c2
--- /dev/null
+++ b/eos/tests/typeTests/skills/missileLauncherOperation/targetNavigationPrediction.py
@@ -0,0 +1,260 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Target Navigation Prediction"
+
+ # 10% decrease per level in factor of target's velocity for all missiles.
+
+ def test_aoeVelocity_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Gremlin Rocket"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeVelocity_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Phalanx Javelin Rocket"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeVelocity_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Bloodclaw Light Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeVelocity_chargeMissileLightNoSkillrqMissileOp(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Civilian Bloodclaw Light Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeVelocity_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Piranha Fury Light Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeVelocity_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Seeker F.O.F. Light Missile I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeVelocity_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Hellfire Assault Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeVelocity_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Fulmination Rage Assault Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeVelocity_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Havoc Heavy Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeVelocity_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Scourge Precision Heavy Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeVelocity_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Hydra F.O.F. Heavy Missile I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeVelocity_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Bane Torpedo"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeVelocity_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Juggernaut Rage Torpedo"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeVelocity_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Paradise Cruise Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeVelocity_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Paradise Fury Cruise Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeVelocity_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Phoenix F.O.F. Cruise Missile I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeVelocity_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Purgatory Citadel Torpedo"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_aoeVelocity_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "aoeVelocity"
+ item = "Catastrophe Citadel Cruise Missile"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/missileLauncherOperation/torpedoSpecialization.py b/eos/tests/typeTests/skills/missileLauncherOperation/torpedoSpecialization.py
new file mode 100755
index 000000000..a6bdf2585
--- /dev/null
+++ b/eos/tests/typeTests/skills/missileLauncherOperation/torpedoSpecialization.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Torpedo Specialization"
+
+ # 2% bonus per level to the rate of fire of modules requiring Torpedo Specialization.
+
+ def test_speed_moduleWithSkillrq(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Siege Missile Launcher II"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speed_moduleNoSkillrq(self):
+ self.buildTested = 0
+ attr = "speed"
+ item = "Siege Missile Launcher I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/missileLauncherOperation/torpedoes.py b/eos/tests/typeTests/skills/missileLauncherOperation/torpedoes.py
new file mode 100755
index 000000000..8b7397455
--- /dev/null
+++ b/eos/tests/typeTests/skills/missileLauncherOperation/torpedoes.py
@@ -0,0 +1,176 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Torpedoes"
+
+ # 5% bonus to torpedo damage per skill level.
+
+ def test_emDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Mjolnir Torpedo"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Mjolnir Javelin Torpedo"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Gremlin Rocket"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Bane Torpedo"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Bane Rage Torpedo"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Catastrophe Citadel Cruise Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Torpedo"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Rage Torpedo"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Heavy Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Inferno Torpedo"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Inferno Javelin Torpedo"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Cataclysm Cruise Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/missileLauncherOperation/warheadUpgrades.py b/eos/tests/typeTests/skills/missileLauncherOperation/warheadUpgrades.py
new file mode 100755
index 000000000..9b1fed991
--- /dev/null
+++ b/eos/tests/typeTests/skills/missileLauncherOperation/warheadUpgrades.py
@@ -0,0 +1,1044 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Warhead Upgrades"
+
+ # 2% bonus to all missile damage per skill level.
+
+ def test_emDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Gremlin Rocket"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Gremlin Javelin Rocket"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Sabretooth Light Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Sabretooth Fury Light Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Seeker F.O.F. Light Missile I"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Torrent Assault Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Torrent Javelin Assault Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Thunderbolt Heavy Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Thunderbolt Fury Heavy Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Stalker F.O.F. Heavy Missile I"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Mjolnir Torpedo"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Mjolnir Javelin Torpedo"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Paradise Cruise Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Paradise Fury Cruise Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Hunter F.O.F. Cruise Missile I"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Thor Citadel Torpedo"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Thunar Citadel Cruise Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Aurora S"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Phalanx Rocket"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Phalanx Javelin Rocket"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Piranha Light Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Piranha Fury Light Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Exterminator F.O.F. Light Missile I"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Fulmination Assault Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Fulmination Rage Assault Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Havoc Heavy Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Havoc Fury Heavy Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Eradicator F.O.F. Heavy Missile I"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Bane Torpedo"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Bane Rage Torpedo"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Devastator Cruise Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Devastator Precision Cruise Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Obliterator F.O.F. Cruise Missile I"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Doom Citadel Torpedo"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Catastrophe Citadel Cruise Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeMissileDefender(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Defender I"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Fusion S"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rocket"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Thorn Rage Rocket"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Light Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Bloodclaw Precision Light Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Serpent F.O.F. Light Missile I"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Assault Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Terror Rage Assault Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Heavy Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Scourge Precision Heavy Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Hydra F.O.F. Heavy Missile I"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Torpedo"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Juggernaut Rage Torpedo"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Cruise Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Wrath Fury Cruise Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Dragon F.O.F. Cruise Missile I"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rift Citadel Torpedo"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Rajas Citadel Cruise Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeMissileLightNoSkillrqMissileOp(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Civilian Bloodclaw Light Missile"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Antimatter Charge L"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileRocket(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Foxfire Rocket"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileRocketAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Foxfire Javelin Rocket"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileLight(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Flameburst Light Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileLightAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Flameburst Fury Light Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileLightFof(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Firefly F.O.F. Light Missile I"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileAssault(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Hellfire Assault Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileAssaultAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Hellfire Javelin Assault Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileHeavy(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Widowmaker Heavy Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileHeavyAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Widowmaker Precision Heavy Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileHeavyFof(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Hellhound F.O.F. Heavy Missile I"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileTorpedo(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Inferno Torpedo"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileTorpedoAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Inferno Rage Torpedo"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileCruise(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Cataclysm Cruise Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileCruiseAdvanced(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Cataclysm Precision Cruise Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileCruiseFof(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Phoenix F.O.F. Cruise Missile I"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileCitadelTorpedo(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Purgatory Citadel Torpedo"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeMissileCitadelCruise(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Sol Citadel Cruise Missile"
+ iLvl = 1
+ iIngame = 1.02
+ fLvl = 4
+ fIngame = 1.08
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_chargeOther(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Scorch Bomb"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/navigation/__init__.py b/eos/tests/typeTests/skills/navigation/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/skills/navigation/accelerationControl.py b/eos/tests/typeTests/skills/navigation/accelerationControl.py
new file mode 100755
index 000000000..107ae81c7
--- /dev/null
+++ b/eos/tests/typeTests/skills/navigation/accelerationControl.py
@@ -0,0 +1,64 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Acceleration Control"
+
+ # 5% Bonus to Afterburner and MicroWarpdrive speed boost per skill level.
+
+ def test_speedFactor_moduleAfterburnerSkillrqAfterburner(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "1MN Afterburner I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speedFactor_moduleAfterburnerSkillrqHighSpeedManeuvering(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "1MN MicroWarpdrive I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speedFactor_moduleAfterburnerNoSkillrq(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "Civilian Afterburner"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_speedFactor_moduleOther(self):
+ self.buildTested = 0
+ attr = "speedFactor"
+ item = "Stasis Webifier I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/navigation/afterburner.py b/eos/tests/typeTests/skills/navigation/afterburner.py
new file mode 100755
index 000000000..6842eefd2
--- /dev/null
+++ b/eos/tests/typeTests/skills/navigation/afterburner.py
@@ -0,0 +1,50 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Afterburner"
+
+ # 10% bonus to Afterburner duration per skill level.
+
+ def test_duration_moduleAfterburnerSkillrq(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "1MN Afterburner I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_duration_moduleAfterburnerNoSkillrq(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "10MN MicroWarpdrive I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_duration_moduleAfterburnerNoSkillrqCivilian(self):
+ self.buildTested = 0
+ attr = "duration"
+ item = "Civilian Afterburner"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/navigation/evasiveManeuvering.py b/eos/tests/typeTests/skills/navigation/evasiveManeuvering.py
new file mode 100755
index 000000000..5f75d9267
--- /dev/null
+++ b/eos/tests/typeTests/skills/navigation/evasiveManeuvering.py
@@ -0,0 +1,21 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Evasive Maneuvering"
+
+ # 5% improved ship agility for all ships per skill level.
+
+ def test_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl))
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/navigation/fuelConservation.py b/eos/tests/typeTests/skills/navigation/fuelConservation.py
new file mode 100755
index 000000000..f96860fc6
--- /dev/null
+++ b/eos/tests/typeTests/skills/navigation/fuelConservation.py
@@ -0,0 +1,50 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Fuel Conservation"
+
+ # 10% reduction in afterburner capacitor needs per skill level.
+
+ def test_capacitorNeed_moduleAfterburnerSkillrqAfterburner(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "100MN Afterburner I"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleAfterburnerNoSkillrq(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "100MN MicroWarpdrive I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleAfterburnerNoSkillrqCivilian(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "Civilian Afterburner"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/navigation/highSpeedManeuvering.py b/eos/tests/typeTests/skills/navigation/highSpeedManeuvering.py
new file mode 100755
index 000000000..f0a3486d7
--- /dev/null
+++ b/eos/tests/typeTests/skills/navigation/highSpeedManeuvering.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "High Speed Maneuvering"
+
+ # 5% reduction in MicroWarpdrive capacitor usage per skill level.
+
+ def test_capacitorNeed_moduleAfterburnerSkillrq(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "10MN MicroWarpdrive I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_capacitorNeed_moduleAfterburnerNoSkillrq(self):
+ self.buildTested = 0
+ attr = "capacitorNeed"
+ item = "1MN Afterburner I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/navigation/jumpDriveCalibration.py b/eos/tests/typeTests/skills/navigation/jumpDriveCalibration.py
new file mode 100755
index 000000000..1043deb7b
--- /dev/null
+++ b/eos/tests/typeTests/skills/navigation/jumpDriveCalibration.py
@@ -0,0 +1,22 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Jump Drive Calibration"
+
+ # Each skill level grants a 25% increase in maximum jump range.
+
+ def test_jumpDriveRange_ship(self):
+ self.buildTested = 0
+ attr = "jumpDriveRange"
+ ship = "Archon"
+ iLvl = 1
+ iIngame = 1.25
+ fLvl = 4
+ fIngame = 2.0
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=ship)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/navigation/jumpDriveOperation.py b/eos/tests/typeTests/skills/navigation/jumpDriveOperation.py
new file mode 100755
index 000000000..d3259120c
--- /dev/null
+++ b/eos/tests/typeTests/skills/navigation/jumpDriveOperation.py
@@ -0,0 +1,22 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Jump Drive Operation"
+
+ # Each skill level reduces the capacitor need of initiating a jump by 5%.
+
+ def test_jumpDriveCapacitorNeed_ship(self):
+ self.buildTested = 0
+ attr = "jumpDriveCapacitorNeed"
+ ship = "Revelation"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=ship)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/navigation/jumpFuelConservation.py b/eos/tests/typeTests/skills/navigation/jumpFuelConservation.py
new file mode 100755
index 000000000..5a1277540
--- /dev/null
+++ b/eos/tests/typeTests/skills/navigation/jumpFuelConservation.py
@@ -0,0 +1,22 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Jump Fuel Conservation"
+
+ # 10% reduction in ice consumption amount for jump drive operation per light year per skill level.
+
+ def test_jumpDriveConsumptionAmount_ship(self):
+ self.buildTested = 0
+ attr = "jumpDriveConsumptionAmount"
+ ship = "Thanatos"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=ship)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/navigation/navigation.py b/eos/tests/typeTests/skills/navigation/navigation.py
new file mode 100755
index 000000000..a061fd1de
--- /dev/null
+++ b/eos/tests/typeTests/skills/navigation/navigation.py
@@ -0,0 +1,35 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Navigation"
+
+ # 5% bonus to sub-warp ship velocity per skill level.
+
+ def test_maxVelocity_ship(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl))
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxVelocity_subsystem(self):
+ self.buildTested = 0
+ attr = "maxVelocity"
+ item = "Proteus Propulsion - Wake Limiter"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/navigation/warpDriveOperation.py b/eos/tests/typeTests/skills/navigation/warpDriveOperation.py
new file mode 100755
index 000000000..16f285d54
--- /dev/null
+++ b/eos/tests/typeTests/skills/navigation/warpDriveOperation.py
@@ -0,0 +1,21 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Warp Drive Operation"
+
+ # Each skill level reduces the capacitor need of initiating warp by 10%.
+
+ def test_warpCapacitorNeed_ship(self):
+ self.buildTested = 0
+ attr = "warpCapacitorNeed"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl))
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/science/__init__.py b/eos/tests/typeTests/skills/science/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/skills/science/archaeology.py b/eos/tests/typeTests/skills/science/archaeology.py
new file mode 100755
index 000000000..245e70d79
--- /dev/null
+++ b/eos/tests/typeTests/skills/science/archaeology.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Archaeology"
+
+ # 5% increase in chance of archaeological find per level.
+
+ def test_accessDifficultyBonus_moduleDataMinerSkillrq(self):
+ self.buildTested = 0
+ attr = "accessDifficultyBonus"
+ item = "Analyzer I"
+ iLvl = 1
+ iIngame = 5.0
+ fLvl = 4
+ fIngame = 20.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_accessDifficultyBonus_moduleDataMinerNoSkillrq(self):
+ self.buildTested = 0
+ attr = "accessDifficultyBonus"
+ item = "Codebreaker I"
+ iLvl = 1
+ iIngame = 5.0
+ fLvl = 4
+ fIngame = 5.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/science/astrogeology.py b/eos/tests/typeTests/skills/science/astrogeology.py
new file mode 100755
index 000000000..d545499a5
--- /dev/null
+++ b/eos/tests/typeTests/skills/science/astrogeology.py
@@ -0,0 +1,92 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Astrogeology"
+
+ # 5% bonus to mining turret yield per skill level.
+
+ def test_miningAmount_moduleMiningLaser(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Modulated Deep Core Miner II"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningAmount_moduleFrequencyMiningLaser(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Miner I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningAmount_moduleStripMiner(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Strip Miner I"
+ iLvl = 1
+ iIngame = 1.05
+ fLvl = 4
+ fIngame = 1.2
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningAmount_moduleStripMinerNoSkillrq(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Ice Harvester I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningAmount_moduleOther(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Gas Cloud Harvester I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_miningAmount_droneMining(self):
+ self.buildTested = 0
+ attr = "miningAmount"
+ item = "Mining Drone I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/science/astrometricPinpointing.py b/eos/tests/typeTests/skills/science/astrometricPinpointing.py
new file mode 100755
index 000000000..9e089592f
--- /dev/null
+++ b/eos/tests/typeTests/skills/science/astrometricPinpointing.py
@@ -0,0 +1,22 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Astrometric Pinpointing"
+
+ # Reduces maximum scan deviation by 10% per level.
+
+ def test_baseMaxScanDeviation_chargeScanProbe(self):
+ self.buildTested = 0
+ attr = "baseMaxScanDeviation"
+ item = "Core Scanner Probe I"
+ iLvl = 1
+ iIngame = 0.9
+ fLvl = 4
+ fIngame = 0.6
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/science/astrometricRangefinding.py b/eos/tests/typeTests/skills/science/astrometricRangefinding.py
new file mode 100755
index 000000000..282c7462d
--- /dev/null
+++ b/eos/tests/typeTests/skills/science/astrometricRangefinding.py
@@ -0,0 +1,22 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Astrometric Rangefinding"
+
+ # 10% increase to scan probe strength per level.
+
+ def test_baseSensorStrength_chargeScanProbe(self):
+ self.buildTested = 0
+ attr = "baseSensorStrength"
+ item = "Combat Scanner Probe I"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/science/biology.py b/eos/tests/typeTests/skills/science/biology.py
new file mode 100755
index 000000000..c432a2fc1
--- /dev/null
+++ b/eos/tests/typeTests/skills/science/biology.py
@@ -0,0 +1,22 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Biology"
+
+ # 20% Bonus to attribute booster duration per skill level.
+
+ def test_boosterDuration_booster(self):
+ self.buildTested = 0
+ attr = "boosterDuration"
+ item = "Synth Crash Booster"
+ iLvl = 1
+ iIngame = 1.2
+ fLvl = 4
+ fIngame = 1.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/science/cloningFacilityOperation.py b/eos/tests/typeTests/skills/science/cloningFacilityOperation.py
new file mode 100755
index 000000000..e9d2df8ef
--- /dev/null
+++ b/eos/tests/typeTests/skills/science/cloningFacilityOperation.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Cloning Facility Operation"
+
+ # Increases a Clone Vat Bay's maximum clone capacity by 15% per skill level.
+
+ def test_maxJumpClones_shipTitan(self):
+ self.buildTested = 0
+ attr = "maxJumpClones"
+ ship = "Erebus"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=ship)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_maxJumpClones_shipCapitalIndustrial(self):
+ self.buildTested = 0
+ attr = "maxJumpClones"
+ ship = "Rorqual"
+ iLvl = 1
+ iIngame = 1.15
+ fLvl = 4
+ fIngame = 1.6
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=ship)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/science/doomsdayOperation.py b/eos/tests/typeTests/skills/science/doomsdayOperation.py
new file mode 100755
index 000000000..75d8a9f20
--- /dev/null
+++ b/eos/tests/typeTests/skills/science/doomsdayOperation.py
@@ -0,0 +1,120 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Doomsday Operation"
+
+ # 10% increased damage per level.
+
+ def test_emDamage_moduleSuperWeapon(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Judgement"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_emDamage_moduleOther(self):
+ self.buildTested = 0
+ attr = "emDamage"
+ item = "Medium EMP Smartbomb I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_moduleSuperWeapon(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Gjallarhorn"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_explosiveDamage_moduleOther(self):
+ self.buildTested = 0
+ attr = "explosiveDamage"
+ item = "Medium Proton Smartbomb I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_moduleSuperWeapon(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Oblivion"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_kineticDamage_moduleOther(self):
+ self.buildTested = 0
+ attr = "kineticDamage"
+ item = "Medium Graviton Smartbomb I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_moduleSuperWeapon(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Aurora Ominae"
+ iLvl = 1
+ iIngame = 1.1
+ fLvl = 4
+ fIngame = 1.4
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_thermalDamage_moduleOther(self):
+ self.buildTested = 0
+ attr = "thermalDamage"
+ item = "Medium Plasma Smartbomb I"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/science/hacking.py b/eos/tests/typeTests/skills/science/hacking.py
new file mode 100755
index 000000000..a65613c76
--- /dev/null
+++ b/eos/tests/typeTests/skills/science/hacking.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Hacking"
+
+ # 5% increase in chance of data retrieval per level.
+
+ def test_accessDifficultyBonus_moduleDataMinerSkillrq(self):
+ self.buildTested = 0
+ attr = "accessDifficultyBonus"
+ item = "Codebreaker I"
+ iLvl = 1
+ iIngame = 5.0
+ fLvl = 4
+ fIngame = 20.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_accessDifficultyBonus_moduleDataMinerNoSkillrq(self):
+ self.buildTested = 0
+ attr = "accessDifficultyBonus"
+ item = "Salvager I"
+ iLvl = 1
+ iIngame = 5.0
+ fLvl = 4
+ fIngame = 5.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame - iIngame
+ dEos = fEos - iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/science/jumpPortalGeneration.py b/eos/tests/typeTests/skills/science/jumpPortalGeneration.py
new file mode 100755
index 000000000..502d1361c
--- /dev/null
+++ b/eos/tests/typeTests/skills/science/jumpPortalGeneration.py
@@ -0,0 +1,36 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Jump Portal Generation"
+
+ # 10% reduced material cost for jump portal activation per level.
+
+ def test_consumptionQuantity_moduleJumpPortalGenerator(self):
+ self.buildTested = 0
+ attr = "consumptionQuantity"
+ item = "Jump Portal Generator I"
+ iLvl = 1
+ iIngame = 450.0
+ fLvl = 4
+ fIngame = 300.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_consumptionQuantity_moduleOther(self):
+ self.buildTested = 0
+ attr = "consumptionQuantity"
+ item = "Cynosural Field Generator I"
+ iLvl = 1
+ iIngame = 500.0
+ fLvl = 4
+ fIngame = 500.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/science/naniteControl.py b/eos/tests/typeTests/skills/science/naniteControl.py
new file mode 100755
index 000000000..6b107482e
--- /dev/null
+++ b/eos/tests/typeTests/skills/science/naniteControl.py
@@ -0,0 +1,205 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Nanite Control"
+
+ # No ingame description.
+ # Reduces severity of booster side-effects by 5% per level.
+
+ def test_boosterAOEVelocityPenalty_booster(self):
+ self.buildTested = 0
+ attr = "boosterAOEVelocityPenalty"
+ item = "Standard Blue Pill Booster"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_boosterArmorHPPenalty_booster(self):
+ self.buildTested = 0
+ attr = "boosterArmorHPPenalty"
+ item = "Standard Exile Booster"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_boosterArmorRepairAmountPenalty_booster(self):
+ self.buildTested = 0
+ attr = "boosterArmorRepairAmountPenalty"
+ item = "Improved Sooth Sayer Booster"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_boosterCapacitorCapacityPenalty_booster(self):
+ self.buildTested = 0
+ attr = "boosterCapacitorCapacityPenalty"
+ item = "Strong Blue Pill Booster"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_boosterMaxVelocityPenalty_booster(self):
+ self.buildTested = 0
+ attr = "boosterMaxVelocityPenalty"
+ item = "Improved Sooth Sayer Booster"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_boosterMissileAOECloudPenalty_booster(self):
+ self.buildTested = 0
+ attr = "boosterMissileAOECloudPenalty"
+ item = "Standard Mindflood Booster"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_boosterMissileVelocityPenalty_booster(self):
+ self.buildTested = 0
+ attr = "boosterMissileVelocityPenalty"
+ item = "Strong Crash Booster"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_boosterShieldBoostAmountPenalty_booster(self):
+ self.buildTested = 0
+ attr = "boosterShieldBoostAmountPenalty"
+ item = "Standard Frentix Booster"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_boosterShieldCapacityPenalty_booster(self):
+ self.buildTested = 0
+ attr = "boosterShieldCapacityPenalty"
+ item = "Improved Drop Booster"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_boosterTurretFalloffPenalty_booster(self):
+ self.buildTested = 0
+ attr = "boosterTurretFalloffPenalty"
+ item = "Standard X-Instinct Booster"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_boosterTurretOptimalRange_booster(self):
+ self.buildTested = 0
+ attr = "boosterTurretOptimalRange"
+ item = "Improved Sooth Sayer Booster"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_boosterTurretTrackingPenalty_booster(self):
+ self.buildTested = 0
+ attr = "boosterTurretTrackingPenalty"
+ item = "Improved Frentix Booster"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_shieldBoostMultiplier_boosterPenalty(self):
+ self.buildTested = 0
+ attr = "shieldBoostMultiplier"
+ item = "Improved Mindflood Booster"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_shieldBoostMultiplier_boosterBonus(self):
+ self.buildTested = 0
+ attr = "shieldBoostMultiplier"
+ item = "Strong Blue Pill Booster"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/science/neurotoxinRecovery.py b/eos/tests/typeTests/skills/science/neurotoxinRecovery.py
new file mode 100755
index 000000000..c2ad0b8c8
--- /dev/null
+++ b/eos/tests/typeTests/skills/science/neurotoxinRecovery.py
@@ -0,0 +1,79 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Neurotoxin Recovery"
+
+ # No ingame description.
+ # Reduces chance of getting booster side-effects by 5% per level.
+
+ def test_boosterEffectChance1_booster(self):
+ self.buildTested = 0
+ attr = "boosterEffectChance1"
+ item = "Standard Blue Pill Booster"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_boosterEffectChance2_booster(self):
+ self.buildTested = 0
+ attr = "boosterEffectChance2"
+ item = "Improved Frentix Booster"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_boosterEffectChance3_booster(self):
+ self.buildTested = 0
+ attr = "boosterEffectChance3"
+ item = "Strong Exile Booster"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_boosterEffectChance4_booster(self):
+ self.buildTested = 0
+ attr = "boosterEffectChance4"
+ item = "Standard Mindflood Booster"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_boosterEffectChance5_booster(self):
+ self.buildTested = 0
+ attr = "boosterEffectChance5"
+ item = "Improved Drop Booster"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/science/thermodynamics.py b/eos/tests/typeTests/skills/science/thermodynamics.py
new file mode 100755
index 000000000..2726d2af5
--- /dev/null
+++ b/eos/tests/typeTests/skills/science/thermodynamics.py
@@ -0,0 +1,386 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Thermodynamics"
+
+ # Reduces heat damage by 5% per level.
+
+ def test_heatDamage_moduleAfterburner(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "100MN Afterburner I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heatDamage_moduleArmorHardener(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Armor EM Hardener I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heatDamage_moduleArmorRepairProjector(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Remote Armor Repair System I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heatDamage_moduleArmorRepairer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Civilian Armor Repairer"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heatDamage_moduleCapacitorBooster(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Medium Capacitor Booster I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heatDamage_moduleECCM(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "ECCM - Ladar I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heatDamage_moduleECM(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "ECM - Multispectral Jammer I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heatDamage_moduleEnergyDestabilizer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Energy Neutralizer I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heatDamage_moduleEnergyTransferArray(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Large Energy Transfer Array I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heatDamage_moduleEnergyVampire(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Nosferatu I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heatDamage_moduleEnergyWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Medium Pulse Laser I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heatDamage_moduleHullRepairer(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Medium Hull Repairer I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heatDamage_moduleHybridWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Dual 250mm Railgun II"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heatDamage_moduleMissileLauncherAssault(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heatDamage_moduleMissileLauncherCitadel(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Citadel Torpedo Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heatDamage_moduleMissileLauncherCruise(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Cruise Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heatDamage_moduleMissileLauncherHeavy(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heatDamage_moduleMissileLauncherHeavyAssault(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Heavy Assault Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heatDamage_moduleMissileLauncherRocket(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Rocket Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heatDamage_moduleMissileLauncherSiege(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Siege Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heatDamage_moduleMissileLauncherStandard(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Standard Missile Launcher I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heatDamage_moduleProjectileWeapon(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Dual 425mm AutoCannon I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heatDamage_moduleShieldBooster(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Small Shield Booster I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heatDamage_moduleShieldHardener(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Photon Scattering Field I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heatDamage_moduleShieldTransporter(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Medium Shield Transporter I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heatDamage_moduleStasisWeb(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Stasis Webifier I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_heatDamage_moduleWarpScrambler(self):
+ self.buildTested = 0
+ attr = "heatDamage"
+ item = "Warp Disruptor I"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getItemAttr(attr, item, skill=(self.skill, iLvl))
+ fEos = self.getItemAttr(attr, item, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/spaceshipCommand/__init__.py b/eos/tests/typeTests/skills/spaceshipCommand/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/tests/typeTests/skills/spaceshipCommand/advancedSpaceshipCommand.py b/eos/tests/typeTests/skills/spaceshipCommand/advancedSpaceshipCommand.py
new file mode 100755
index 000000000..f6bc88eac
--- /dev/null
+++ b/eos/tests/typeTests/skills/spaceshipCommand/advancedSpaceshipCommand.py
@@ -0,0 +1,6 @@
+"""
+All bonuses are applied through shipAdvancedSpaceshipCommandAgilityBonus effect,
+which is assigned to certain ships, not skill, so skill's effect is actually not used
+and range of affected ships broader than just t1 freighters (they're only with direct
+skill requirement). All tests are loccated in specific ship test suites.
+"""
diff --git a/eos/tests/typeTests/skills/spaceshipCommand/capitalShips.py b/eos/tests/typeTests/skills/spaceshipCommand/capitalShips.py
new file mode 100755
index 000000000..8c16a7467
--- /dev/null
+++ b/eos/tests/typeTests/skills/spaceshipCommand/capitalShips.py
@@ -0,0 +1,92 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Capital Ships"
+
+ # Grants a 5% bonus per skill level to the agility of ships requiring the Capital Ships skill.
+
+ def test_agility_shipCarrierSkillrq(self):
+ self.buildTested = 0
+ attr = "agility"
+ ship = "Archon"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=ship)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_agility_shipDreadnoughtSkillrq(self):
+ self.buildTested = 0
+ attr = "agility"
+ ship = "Phoenix"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=ship)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_agility_shipSupercarrierSkillrq(self):
+ self.buildTested = 0
+ attr = "agility"
+ ship = "Aeon"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=ship)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_agility_shipTitanSkillrq(self):
+ self.buildTested = 0
+ attr = "agility"
+ ship = "Leviathan"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=ship)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_agility_shipCapitalIndustrialSkillrq(self):
+ self.buildTested = 0
+ attr = "agility"
+ ship = "Rorqual"
+ iLvl = 1
+ iIngame = 0.95
+ fLvl = 4
+ fIngame = 0.8
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=ship)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
+
+ def test_agility_shipNoSkillrq(self):
+ self.buildTested = 0
+ attr = "agility"
+ ship = "Obelisk"
+ iLvl = 1
+ iIngame = 1.0
+ fLvl = 4
+ fIngame = 1.0
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl), ship=ship)
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl), ship=ship)
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/tests/typeTests/skills/spaceshipCommand/spaceshipCommand.py b/eos/tests/typeTests/skills/spaceshipCommand/spaceshipCommand.py
new file mode 100755
index 000000000..8dedd2612
--- /dev/null
+++ b/eos/tests/typeTests/skills/spaceshipCommand/spaceshipCommand.py
@@ -0,0 +1,21 @@
+from eos.tests import TestBase
+
+class Test(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.skill = "Spaceship Command"
+
+ # 2% improved ship agility for all ships per skill level.
+
+ def test_agility_ship(self):
+ self.buildTested = 0
+ attr = "agility"
+ iLvl = 1
+ iIngame = 0.98
+ fLvl = 4
+ fIngame = 0.92
+ iEos = self.getShipAttr(attr, skill=(self.skill, iLvl))
+ fEos = self.getShipAttr(attr, skill=(self.skill, fLvl))
+ dIngame = fIngame / iIngame
+ dEos = fEos / iEos
+ self.assertAlmostEquals(dEos, dIngame)
diff --git a/eos/types.py b/eos/types.py
new file mode 100755
index 000000000..502caafd3
--- /dev/null
+++ b/eos/types.py
@@ -0,0 +1,35 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+from eos.gamedata import Attribute, Category, Effect, Group, Icon, Item, MarketGroup, \
+MetaGroup, AttributeInfo, Unit, EffectInfo, MetaType, MetaData
+from eos.saveddata.price import Price
+from eos.saveddata.user import User
+from eos.saveddata.damagePattern import DamagePattern
+from eos.saveddata.character import Character, Skill
+from eos.saveddata.module import Module, State, Slot, Hardpoint
+from eos.saveddata.drone import Drone
+from eos.saveddata.implant import Implant
+from eos.saveddata.booster import SideEffect
+from eos.saveddata.booster import Booster
+from eos.saveddata.ship import Ship
+from eos.saveddata.fit import Fit
+from eos.saveddata.fleet import Fleet, Wing, Squad
+from eos.saveddata.miscData import MiscData
+import eos.db
diff --git a/eos/utils/__init__.py b/eos/utils/__init__.py
new file mode 100755
index 000000000..e69de29bb
diff --git a/eos/utils/compat.py b/eos/utils/compat.py
new file mode 100755
index 000000000..d8177973b
--- /dev/null
+++ b/eos/utils/compat.py
@@ -0,0 +1,258 @@
+# Backport of OrderedDict() class that runs on Python 2.4, 2.5, 2.6, 2.7 and pypy.
+# Passes Python2.7's test suite and incorporates all the latest updates.
+
+try:
+ from thread import get_ident as _get_ident
+except ImportError:
+ from dummy_thread import get_ident as _get_ident
+
+try:
+ from _abcoll import KeysView, ValuesView, ItemsView
+except ImportError:
+ pass
+
+
+class OrderedDict(dict):
+ 'Dictionary that remembers insertion order'
+ # An inherited dict maps keys to values.
+ # The inherited dict provides __getitem__, __len__, __contains__, and get.
+ # The remaining methods are order-aware.
+ # Big-O running times for all methods are the same as for regular dictionaries.
+
+ # The internal self.__map dictionary maps keys to links in a doubly linked list.
+ # The circular doubly linked list starts and ends with a sentinel element.
+ # The sentinel element never gets deleted (this simplifies the algorithm).
+ # Each link is stored as a list of length three: [PREV, NEXT, KEY].
+
+ def __init__(self, *args, **kwds):
+ '''Initialize an ordered dictionary. Signature is the same as for
+ regular dictionaries, but keyword arguments are not recommended
+ because their insertion order is arbitrary.
+
+ '''
+ if len(args) > 1:
+ raise TypeError('expected at most 1 arguments, got %d' % len(args))
+ try:
+ self.__root
+ except AttributeError:
+ self.__root = root = [] # sentinel node
+ root[:] = [root, root, None]
+ self.__map = {}
+ self.__update(*args, **kwds)
+
+ def __setitem__(self, key, value, dict_setitem=dict.__setitem__):
+ 'od.__setitem__(i, y) <==> od[i]=y'
+ # Setting a new item creates a new link which goes at the end of the linked
+ # list, and the inherited dictionary is updated with the new key/value pair.
+ if key not in self:
+ root = self.__root
+ last = root[0]
+ last[1] = root[0] = self.__map[key] = [last, root, key]
+ dict_setitem(self, key, value)
+
+ def __delitem__(self, key, dict_delitem=dict.__delitem__):
+ 'od.__delitem__(y) <==> del od[y]'
+ # Deleting an existing item uses self.__map to find the link which is
+ # then removed by updating the links in the predecessor and successor nodes.
+ dict_delitem(self, key)
+ link_prev, link_next, key = self.__map.pop(key)
+ link_prev[1] = link_next
+ link_next[0] = link_prev
+
+ def __iter__(self):
+ 'od.__iter__() <==> iter(od)'
+ root = self.__root
+ curr = root[1]
+ while curr is not root:
+ yield curr[2]
+ curr = curr[1]
+
+ def __reversed__(self):
+ 'od.__reversed__() <==> reversed(od)'
+ root = self.__root
+ curr = root[0]
+ while curr is not root:
+ yield curr[2]
+ curr = curr[0]
+
+ def clear(self):
+ 'od.clear() -> None. Remove all items from od.'
+ try:
+ for node in self.__map.itervalues():
+ del node[:]
+ root = self.__root
+ root[:] = [root, root, None]
+ self.__map.clear()
+ except AttributeError:
+ pass
+ dict.clear(self)
+
+ def popitem(self, last=True):
+ '''od.popitem() -> (k, v), return and remove a (key, value) pair.
+ Pairs are returned in LIFO order if last is true or FIFO order if false.
+
+ '''
+ if not self:
+ raise KeyError('dictionary is empty')
+ root = self.__root
+ if last:
+ link = root[0]
+ link_prev = link[0]
+ link_prev[1] = root
+ root[0] = link_prev
+ else:
+ link = root[1]
+ link_next = link[1]
+ root[1] = link_next
+ link_next[0] = root
+ key = link[2]
+ del self.__map[key]
+ value = dict.pop(self, key)
+ return key, value
+
+ # -- the following methods do not depend on the internal structure --
+
+ def keys(self):
+ 'od.keys() -> list of keys in od'
+ return list(self)
+
+ def values(self):
+ 'od.values() -> list of values in od'
+ return [self[key] for key in self]
+
+ def items(self):
+ 'od.items() -> list of (key, value) pairs in od'
+ return [(key, self[key]) for key in self]
+
+ def iterkeys(self):
+ 'od.iterkeys() -> an iterator over the keys in od'
+ return iter(self)
+
+ def itervalues(self):
+ 'od.itervalues -> an iterator over the values in od'
+ for k in self:
+ yield self[k]
+
+ def iteritems(self):
+ 'od.iteritems -> an iterator over the (key, value) items in od'
+ for k in self:
+ yield (k, self[k])
+
+ def update(*args, **kwds):
+ '''od.update(E, **F) -> None. Update od from dict/iterable E and F.
+
+ If E is a dict instance, does: for k in E: od[k] = E[k]
+ If E has a .keys() method, does: for k in E.keys(): od[k] = E[k]
+ Or if E is an iterable of items, does: for k, v in E: od[k] = v
+ In either case, this is followed by: for k, v in F.items(): od[k] = v
+
+ '''
+ if len(args) > 2:
+ raise TypeError('update() takes at most 2 positional '
+ 'arguments (%d given)' % (len(args),))
+ elif not args:
+ raise TypeError('update() takes at least 1 argument (0 given)')
+ self = args[0]
+ # Make progressively weaker assumptions about "other"
+ other = ()
+ if len(args) == 2:
+ other = args[1]
+ if isinstance(other, dict):
+ for key in other:
+ self[key] = other[key]
+ elif hasattr(other, 'keys'):
+ for key in other.keys():
+ self[key] = other[key]
+ else:
+ for key, value in other:
+ self[key] = value
+ for key, value in kwds.items():
+ self[key] = value
+
+ __update = update # let subclasses override update without breaking __init__
+
+ __marker = object()
+
+ def pop(self, key, default=__marker):
+ '''od.pop(k[,d]) -> v, remove specified key and return the corresponding value.
+ If key is not found, d is returned if given, otherwise KeyError is raised.
+
+ '''
+ if key in self:
+ result = self[key]
+ del self[key]
+ return result
+ if default is self.__marker:
+ raise KeyError(key)
+ return default
+
+ def setdefault(self, key, default=None):
+ 'od.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in od'
+ if key in self:
+ return self[key]
+ self[key] = default
+ return default
+
+ def __repr__(self, _repr_running={}):
+ 'od.__repr__() <==> repr(od)'
+ call_key = id(self), _get_ident()
+ if call_key in _repr_running:
+ return '...'
+ _repr_running[call_key] = 1
+ try:
+ if not self:
+ return '%s()' % (self.__class__.__name__,)
+ return '%s(%r)' % (self.__class__.__name__, self.items())
+ finally:
+ del _repr_running[call_key]
+
+ def __reduce__(self):
+ 'Return state information for pickling'
+ items = [[k, self[k]] for k in self]
+ inst_dict = vars(self).copy()
+ for k in vars(OrderedDict()):
+ inst_dict.pop(k, None)
+ if inst_dict:
+ return (self.__class__, (items,), inst_dict)
+ return self.__class__, (items,)
+
+ def copy(self):
+ 'od.copy() -> a shallow copy of od'
+ return self.__class__(self)
+
+ @classmethod
+ def fromkeys(cls, iterable, value=None):
+ '''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S
+ and values equal to v (which defaults to None).
+
+ '''
+ d = cls()
+ for key in iterable:
+ d[key] = value
+ return d
+
+ def __eq__(self, other):
+ '''od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive
+ while comparison to a regular mapping is order-insensitive.
+
+ '''
+ if isinstance(other, OrderedDict):
+ return len(self)==len(other) and self.items() == other.items()
+ return dict.__eq__(self, other)
+
+ def __ne__(self, other):
+ return not self == other
+
+ # -- the following methods are only used in Python 2.7 --
+
+ def viewkeys(self):
+ "od.viewkeys() -> a set-like object providing a view on od's keys"
+ return KeysView(self)
+
+ def viewvalues(self):
+ "od.viewvalues() -> an object providing a view on od's values"
+ return ValuesView(self)
+
+ def viewitems(self):
+ "od.viewitems() -> a set-like object providing a view on od's items"
+ return ItemsView(self)
diff --git a/eos/utils/scripts/effectUsedBy.py b/eos/utils/scripts/effectUsedBy.py
new file mode 100755
index 000000000..d677efa2f
--- /dev/null
+++ b/eos/utils/scripts/effectUsedBy.py
@@ -0,0 +1,1055 @@
+#!/usr/bin/env python3
+#======================================================================
+# Copyright (C) 2010 Anton Vorobyov
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation, either version 3 of
+# the License, or (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with eos. If not, see .
+#======================================================================
+"""
+Go through all effects and fill them with 'used by' comments.
+
+There're several big stages:
+Stage 1. Gather all required data into 'global' dictionaries. We have
+2 dictionaries per grouping type, one which lists groups per typeid,
+and another which lists typeIDs per group.
+Stage 2. Cycle through each effect.
+Stage 2.1. Compose similar set of dictionaries like in stage 1, but
+this time we take into consideration typeIDs affected by effect picked
+in stage 2.
+Stage 2.2. Create several lists (1 per grouping type) which will keep
+IDs of these groups which will describe set of the typeIDs, and start
+iterating. Each iteration one ID will be appended to any of the lists.
+Stage 2.2.1. Compose score dictionaries per grouping type, and
+calculate total score for given grouping type.
+Stage 2.2.2. Pick grouping type with highest score, find winner group
+inside grouping type, append its ID to corresponding list created in
+stage 2.2. If score is less than certain value, stop iterating. If some
+items are not covered by set of winners from lists, they'll be
+presented as single items.
+Stage 2.3. Print results to file if anything has been changed.
+
+Grouping types used are:
+Groups (groupID of an item);
+Categories (categoryID of groupID of an item);
+Base types (variations, like they appear on eve's variation tab);
+Market groups + variations (marketGroupID of an item, plus variations
+of all items from given market group, excluding items with
+marketGroupID).
+Type names (various combinations of words taken from typeName of item).
+"""
+
+import copy
+import itertools
+import os.path
+import re
+import sqlite3
+from optparse import OptionParser
+
+usage = "usage: %prog --database=DB [--debug=DEBUG]"
+parser = OptionParser(usage=usage)
+parser.add_option("-d", "--database", help="path to eve cache data dump in \
+sqlite format, default pyfa database path is used if none specified",
+type="string", default=os.path.join("~", ".pyfa","eve.db"))
+parser.add_option("-e", "--effects", help="explicit comma-separated list of \
+effects to process", type="string", default="")
+parser.add_option("-u", "--debug", help="debug level, 0 by default",
+ type="int", default=0)
+(options, args) = parser.parse_args()
+
+# Show debugging prints?
+# 0 - Don't show debugging stuff and perform actual run
+# 1 - Show only for first iteration
+# 2 - Show for all iterations
+DEBUG_LEVEL = options.debug
+
+# Ways to control process:
+# Adjust grouping type weights (more number - better chance to pick
+# this grouping type)
+GROUP_WEIGHT = 1.0
+CATEGORY_WEIGHT = 1.0
+BASETYPE_WEIGHT = 1.0
+MARKETGROUPWITHVARS_WEIGHT = 0.3
+TYPENAMECOMBS_WEIGHT = 1.0
+# If score drops below this value, remaining items will be listed
+# without any grouping
+LOWEST_SCORE = 0.7
+# Adjust scoring formulae
+def calc_innerscore(affected_decribed, affected_undescribed, total,
+ pereffect_totalaffected, weight=1.0):
+ """Inner score calculation formula"""
+ # Percentage of items affected by effect out of total number of
+ # items in this group
+ coverage_total = (affected_decribed + affected_undescribed) / total
+ # Same, but only described/undescribed items are taken
+ coverage_described = affected_decribed / total
+ coverage_undescribed = affected_undescribed / total
+ # Already described items should have less weight
+ coverage_additionalfactor = coverage_undescribed + coverage_described * 0
+ # If group has just one item - it should have zero score
+ affected_total_factor = affected_decribed + affected_undescribed - 1
+ innerscore = (coverage_total ** 0.23) * coverage_additionalfactor * \
+ affected_total_factor * weight
+ return innerscore
+def calc_outerscore(innerscore_dict, pereffect_totalaffected, weight):
+ """Outer score calculation formula"""
+ # Return just max of the inner scores, including weight factor
+ if float(len(innerscore_dict)):
+ outerscore = innerscore_dict[max(innerscore_dict, key=lambda a:
+ innerscore_dict.get(a))] * weight
+ return outerscore
+ else: return 0.0
+
+# Connect to database and set up cursor
+db = sqlite3.connect(os.path.expanduser(options.database))
+cursor = db.cursor()
+
+# Force some of the items to make them published
+FORCEPUB_TYPES = ("Ibis", "Impairor", "Velator", "Reaper")
+OVERRIDES_TYPEPUB = 'UPDATE invtypes SET published = 1 WHERE typeName = ?'
+for typename in FORCEPUB_TYPES:
+ cursor.execute(OVERRIDES_TYPEPUB, (typename,))
+
+# Queries to get raw data
+QUERY_ALLEFFECTS = 'SELECT effectID, effectName FROM dgmeffects'
+# Limit categories to Ships (6), Modules (7), Charges (8), Skills (16),
+# Drones (18), Implants (20), Subsystems (32), and groups to
+# Effect Beacons (920)
+QUERY_PUBLISHEDTYPEIDS = 'SELECT it.typeID FROM invtypes AS it INNER JOIN \
+invgroups AS ig ON it.groupID = ig.groupID INNER JOIN invcategories AS ic ON \
+ig.categoryID = ic.categoryID WHERE it.published = 1 AND (ic.categoryID IN \
+(6, 7, 8, 16, 18, 20, 32) OR ig.groupID = 920)'
+QUERY_TYPEID_GROUPID = 'SELECT groupID FROM invtypes WHERE typeID = ? LIMIT 1'
+QUERY_GROUPID_CATEGORYID = 'SELECT categoryID FROM invgroups WHERE \
+groupID = ? LIMIT 1'
+QUERY_TYPEID_PARENTTYPEID = 'SELECT parentTypeID FROM invmetatypes WHERE \
+typeID = ? LIMIT 1'
+QUERY_TYPEID_MARKETGROUPID = 'SELECT marketGroupID FROM invtypes WHERE \
+typeID = ? LIMIT 1'
+QUERY_TYPEID_TYPENAME = 'SELECT typeName FROM invtypes WHERE typeID = ? \
+LIMIT 1'
+QUERY_MARKETGROUPID_PARENTGROUPID = 'SELECT parentGroupID FROM \
+invmarketgroups WHERE marketGroupID = ? LIMIT 1'
+QUERY_EFFECTID_TYPEID = 'SELECT typeID FROM dgmtypeeffects WHERE effectID = ?'
+# Queries for printing
+QUERY_GROUPID_GROUPNAME = 'SELECT groupName FROM invgroups WHERE groupID = ? \
+LIMIT 1'
+QUERY_CATEGORYID_CATEGORYNAME = 'SELECT categoryName FROM invcategories \
+WHERE categoryID = ? LIMIT 1'
+QUERY_MARKETGROUPID_MARKETGROUPNAME = 'SELECT marketGroupName FROM \
+invmarketgroups WHERE marketGroupID = ? LIMIT 1'
+
+# Compose list of effects w/o symbols which eos doesn't take into
+# consideration, we'll use it to find proper effect IDs from file
+# names
+globalmap_effectnameeos_effectid = {}
+STRIPSPEC = "[^A-Za-z0-9]"
+cursor.execute(QUERY_ALLEFFECTS)
+for row in cursor:
+ effectid = row[0]
+ effectnamedb = row[1]
+ effectnameeos = re.sub(STRIPSPEC, "", effectnamedb).lower()
+ # There may be different effects with the same name, so form
+ # sets of IDs
+ if not effectnameeos in globalmap_effectnameeos_effectid:
+ globalmap_effectnameeos_effectid[effectnameeos] = set()
+ globalmap_effectnameeos_effectid[effectnameeos].add(effectid)
+
+# Stage 1
+
+# Published types set
+publishedtypes = set()
+cursor.execute(QUERY_PUBLISHEDTYPEIDS)
+for row in cursor:
+ publishedtypes.add(row[0])
+
+# Compose group maps
+# { groupid : set(typeid) }
+globalmap_groupid_typeid = {}
+# { typeid : groupid }
+globalmap_typeid_groupid = {}
+for typeid in publishedtypes:
+ groupid = 0
+ cursor.execute(QUERY_TYPEID_GROUPID, (typeid,))
+ for row in cursor:
+ groupid = row[0]
+ if not groupid in globalmap_groupid_typeid:
+ globalmap_groupid_typeid[groupid] = set()
+ globalmap_groupid_typeid[groupid].add(typeid)
+ globalmap_typeid_groupid[typeid] = groupid
+
+# Category maps
+# { categoryid : set(typeid) }
+globalmap_categoryid_typeid = {}
+# { typeid : categoryid }
+globalmap_typeid_categoryid = {}
+for typeid in publishedtypes:
+ categoryid = 0
+ cursor.execute(QUERY_GROUPID_CATEGORYID,
+ (globalmap_typeid_groupid[typeid],))
+ for row in cursor:
+ categoryid = row[0]
+ if not categoryid in globalmap_categoryid_typeid:
+ globalmap_categoryid_typeid[categoryid] = set()
+ globalmap_categoryid_typeid[categoryid].add(typeid)
+ globalmap_typeid_categoryid[typeid] = categoryid
+
+# Base type maps
+# { basetypeid : set(typeid) }
+globalmap_basetypeid_typeid = {}
+# { typeid : basetypeid }
+globalmap_typeid_basetypeid = {}
+for typeid in publishedtypes:
+ # Not all typeIDs in the database have baseTypeID, so assign some
+ # default value to it
+ basetypeid = 0
+ cursor.execute(QUERY_TYPEID_PARENTTYPEID, (typeid,))
+ for row in cursor:
+ basetypeid = row[0]
+ # If base type is not published or is not set in database, consider
+ # item as variation of self
+ if basetypeid not in publishedtypes:
+ basetypeid = typeid
+ if not basetypeid in globalmap_basetypeid_typeid:
+ globalmap_basetypeid_typeid[basetypeid] = set()
+ globalmap_basetypeid_typeid[basetypeid].add(typeid)
+ globalmap_typeid_basetypeid[typeid] = basetypeid
+
+# Market group maps - we won't use these for further processing, but
+# just as helper for composing other maps
+# { marketgroupid : set(typeid) }
+globalmap_marketgroupid_typeid = {}
+# { typeid : set(marketgroupid) }
+globalmap_typeid_marketgroupid = {}
+for typeid in publishedtypes:
+ marketgroupid = 0
+ cursor.execute(QUERY_TYPEID_MARKETGROUPID, (typeid,))
+ for row in cursor:
+ marketgroupid = row[0]
+ if not marketgroupid:
+ continue
+ if not marketgroupid in globalmap_marketgroupid_typeid:
+ globalmap_marketgroupid_typeid[marketgroupid] = set()
+ globalmap_marketgroupid_typeid[marketgroupid].add(typeid)
+# Copy items to all parent market groups
+INITIALMARKETGROUPIDS = tuple(globalmap_marketgroupid_typeid)
+for marketgroupid in INITIALMARKETGROUPIDS:
+ # Limit depths for case if database will refer to groups making
+ # the loop
+ cyclingmarketgroupid = marketgroupid
+ for depth in range(20):
+ cursor_parentmarket = db.cursor()
+ cursor_parentmarket.execute(QUERY_MARKETGROUPID_PARENTGROUPID,
+ (cyclingmarketgroupid,))
+ for row in cursor_parentmarket:
+ cyclingmarketgroupid = row[0]
+ if cyclingmarketgroupid:
+ if not cyclingmarketgroupid in globalmap_marketgroupid_typeid:
+ globalmap_marketgroupid_typeid[cyclingmarketgroupid] = set()
+ globalmap_marketgroupid_typeid[cyclingmarketgroupid].update\
+ (globalmap_marketgroupid_typeid[marketgroupid])
+ else: break
+# Now, make a reverse map
+for marketgroupid, typeidset in globalmap_marketgroupid_typeid.items():
+ for typeid in typeidset:
+ if not typeid in globalmap_typeid_marketgroupid:
+ globalmap_typeid_marketgroupid[typeid] = set()
+ globalmap_typeid_marketgroupid[typeid].add(marketgroupid)
+
+# Combine market groups and variations
+# { marketgroupid : set(typeidwithvariations) }
+globalmap_marketgroupid_typeidwithvariations = \
+copy.deepcopy(globalmap_marketgroupid_typeid)
+# { typeidwithvariations : set(marketgroupid) }
+globalmap_typeidwithvariations_marketgroupid = {}
+for marketgroupid in globalmap_marketgroupid_typeidwithvariations:
+ typestoadd = set()
+ for typeid in globalmap_marketgroupid_typeidwithvariations[marketgroupid]:
+ if typeid in globalmap_basetypeid_typeid:
+ for variationid in globalmap_basetypeid_typeid[typeid]:
+ # Do not include items which have market group, even if
+ # they're variation
+ if not variationid in globalmap_typeid_marketgroupid:
+ typestoadd.add(variationid)
+ globalmap_marketgroupid_typeidwithvariations[marketgroupid].update\
+ (typestoadd)
+# Make reverse map using simple way too
+for marketgroupid, typeidwithvariationsset in \
+globalmap_marketgroupid_typeidwithvariations.items():
+ for typeid in typeidwithvariationsset:
+ if not typeid in globalmap_typeidwithvariations_marketgroupid:
+ globalmap_typeidwithvariations_marketgroupid[typeid] = set()
+ globalmap_typeidwithvariations_marketgroupid[typeid].add(marketgroupid)
+
+# Item names map
+# We need to include category ID to avoid combining items from different
+# categories (e.g. skills and modules) and length of original name to
+# assess word coverage of various type name combinations
+# { ((typenamecomb), categoryid) : set(typeid) }
+globalmap_typenamecombtuple_typeid = {}
+# { typeid : (set((typenamecomb)), len(typename)) }
+globalmap_typeid_typenamecombtuple = {}
+for typeid in publishedtypes:
+ typename = ""
+ cursor.execute(QUERY_TYPEID_TYPENAME, (typeid,))
+ for row in cursor:
+ typename = row[0]
+ # Split strings into separate words
+ typenamesplitted = []
+ # Start from the whole type name
+ remainingstring = typename
+ # We will pick word each iteration
+ iterate = True
+ while iterate:
+ # This regexp helps to split into words with spaces and dashes
+ # between them, for example: CX|-|1, Hardwiring| - |Inherent,
+ # Zainou| |'Snapshot'
+ separatingpattern_general = \
+ "((?P[^ -]+)(?P[ -]+)(?P([^ -].*)))"
+ # This will help to split names like those used in implants,
+ # for example: ZET||500, EE||8
+ separatingpattern_series = \
+ "((?P[A-Za-z]{2,4})(?P[0-9]{1,4}.*))"
+ # Check remainingstring using both criteria
+ matchobject_general = re.match(separatingpattern_general,
+ remainingstring)
+ matchobject_series = re.match(separatingpattern_series,
+ remainingstring)
+ # Now, we need to find which criterion satisfies us
+ usegeneral = False
+ useseries = False
+ # If remaining string meets both criteria
+ if matchobject_general and matchobject_series:
+ # We check which occurs first and pick it
+ shift_general = len(matchobject_general.group("left_part"))
+ shift_series = len(matchobject_series.group("left_part"))
+ if shift_general <= shift_series:
+ usegeneral = True
+ else:
+ useseries = True
+ # If only one criterion is met, just pick it
+ elif matchobject_general:
+ usegeneral = True
+ elif matchobject_series:
+ useseries = True
+ # Now, actually split string into word, separator and remaining
+ # string and append word to list of words of current typename
+ if usegeneral:
+ newword = matchobject_general.group("left_part")
+ separator = matchobject_general.group("separator")
+ remainingstring = matchobject_general.group("right_part")
+ typenamesplitted.append(newword)
+ elif useseries:
+ newword = matchobject_series.group("left_part")
+ separator = ""
+ remainingstring = matchobject_series.group("right_part")
+ typenamesplitted.append(newword)
+ # If we didn't match any regexp, then we see last word - append
+ # it too and stop iterating
+ else:
+ typenamesplitted.append(remainingstring)
+ iterate = False
+ # Iterate through number of words which will be used to compose
+ # combinations
+ for wordnumindex in range(len(typenamesplitted)):
+ # Iterate through all possible combinations
+ for typenamecomb in itertools.combinations(typenamesplitted,
+ wordnumindex + 1):
+ typenamecombtuple = (typenamecomb,
+ globalmap_typeid_categoryid[typeid])
+ if not typenamecombtuple in globalmap_typenamecombtuple_typeid:
+ globalmap_typenamecombtuple_typeid[typenamecombtuple] = set()
+ globalmap_typenamecombtuple_typeid[typenamecombtuple].add(typeid)
+ if not typeid in globalmap_typeid_typenamecombtuple:
+ globalmap_typeid_typenamecombtuple[typeid] = \
+ (set(), len(typenamesplitted))
+ globalmap_typeid_typenamecombtuple[typeid][0].add(typenamecomb)
+
+# Form list of effects for processing
+effects_path = os.path.join("..", "..", "effects")
+if options.effects:
+ effect_list = options.effects.split(",")
+else:
+ effect_list = []
+ for effect_file in os.listdir(effects_path):
+ file_name, file_extension = effect_file.rsplit('.', 1)
+ # Ignore non-py files and exclude implementation-specific 'effects'
+ if file_extension == "py" and not file_name in ("__init__"):
+ effect_list.append(file_name)
+
+# Stage 2
+
+# Go through effect files one-by-one
+for effect_name in effect_list:
+ effect_file = "{0}.py".format(effect_name)
+ # Stage 2.1
+ # Set of items which are affected by current effect
+ pereffectlist_usedbytypes = set()
+ if effect_name in globalmap_effectnameeos_effectid:
+ effectids = globalmap_effectnameeos_effectid[effect_name]
+ else:
+ print("Effect {0} not found and will be skipped".format(effect_name))
+ continue
+ for effectid in effectids:
+ cursor.execute(QUERY_EFFECTID_TYPEID, (effectid,))
+ for row in cursor:
+ typeid = row[0]
+ if typeid in publishedtypes:
+ pereffectlist_usedbytypes.add(typeid)
+ # Number of items affected by current effect
+ pereffect_totalaffected = len(pereffectlist_usedbytypes)
+
+ # Compose per-group map of items which are affected by current
+ # effect
+ # { groupid : (set(typeid), describes) }
+ effectmap_groupid_typeid = {}
+ for typeid in pereffectlist_usedbytypes:
+ groupid = globalmap_typeid_groupid[typeid]
+ if not groupid in effectmap_groupid_typeid:
+ effectmap_groupid_typeid[groupid] = [set(), False]
+ effectmap_groupid_typeid[groupid][0].add(typeid)
+
+ # Now, per-category map of items
+ # { categoryid : (set(typeid), describes) }
+ effectmap_categoryid_typeid = {}
+ for typeid in pereffectlist_usedbytypes:
+ categoryid = globalmap_typeid_categoryid[typeid]
+ if not categoryid in effectmap_categoryid_typeid:
+ effectmap_categoryid_typeid[categoryid] = [set(), False]
+ effectmap_categoryid_typeid[categoryid][0].add(typeid)
+
+ # Per-base type map of variations
+ # { basetypeid : (set(typeid), describes) }
+ effectmap_basetypeid_typeid = {}
+ for typeid in pereffectlist_usedbytypes:
+ basetypeid = globalmap_typeid_basetypeid[typeid]
+ if not basetypeid in effectmap_basetypeid_typeid:
+ effectmap_basetypeid_typeid[basetypeid] = [set(), False]
+ effectmap_basetypeid_typeid[basetypeid][0].add(typeid)
+
+ # Per-market group map with item variations
+ # { marketgroupid : (set(typeidwithvariations), describes) }
+ effectmap_marketgroupid_typeidwithvars = {}
+ for typeid in pereffectlist_usedbytypes:
+ if typeid in globalmap_typeid_marketgroupid:
+ marketGroupIDs = globalmap_typeid_marketgroupid[typeid]
+ else:
+ marketGroupIDs = set()
+ for marketgroupid in marketGroupIDs:
+ if not marketgroupid in effectmap_marketgroupid_typeidwithvars:
+ effectmap_marketgroupid_typeidwithvars[marketgroupid] = \
+ [set(), False]
+ effectmap_marketgroupid_typeidwithvars[marketgroupid][0].add\
+ (typeid)
+
+ # Per-type name combination map
+ # { ((typenamecomb), categoryid) : (set(typeid), describes) }
+ effectmap_typenamecombtuple_typeid = {}
+ for typeid in pereffectlist_usedbytypes:
+ typenamecombs = globalmap_typeid_typenamecombtuple[typeid][0]
+ for typenamecomb in typenamecombs:
+ typenamecombtuple = (typenamecomb,
+ globalmap_typeid_categoryid[typeid])
+ if not typenamecombtuple in effectmap_typenamecombtuple_typeid:
+ effectmap_typenamecombtuple_typeid[typenamecombtuple] = \
+ [set(), False]
+ effectmap_typenamecombtuple_typeid[typenamecombtuple][0].add\
+ (typeid)
+
+ stopdebugprints = False
+ if DEBUG_LEVEL >= 1:
+ print("\nEffect:", effect_name)
+ print("Total items affected: {0}".format(pereffect_totalaffected))
+
+ # Stage 2.2
+ # This set holds all ids of already described items
+ effect_describedtypes = set()
+ # These lists contain ids of each grouping type which are used
+ # to describe items from the set above
+ describedbygroup = []
+ describedbycategory = []
+ describedbybasetype = []
+ describedbymarketgroupwithvars = []
+ describedbytypenamecomb = []
+
+ # Each iteration some group is picked which will be used
+ # to describe set of items
+ iterate = True
+ while iterate:
+ # Stage 2.2.1
+ # Stores scores for each group which describe set of items
+ groupscore = {}
+ for groupid in effectmap_groupid_typeid:
+ # Skip groups which are already used for item
+ # description (have 'describes' flag set to True)
+ describesflag = effectmap_groupid_typeid[groupid][1]
+ if not describesflag:
+ # Items from current group affected by current
+ # effect
+ affectedset = effectmap_groupid_typeid[groupid][0]
+ # Number of affected items from current group;
+ # Already described
+ affected_decribed = len(affectedset.intersection
+ (effect_describedtypes))
+ # Yet undescribed
+ affected_undescribed = len(affectedset.difference
+ (effect_describedtypes))
+ # Total number of items from this group (not
+ # necessarily affected by current effect)
+ total = len(globalmap_groupid_typeid[groupid])
+ # Calculate inner score and push it into score
+ # dictionary for current grouping type
+ groupscore[groupid] = calc_innerscore\
+ (affected_decribed, affected_undescribed, total,
+ pereffect_totalaffected)
+ # Debug prints for inner data
+ if DEBUG_LEVEL >= 1 and not stopdebugprints:
+ cursor.execute(QUERY_GROUPID_GROUPNAME, (groupid,))
+ for row in cursor:
+ groupName = row[0]
+ coverage = (affected_decribed +
+ affected_undescribed) / total * 100
+ # If debug level is 1, print results only for
+ # 1st iteration
+ if DEBUG_LEVEL == 1:
+ printstr = "Group: {0}: {1}/{2} ({3:.3}%, inner \
+score: {4:.3})"
+ print(printstr.format(groupName,
+ affected_undescribed, total, coverage,
+ groupscore[groupid]))
+ # If it's 2, print results for each
+ # iteration, so we need to include number
+ # of already described items
+ if DEBUG_LEVEL == 2:
+ printstr = "Group: {0}: {1}+{2}/{3} ({4:.3}%, \
+inner score: {5:.3})"
+ print(printstr.format(groupName,
+ affected_undescribed, affected_decribed,
+ total, coverage, groupscore[groupid]))
+ # Calculate outer score for this grouping type
+ groupouterscore = calc_outerscore(groupscore,
+ pereffect_totalaffected,
+ GROUP_WEIGHT)
+ # Debug print for outer data
+ if DEBUG_LEVEL >= 1 and not stopdebugprints:
+ printstr = "Groups outer score: {0:.3}"
+ print(printstr.format(groupouterscore))
+
+ categoryscore = {}
+ for categoryid in effectmap_categoryid_typeid:
+ describesflag = effectmap_categoryid_typeid[categoryid][1]
+ if not describesflag:
+ affectedset = effectmap_categoryid_typeid[categoryid][0]
+ affected_decribed = len(affectedset.intersection
+ (effect_describedtypes))
+ affected_undescribed = len(affectedset.difference
+ (effect_describedtypes))
+ total = len(globalmap_categoryid_typeid[categoryid])
+ categoryscore[categoryid] = calc_innerscore\
+ (affected_decribed, affected_undescribed, total,
+ pereffect_totalaffected)
+ if DEBUG_LEVEL >= 1 and not stopdebugprints:
+ cursor.execute(QUERY_CATEGORYID_CATEGORYNAME,
+ (categoryid,))
+ for row in cursor:
+ categoryname = row[0]
+ coverage = (affected_decribed +
+ affected_undescribed) / total * 100
+ if DEBUG_LEVEL == 1:
+ printstr = "Category: {0}: {1}/{2} ({3:.3}%, \
+inner score: {4:.3})"
+ print(printstr.format(categoryname,
+ affected_undescribed, total, coverage,
+ categoryscore[categoryid]))
+ if DEBUG_LEVEL == 2:
+ printstr = "Category: {0}: {1}+{2}/{3} ({4:.3}%, \
+inner score: {5:.3})"
+ print(printstr.format(categoryname,
+ affected_undescribed, affected_decribed,
+ total, coverage, categoryscore[categoryid]))
+ categoryouterscore = calc_outerscore(categoryscore,
+ pereffect_totalaffected,
+ CATEGORY_WEIGHT)
+ if DEBUG_LEVEL >= 1 and not stopdebugprints:
+ printstr = "Category outer score: {0:.3}"
+ print(printstr.format(categoryouterscore))
+
+ basetypescore = {}
+ for basetypeid in effectmap_basetypeid_typeid:
+ describesflag = effectmap_basetypeid_typeid[basetypeid][1]
+ if not describesflag:
+ affectedset = effectmap_basetypeid_typeid[basetypeid][0]
+ affected_decribed = len(affectedset.intersection
+ (effect_describedtypes))
+ affected_undescribed = len(affectedset.difference
+ (effect_describedtypes))
+ total = len(globalmap_basetypeid_typeid[basetypeid])
+ basetypescore[basetypeid] = calc_innerscore\
+ (affected_decribed, affected_undescribed, total,
+ pereffect_totalaffected)
+ if DEBUG_LEVEL >= 1 and not stopdebugprints:
+ cursor.execute(QUERY_TYPEID_TYPENAME, (basetypeid,))
+ for row in cursor:
+ basetypename = row[0]
+ coverage = (affected_decribed +
+ affected_undescribed) / total * 100
+ if DEBUG_LEVEL == 1:
+ printstr = "Base item: {0}: {1}/{2} ({3:.3}%, \
+inner score: {4:.3})"
+ print(printstr.format(basetypename,
+ affected_undescribed, total, coverage,
+ basetypescore[basetypeid]))
+ if DEBUG_LEVEL == 2:
+ printstr = "Base item: {0}: {1}+{2}/{3} ({4:.3}%, \
+inner score: {5:.3})"
+ print(printstr.format(basetypename,
+ affected_undescribed, affected_decribed,
+ total, coverage, basetypescore[basetypeid]))
+ basetypeouterscore = calc_outerscore(basetypescore,
+ pereffect_totalaffected,
+ BASETYPE_WEIGHT)
+ #Print outer data
+ if DEBUG_LEVEL >= 1 and not stopdebugprints:
+ printstr = "Base item outer score: {0:.3}"
+ print(printstr.format(basetypeouterscore))
+
+ marketgroupwithvarsscore = {}
+ for marketgroupid in effectmap_marketgroupid_typeidwithvars:
+ describesflag = effectmap_marketgroupid_typeidwithvars\
+ [marketgroupid][1]
+ if not describesflag:
+ affectedset = effectmap_marketgroupid_typeidwithvars\
+ [marketgroupid][0]
+ affected_decribed = len(affectedset.intersection
+ (effect_describedtypes))
+ affected_undescribed = len(affectedset.difference
+ (effect_describedtypes))
+ total = len(globalmap_marketgroupid_typeidwithvariations
+ [marketgroupid])
+ marketgroupwithvarsscore[marketgroupid] = calc_innerscore\
+ (affected_decribed, affected_undescribed, total,
+ pereffect_totalaffected)
+ if DEBUG_LEVEL >= 1 and not stopdebugprints:
+ cursor.execute(QUERY_MARKETGROUPID_MARKETGROUPNAME,
+ (marketgroupid,))
+ for row in cursor:
+ marketgroupname = row[0]
+ # Prepend market group name with its parents
+ # names
+ prependparentid = marketgroupid
+ #Limit depth in case if market groups form a loop
+ for depth in range(20):
+ cursor_parentmarket = db.cursor()
+ cursor_parentmarket.execute\
+ (QUERY_MARKETGROUPID_PARENTGROUPID,
+ (prependparentid,))
+ for row in cursor_parentmarket:
+ prependparentid = row[0]
+ if prependparentid:
+ cursor.execute\
+ (QUERY_MARKETGROUPID_MARKETGROUPNAME,
+ (prependparentid,))
+ for row in cursor:
+ marketgroupname = "{0} > {1}".format\
+ (row[0],marketgroupname)
+ else:
+ break
+ coverage = (affected_decribed +
+ affected_undescribed) / total * 100
+ if DEBUG_LEVEL == 1:
+ printstr = "Market group with variations: {0}: \
+{1}/{2} ({3:.3}%, inner score: {4:.3})"
+ print(printstr.format(marketgroupname,
+ affected_undescribed, total, coverage,
+ marketgroupwithvarsscore[marketgroupid]))
+ if DEBUG_LEVEL == 2:
+ printstr = "Market group with variations: {0}: \
+{1}+{2}/{3} ({4:.3}%, inner score: {5:.3})"
+ print(printstr.format(marketgroupname,
+ affected_undescribed,
+ affected_decribed, total, coverage,
+ marketgroupwithvarsscore[marketgroupid]))
+ marketgroupwithvarsouterscore = calc_outerscore\
+ (marketgroupwithvarsscore, pereffect_totalaffected,
+ MARKETGROUPWITHVARS_WEIGHT)
+ if DEBUG_LEVEL >= 1 and not stopdebugprints:
+ printstr = "Market group outer score: {0:.3}"
+ print(printstr.format(marketgroupwithvarsouterscore))
+
+ typenamecombscore = {}
+ for typenamecombtuple in effectmap_typenamecombtuple_typeid:
+ describesflag = effectmap_typenamecombtuple_typeid\
+ [typenamecombtuple][1]
+ if not describesflag:
+ affectedset = effectmap_typenamecombtuple_typeid\
+ [typenamecombtuple][0]
+ affected_decribed = len(affectedset.intersection
+ (effect_describedtypes))
+ affected_undescribed = len(affectedset.difference
+ (effect_describedtypes))
+ total = len(globalmap_typenamecombtuple_typeid
+ [typenamecombtuple])
+ # Type names are special: wee also need to consider
+ # how certain word combination covers full type
+ # name
+ averagecoverage = 0
+ itemsnamedlikethis = effectmap_typenamecombtuple_typeid\
+ [typenamecombtuple][0]
+ for typeid in itemsnamedlikethis:
+ # Add number of words in combination divided by
+ # total number of words from any given item
+ averagecoverage += len(typenamecombtuple[0]) / \
+ globalmap_typeid_typenamecombtuple[typeid][1]
+ # Then divide by number of items we checked, making
+ # it real average
+ averagecoverage = averagecoverage / len(itemsnamedlikethis)
+ # Pass average coverage as additional balancing
+ # factor with certain weight factor (80%)
+ typenamecombscore[typenamecombtuple] = \
+ calc_innerscore(affected_decribed, affected_undescribed,
+ total, pereffect_totalaffected,
+ 0.2 + averagecoverage*0.8)
+ if DEBUG_LEVEL >= 1 and not stopdebugprints:
+ typenamecombprintable = " ".join(typenamecombtuple[0])
+ coverage = (affected_decribed +
+ affected_undescribed) / total * 100
+ if DEBUG_LEVEL == 1:
+ printstr = "Type name combination: \"{0}\": \
+{1}/{2} ({3:.3}%, inner score: {4:.3})"
+ print(printstr.format(typenamecombprintable,
+ affected_undescribed, total, coverage,
+ typenamecombscore[typenamecombtuple]))
+ if DEBUG_LEVEL == 2:
+ printstr = "Type name combination: \"{0}\": \
+{1}+{2}/{3} ({4:.3}%, inner score: {5:.3})"
+ print(printstr.format(typenamecombprintable,
+ affected_undescribed, affected_decribed,
+ total, coverage,
+ typenamecombscore[typenamecombtuple]))
+ typenamecombouterscore = calc_outerscore(typenamecombscore,
+ pereffect_totalaffected,
+ TYPENAMECOMBS_WEIGHT)
+ if DEBUG_LEVEL >= 1 and not stopdebugprints:
+ printstr = "Type name combination outer score: {0:.3}"
+ print(printstr.format(typenamecombouterscore))
+
+ # Don't print anything after 1st iteration at 1st debugging
+ # level
+ if DEBUG_LEVEL == 1:
+ stopdebugprints = True
+
+ # Stage 2.2.2
+ # Pick max score from outer scores of all grouping types
+ maxouterscore = max(groupouterscore, categoryouterscore,
+ basetypeouterscore,
+ marketgroupwithvarsouterscore,
+ typenamecombouterscore)
+ # Define lower limit for score, below which there will be
+ # no winners
+ if maxouterscore >= LOWEST_SCORE:
+ # If scores are similar, priorities are:
+ # category > group > name > market group > base type
+ if maxouterscore == categoryouterscore:
+ # Pick ID of category which has highest score among
+ # other categories
+ categorywinner = max(categoryscore, key=categoryscore.get)
+ # Add it to the list of categories which describe
+ # set of items
+ describedbycategory.append(categorywinner)
+ # Add all items described by winning category into
+ # set of described items
+ effect_describedtypes.update\
+ (globalmap_categoryid_typeid[categorywinner])
+ # Set 'describes' flag to avoid processing of this
+ # category during following iterations
+ effectmap_categoryid_typeid[categorywinner][1] = True
+ if DEBUG_LEVEL >= 2:
+ printstr = "Category winner: {0}"
+ print(printstr.format(categorywinner))
+ elif maxouterscore == groupouterscore:
+ groupwinner = max(groupscore, key=groupscore.get)
+ describedbygroup.append(groupwinner)
+ effect_describedtypes.update\
+ (globalmap_groupid_typeid[groupwinner])
+ effectmap_groupid_typeid[groupwinner][1] = True
+ if DEBUG_LEVEL >= 2:
+ printstr = "Group winner: {0}"
+ print(printstr.format(groupwinner))
+ elif maxouterscore == typenamecombouterscore:
+ typenamecombwinner = max(typenamecombscore,
+ key=typenamecombscore.get)
+ describedbytypenamecomb.append(typenamecombwinner)
+ effect_describedtypes.update\
+ (globalmap_typenamecombtuple_typeid[typenamecombwinner])
+ effectmap_typenamecombtuple_typeid[typenamecombwinner]\
+ [1] = True
+ if DEBUG_LEVEL >= 2:
+ printstr = "Named like winner: {0}"
+ print(printstr.format(typenamecombwinner))
+ elif maxouterscore == marketgroupwithvarsouterscore:
+ marketgroupwithvarswinner = max(marketgroupwithvarsscore,
+ key=marketgroupwithvarsscore.get)
+ describedbymarketgroupwithvars.append\
+ (marketgroupwithvarswinner)
+ effect_describedtypes.update\
+ (globalmap_marketgroupid_typeidwithvariations
+ [marketgroupwithvarswinner])
+ effectmap_marketgroupid_typeidwithvars\
+ [marketgroupwithvarswinner][1] = True
+ if DEBUG_LEVEL >= 2:
+ printstr = "Market group with variations winner: {0}"
+ print(printstr.format(marketgroupwithvarswinner))
+ elif maxouterscore == basetypeouterscore:
+ basetypewinner = max(basetypescore, key=basetypescore.get)
+ describedbybasetype.append(basetypewinner)
+ effect_describedtypes.update\
+ (globalmap_basetypeid_typeid[basetypewinner])
+ effectmap_basetypeid_typeid[basetypewinner][1] = True
+ if DEBUG_LEVEL >= 2:
+ printstr = "Base item winner: {0}"
+ print(printstr.format(basetypewinner))
+ # Stop if we have score less than some critical value,
+ # all undescribed items will be provided as plain list
+ else:
+ iterate = False
+ if DEBUG_LEVEL >= 2:
+ print("No winners this iteration")
+ # Also stop if we described all items
+ if pereffectlist_usedbytypes.issubset(effect_describedtypes):
+ iterate = False
+ # Print separator for 2nd debugging level, to separate
+ # debug data of one iteration from another
+ if DEBUG_LEVEL >= 2:
+ print("---")
+ singleitems = set(pereffectlist_usedbytypes).difference\
+ (effect_describedtypes)
+ if DEBUG_LEVEL >= 1:
+ print("Effect will be described by:")
+ print("Single item IDs:", singleitems)
+ print("Group IDs:", describedbygroup)
+ print("Category IDs:", describedbycategory)
+ print("Base item IDs:", describedbybasetype)
+ print("Market group with variations IDs:",
+ describedbymarketgroupwithvars)
+ print("Type name combinations:", describedbytypenamecomb)
+
+ # Stage 2.1
+ # Read effect file and split it into lines
+ effectfile = open(os.path.join(effects_path, effect_file), 'r')
+ effectcontentssource = effectfile.read()
+ effectfile.close()
+ effectLines = effectcontentssource.split("\n")
+ # Delete old comments from file contents
+ numofcommentlines = 0
+ for line in effectLines:
+ if line:
+ if line[0] == "#": numofcommentlines += 1
+ else: break
+ else: break
+ for i in range(numofcommentlines):
+ del effectLines[0]
+
+ # These lists will contain IDs and some metadata in tuples
+ printing_types = []
+ printing_groups = []
+ printing_categories = []
+ printing_basetypes = []
+ printing_marketgroupswithvars = []
+ printing_typenamecombtuples = []
+
+ # Gather data for printing in the form of tuples, each tuple has
+ # grouping type ID, human-readable name and category name
+ for typeid in singleitems:
+ typename = ""
+ cursor.execute(QUERY_TYPEID_TYPENAME, (typeid,))
+ for row in cursor:
+ typename = row[0]
+ categoryname = ""
+ cursor.execute(QUERY_CATEGORYID_CATEGORYNAME,
+ (globalmap_typeid_categoryid[typeid],))
+ for row in cursor:
+ categoryname = row[0]
+ printing_types.append((typeid, typename, categoryname))
+ for groupid in describedbygroup:
+ groupName = ""
+ cursor.execute(QUERY_GROUPID_GROUPNAME, (groupid,))
+ for row in cursor:
+ groupName = row[0]
+ categoryid = 0
+ cursor.execute(QUERY_GROUPID_CATEGORYID, (groupid,))
+ for row in cursor:
+ categoryid = row[0]
+ categoryname = ""
+ cursor.execute(QUERY_CATEGORYID_CATEGORYNAME, (categoryid,))
+ for row in cursor:
+ categoryname = row[0]
+ printing_groups.append((groupid, groupName, categoryname))
+ for categoryid in describedbycategory:
+ categoryname = ""
+ cursor.execute(QUERY_CATEGORYID_CATEGORYNAME, (categoryid,))
+ for row in cursor:
+ categoryname = row[0]
+ printing_categories.append((categoryid, categoryname))
+ for basetypeid in describedbybasetype:
+ basetypename = ""
+ cursor.execute(QUERY_TYPEID_TYPENAME, (basetypeid,))
+ for row in cursor:
+ basetypename = row[0]
+ categoryname = ""
+ cursor.execute(QUERY_CATEGORYID_CATEGORYNAME,
+ (globalmap_typeid_categoryid[basetypeid],))
+ for row in cursor:
+ categoryname = row[0]
+ printing_basetypes.append((basetypeid, basetypename,
+ categoryname))
+ for marketgroupid in describedbymarketgroupwithvars:
+ cursor.execute(QUERY_MARKETGROUPID_MARKETGROUPNAME,
+ (marketgroupid,))
+ for row in cursor:
+ marketgroupname = row[0]
+ # Prepend market group name with its parents names
+ prependparentid = marketgroupid
+ # Limit depth to avoid looping, as usual
+ for depth in range(20):
+ cursor_parentmarket = db.cursor()
+ cursor_parentmarket.execute(QUERY_MARKETGROUPID_PARENTGROUPID,
+ (prependparentid,))
+ for row in cursor_parentmarket:
+ prependparentid = row[0]
+ if prependparentid:
+ cursor.execute(QUERY_MARKETGROUPID_MARKETGROUPNAME,
+ (prependparentid,))
+ for row in cursor:
+ marketgroupname = "{0} > {1}".format(row[0],
+ marketgroupname)
+ else:
+ break
+ printing_marketgroupswithvars.append((marketgroupid,
+ marketgroupname))
+ for typenamecombtuple in describedbytypenamecomb:
+ typenamecombprint = " ".join(typenamecombtuple[0])
+ categoryname = ""
+ cursor.execute(QUERY_CATEGORYID_CATEGORYNAME,
+ (typenamecombtuple[1],))
+ for row in cursor:
+ categoryname = row[0]
+ printing_typenamecombtuples.append((typenamecombtuple,
+ typenamecombprint,
+ categoryname))
+
+ # Use separate list per grouping type to ease grouping type
+ # sorting
+ printing_typelines = []
+ # Sort by item name first
+ printing_types = sorted(printing_types, key=lambda tuple: tuple[1])
+ # Then sort by category name
+ printing_types = sorted(printing_types, key=lambda tuple: tuple[2])
+ for type in printing_types:
+ # Append line for printing to list
+ catname = type[2]
+ typename = type[1]
+ printstr = "# {0}: {1}"
+ printing_typelines.append(printstr.format(catname, typename))
+ # Do the same for groups
+ printing_grouplines = []
+ printing_groups = sorted(printing_groups, key=lambda tuple: tuple[1])
+ printing_groups = sorted(printing_groups, key=lambda tuple: tuple[2])
+ for group in printing_groups:
+ catname = group[2]
+ groupname = group[1]
+ described = len(effectmap_groupid_typeid[group[0]][0])
+ total = len(globalmap_groupid_typeid[group[0]])
+ printstr = "# {0}s from group: {1} ({2} of {3})"
+ printing_grouplines.append(printstr.format(catname, groupname,
+ described, total))
+ # Process categories
+ printing_categorylines = []
+ printing_categories = sorted(printing_categories,
+ key=lambda tuple: tuple[1])
+ for category in printing_categories:
+ catname = category[1]
+ described = len(effectmap_categoryid_typeid[category[0]][0])
+ total = len(globalmap_categoryid_typeid[category[0]])
+ printstr = "# Items from category: {0} ({1} of {2})"
+ printing_categorylines.append(printstr.format(catname, described,
+ total))
+ # Process variations
+ printing_basetypelines = []
+ printing_basetypes = sorted(printing_basetypes,
+ key=lambda tuple: tuple[1])
+ printing_basetypes = sorted(printing_basetypes,
+ key=lambda tuple: tuple[2])
+ for basetype in printing_basetypes:
+ catname = basetype[2].lower()
+ basename = basetype[1]
+ described = len(effectmap_basetypeid_typeid[basetype[0]][0])
+ total = len(globalmap_basetypeid_typeid[basetype[0]])
+ printstr = "# Variations of {0}: {1} ({2} of {3})"
+ printing_basetypelines.append(printstr.format(catname, basename,
+ described, total))
+ # Process market groups with variations
+ printing_marketgroupwithvarslines = []
+ printing_marketgroupswithvars = sorted(printing_marketgroupswithvars,
+ key=lambda tuple: tuple[1])
+ for marketgroup in printing_marketgroupswithvars:
+ marketgroupname = marketgroup[1]
+ described = len(effectmap_marketgroupid_typeidwithvars
+ [marketgroup[0]][0])
+ total = len(globalmap_marketgroupid_typeidwithvariations
+ [marketgroup[0]])
+ printstr = "# Items from market group: {0} ({1} of {2})"
+ printing_marketgroupwithvarslines.append(printstr.
+ format(marketgroupname, described, total))
+ # Process type name combinations
+ printing_typenamecombtuplelines = []
+ printing_typenamecombtuples = sorted(printing_typenamecombtuples,
+ key=lambda tuple: tuple[1])
+ printing_typenamecombtuples = sorted(printing_typenamecombtuples,
+ key=lambda tuple: tuple[2])
+ for typenamecomb in printing_typenamecombtuples:
+ catname = typenamecomb[2]
+ namedlike = typenamecomb[1]
+ described = len(effectmap_typenamecombtuple_typeid
+ [typenamecomb[0]][0])
+ total = len(globalmap_typenamecombtuple_typeid[typenamecomb[0]])
+ printstr = "# {0}s named like: {1} ({2} of {3})"
+ printing_typenamecombtuplelines.append(printstr.format(catname,
+ namedlike, described, total))
+
+ # Compose single list of lines using custom sorting
+ commentlines = printing_categorylines + printing_grouplines + \
+ printing_typenamecombtuplelines + printing_marketgroupwithvarslines + \
+ printing_basetypelines + printing_typelines
+ # Prepend list with "used by"
+ if commentlines:
+ commentlines = ["# Used by:"] + commentlines
+ # If effect isn't used, write it to file and to terminal
+ else:
+ commentlines = ["# Not used by any item"]
+ print("Warning: effect file " + effect_name +
+ " is not used by any item")
+ # Combine "used by" comment lines and actual effect lines
+ outputlines = commentlines + effectLines
+ # Combine all lines into single string
+ effectcontentsprocessed = "\n".join(outputlines)
+ # If we're not debugging and contents actually changed - write
+ # changes to the file
+ if DEBUG_LEVEL == 0 and (effectcontentsprocessed !=
+ effectcontentssource):
+ effectfile = open(os.path.join(effects_path, effect_file), 'w')
+ effectfile.write(effectcontentsprocessed)
+ effectfile.close()
+ elif DEBUG_LEVEL >= 2:
+ print("Comment to write to file:")
+ print("\n".join(commentlines))
diff --git a/eos/utils/scripts/eveCacheToDb.py b/eos/utils/scripts/eveCacheToDb.py
new file mode 100755
index 000000000..49d7ff7aa
--- /dev/null
+++ b/eos/utils/scripts/eveCacheToDb.py
@@ -0,0 +1,350 @@
+#!/usr/bin/env python
+#===============================================================================
+# Copyright (C) 2010 Anton Vorobyov
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+'''
+This script pulls data out of EVE cache and makes a database dump. To get most of the data,
+you need to just log into game; however, for some special data sometimes you need to dump
+it by executing corresponding action in game, for example - open market tree to get data for
+invmarketgroups table.
+Reverence library by Entity is used, check http://wiki.github.com/ntt/reverence/ for info
+As reverence uses the same Python version as EVE client (2.x series), script cannot be converted to python3
+Example commands to run the script under Linux with default eve paths for getting SQLite dump:
+Tranquility: python eveCacheToDb.py --eve="~/.wine/drive_c/Program Files/CCP/EVE" --cache="~/.wine/drive_c/users/"$USER"/Local Settings/Application Data/CCP/EVE/c_program_files_ccp_eve_tranquility/cache" --dump="sqlite:////home/"$USER"/Desktop/eve.db"
+Singularity: python eveCacheToDb.py --eve="~/.wine/drive_c/Program Files/CCP/Singularity" --cache="~/.wine/drive_c/users/"$USER"/Local Settings/Application Data/CCP/EVE/c_program_files_ccp_singularity_singularity/cache" --sisi --dump="sqlite:////home/"$USER"/Desktop/evetest.db"
+'''
+
+import os
+import sys
+
+# Add eos root path to sys.path
+path = os.path.dirname(unicode(__file__, sys.getfilesystemencoding()))
+sys.path.append(os.path.realpath(os.path.join(path, "..", "..", "..")))
+
+def get_map():
+ """
+ Return table name - table class map
+ """
+ return {"allianceshortnames": None,
+ "billtypes": None,
+ "certificaterelationships": None,
+ "certificates": None,
+ "corptickernames": None,
+ "dgmattribs": AttributeInfo,
+ "dgmeffects": EffectInfo,
+ "dgmtypeattribs": Attribute,
+ "dgmtypeeffects": Effect,
+ "evegraphics": None,
+ "evelocations": None,
+ "eveowners": None,
+ "eveunits": Unit,
+ "groupsByCategories": None,
+ "icons": Icon,
+ "invbptypes": None,
+ "invcategories": Category,
+ "invcontrabandTypesByFaction": None,
+ "invcontrabandTypesByType": None,
+ "invgroups": Group,
+ "invmetagroups": MetaGroup,
+ "invmarketgroups": MarketGroup,
+ "invmetatypes": MetaType,
+ "invmetatypesByTypeID": None,
+ "invreactiontypes": None,
+ "invtypes": Item,
+ "locationscenes": None,
+ "locationwormholeclasses": None,
+ "mapcelestialdescriptions": None,
+ "ownericons": None,
+ "ramactivities": None,
+ "ramaltypes": None,
+ "ramaltypesdetailpercategory": None,
+ "ramaltypesdetailpergroup": None,
+ "ramcompletedstatuses": None,
+ "ramtyperequirements": None,
+ "schematics": None,
+ "schematicsByPin": None,
+ "schematicsByType": None,
+ "schematicspinmap": None,
+ "schematicstypemap": None,
+ "shiptypes": None,
+ "sounds": None,
+ "typesByGroups": None,
+ "typesByMarketGroups": None}
+
+def get_order():
+ """
+ Return order for table processing
+ """
+ return ("icons",
+ "invmarketgroups",
+ "eveunits",
+ "dgmattribs",
+ "dgmeffects",
+ "invcategories",
+ "invgroups",
+ "invmetagroups",
+ "invtypes",
+ "invmetatypes",
+ "dgmtypeattribs",
+ "dgmtypeeffects")
+
+def get_customcalls():
+ """
+ Return custom table - call to get data for it map
+ """
+ return {"invmarketgroups": eve.RemoteSvc("marketProxy").GetMarketGroups()}
+
+def process_table(sourcetable, tablename, tableclass):
+ """
+ Get all data from cache and write it to database
+ """
+ # Get data from source and process it
+ tabledata = get_table_data(sourcetable, tablename, get_source_headers(sourcetable))
+ # Insert everything into table
+ insert_table_values(tabledata, tableclass)
+ return
+
+def get_source_headers(sourcetable):
+ """
+ Pull list of headers from the source table
+ """
+ sourceheaders = None
+ guid = getattr(sourcetable, "__guid__", "None")
+ # For IndexRowset and IndexedRowLists Reverence provides list of headers
+ if guid in ("util.IndexRowset", "util.FilterRowset"):
+ sourceheaders = tuple(sourcetable.header)
+ # For IndexedRowLists, we need to compose list ourselves
+ elif guid == "util.IndexedRowLists":
+ headerset = set()
+ for item in sourcetable:
+ for row in sourcetable[item]:
+ for headername in row.__header__.Keys():
+ headerset.add(headername)
+ sourceheaders = tuple(headerset)
+ return sourceheaders
+
+def get_table_data(sourcetable, tablename, headers):
+ """
+ Pull data out of source table
+ """
+ # Each row is enclosed into dictionary, full table is list of these dictionaries
+ datarows = []
+ guid = getattr(sourcetable, "__guid__", "None")
+ # We have Select method for IndexRowset tables
+ if guid == "util.IndexRowset":
+ for values in sourcetable.Select(*headers):
+ # When Select is asked to find single value, it is returned in its raw
+ # form. Convert is to tuple for proper further processing
+ if not isinstance(values, (list, tuple, set)):
+ values = (values,)
+ headerslen = len(headers)
+ datarow = {}
+ # 1 row value should correspond to 1 header, if number or values doesn't
+ # correspond to number of headers then something went wrong
+ if headerslen != len(values):
+ print "Error: malformed data in source table {0}".format(tablename)
+ return None
+ # Fill row dictionary with values and append it to list
+ for i in xrange(headerslen):
+ # If we've got ASCII string, convert it to Unicode
+ if isinstance(values[i], str):
+ datarow[headers[i]] = unicode(values[i], 'ISO-8859-1')
+ else:
+ datarow[headers[i]] = values[i]
+ datarows.append(datarow)
+ # FilterRowset and IndexedRowLists are accessible almost like dictionaries
+ elif guid in ("util.FilterRowset", "util.IndexedRowLists"):
+ # Go through all source table elements
+ for element in sourcetable.iterkeys():
+ # Go through all rows of an element
+ for row in sourcetable[element]:
+ datarow = {}
+ # Fill row dictionary with values we need and append it to the list
+ for header in headers:
+ value = getattr(row, header, None)
+ # None and zero values are different, and we want to write zero
+ # values to database
+ if value or value in (0, 0.0):
+ datarow[header] = value
+ datarows.append(datarow)
+
+ return datarows
+
+def insert_table_values(tabledata, tableclass):
+ """
+ Insert values into tables and show progress
+ """
+ rows = 0
+ rows_skipped = 0
+ # Go through all table rows
+ for row in tabledata:
+ instance = tableclass()
+ # Print dot each 1k inserted rows
+ if rows / 1000.0 == int(rows / 1000.0):
+ sys.stdout.write(".")
+ sys.stdout.flush()
+ try:
+ # Go through all fields of a row, process them and insert
+ for header in row:
+ setattr(instance, header, process_value(row[header], tableclass, header))
+ eos.db.gamedata_session.add(instance)
+ rows += 1
+ except ValueError:
+ rows_skipped += 1
+ # Print out results and actually commit results to database
+ print "\nInserted {0} rows. skipped {1} rows".format(rows, rows_skipped)
+ eos.db.gamedata_session.commit()
+
+def process_value(value, tableclass, header):
+ # Get column info
+ info = tableclass._sa_class_manager.mapper.c.get(header)
+ if info is None:
+ return
+
+ # Null out non-existent foreign key relations
+ foreign_keys = info.foreign_keys
+ if len(foreign_keys) > 0:
+ for key in foreign_keys:
+ col = key.column
+ if not query_existence(col, value) and not key.deferrable:
+ if info.nullable:
+ return None
+ else:
+ raise ValueError("Integrity check failed")
+ else:
+ return value
+ #Turn booleans into actual booleans, don't leave them as integers
+ elif type(info.type) == Boolean:
+ return bool(value)
+ else:
+ return value
+
+existence_cache = {}
+def query_existence(col, value):
+ key = (col, col.table, value)
+ info = existence_cache.get(key)
+ if info is None:
+ info = eos.db.gamedata_session.query(col.table).filter(col == value).count() > 0
+ existence_cache[key] = info
+
+ return info
+
+if __name__ == "__main__":
+ from ConfigParser import ConfigParser
+ from optparse import OptionParser
+
+ from reverence import blue
+ from sqlalchemy import Boolean
+ from sqlalchemy.orm import class_mapper, ColumnProperty
+
+ import eos.config
+
+ # Parse command line options
+ usage = "usage: %prog --eve=EVE --cache=CACHE --dump=DUMP [--release=RELEASE --sisi]"
+ parser = OptionParser(usage=usage)
+ parser.add_option("-e", "--eve", help="path to eve folder")
+ parser.add_option("-c", "--cache", help="path to eve cache folder")
+ parser.add_option("-d", "--dump", help="the SQL Alchemy connection string of where we should place our final dump")
+ parser.add_option("-r", "--release", help="database release number, defaults to 1", default="1")
+ parser.add_option("-s", "--sisi", action="store_true", dest="singularity", help="if you're going to work with Singularity test server data, use this option", default=False)
+ (options, args) = parser.parse_args()
+
+
+ # Exit if we do not have any of required options
+ if not options.eve or not options.cache or not options.dump:
+ sys.stderr.write("You need to specify paths to eve folder, cache folder and SQL Alchemy connection string. Run script with --help option for further info.\n")
+ sys.exit()
+
+ # We can deal either with singularity or tranquility servers
+ if options.singularity: server = "singularity"
+ else: server = "tranquility"
+
+ # Set static variables for paths
+ PATH_EVE = os.path.expanduser(options.eve)
+ PATH_CACHE = os.path.expanduser(options.cache)
+
+ eos.config.gamedata_connectionstring = options.dump
+ eos.config.debug = False
+
+ from eos.gamedata import *
+ import eos.db
+
+ # Get version of EVE client
+ config = ConfigParser()
+ config.read(os.path.join(PATH_EVE, "common.ini"))
+
+ # Form metadata dictionary for corresponding table
+ metadata = {}
+ metadata["version"] = config.getint("main", "build")
+ metadata["release"] = options.release
+
+ # Initialize Reverence cache manager
+ eve = blue.EVE(PATH_EVE, cachepath=PATH_CACHE, server=server)
+ cfg = eve.getconfigmgr()
+
+ # Create all tables we need
+ eos.db.gamedata_meta.create_all()
+
+ # Add versioning info to the metadata table
+ for fieldname in metadata:
+ eos.db.gamedata_session.add(MetaData(fieldname, metadata[fieldname]))
+
+ eos.db.gamedata_session.commit()
+
+ # Get table map, processing order and special table data
+ TABLE_MAP = get_map()
+ TABLE_ORDER = get_order()
+ CUSTOM_CALLS = get_customcalls()
+
+ # Warn about various stuff
+ for table in cfg.tables:
+ if not table in TABLE_MAP:
+ # Warn about new tables in cache which are still not described by table map
+ print "Warning: unmapped table {0} found in cache".format(table)
+ for table in TABLE_MAP:
+ if not table in cfg.tables and not table in CUSTOM_CALLS:
+ # Warn about mapped tables which are missing in cache
+ print "Warning: mapped table {0} cannot be found in cache".format(table)
+ if not table in TABLE_ORDER and TABLE_MAP[table] is not None:
+ # Warn about mapped tables not specified in processing order
+ print "Warning: mapped table {0} is missing in processing order".format(table)
+ for table in TABLE_ORDER:
+ if not table in TABLE_MAP:
+ # Warn about unmapped tables in processing order
+ print "Warning: unmapped table {0} is specified in processing order".format(table)
+
+ # Get data from reverence and write it
+ for tablename in TABLE_ORDER:
+ tableclass = TABLE_MAP[tablename]
+ if tableclass is not None:
+ # Print currently processed table name
+ print "Processing: {0}".format(tablename)
+ # Get table object from the Reverence and process it
+ source_table = getattr(cfg, tablename) if tablename not in CUSTOM_CALLS else CUSTOM_CALLS[tablename]
+ # Gather data regarding columns for current table in cache and eos
+ cols_eos = set(prop.key for prop in class_mapper(TABLE_MAP[tablename]).iterate_properties if isinstance(prop, ColumnProperty))
+ cols_rev = set(get_source_headers(source_table))
+ notineos = cols_rev.difference(cols_eos)
+ notinrev = cols_eos.difference(cols_rev)
+ if notineos:
+ print "Warning: {0} found in cache but missing in eos definitions: {1}".format("column" if len(notineos) == 1 else "columns", ", ".join(sorted(notineos)))
+ if notinrev:
+ print "Warning: {0} found in eos definitions but missing in cache: {1}".format("column" if len(notinrev) == 1 else "columns", ", ".join(sorted(notinrev)))
+ process_table(source_table, tablename, tableclass)
diff --git a/eos/utils/scripts/findNonMarket.py b/eos/utils/scripts/findNonMarket.py
new file mode 100755
index 000000000..7a2c11bc9
--- /dev/null
+++ b/eos/utils/scripts/findNonMarket.py
@@ -0,0 +1,430 @@
+#!/usr/bin/env python3
+
+import copy
+import os.path
+import re
+import sqlite3
+
+# Connect to database and set up cursor
+db = sqlite3.connect(os.path.join("..", "..", "..", "staticdata", "eve.db"))
+cursor = db.cursor()
+
+# Queries to get raw data
+QUERY_ALLEFFECTS = 'SELECT effectID, effectName FROM dgmeffects'
+# Limit categories to
+# \Modules (7), Charges (8), Drones (18),
+# Implants (20), Subsystems (32)
+QUERY_PUBLISHEDTYPEIDS = 'SELECT it.typeID FROM invtypes AS it INNER JOIN \
+invgroups AS ig ON it.groupID = ig.groupID INNER JOIN invcategories AS ic ON \
+ig.categoryID = ic.categoryID WHERE it.published = 1 AND ic.categoryID IN \
+(7, 8, 18, 20, 32)'
+QUERY_TYPEID_GROUPID = 'SELECT groupID FROM invtypes WHERE typeID = ? LIMIT 1'
+QUERY_GROUPID_CATEGORYID = 'SELECT categoryID FROM invgroups WHERE \
+groupID = ? LIMIT 1'
+QUERY_TYPEID_PARENTTYPEID = 'SELECT parentTypeID FROM invmetatypes WHERE \
+typeID = ? LIMIT 1'
+QUERY_TYPEID_MARKETGROUPID = 'SELECT marketGroupID FROM invtypes WHERE \
+typeID = ? LIMIT 1'
+QUERY_TYPEID_TYPENAME = 'SELECT typeName FROM invtypes WHERE typeID = ? \
+LIMIT 1'
+QUERY_MARKETGROUPID_PARENTGROUPID = 'SELECT parentGroupID FROM \
+invmarketgroups WHERE marketGroupID = ? LIMIT 1'
+QUERY_EFFECTID_TYPEID = 'SELECT typeID FROM dgmtypeeffects WHERE effectID = ?'
+# Queries for printing
+QUERY_GROUPID_GROUPNAME = 'SELECT groupName FROM invgroups WHERE groupID = ? \
+LIMIT 1'
+QUERY_CATEGORYID_CATEGORYNAME = 'SELECT categoryName FROM invcategories \
+WHERE categoryID = ? LIMIT 1'
+QUERY_MARKETGROUPID_MARKETGROUPNAME = 'SELECT marketGroupName FROM \
+invmarketgroups WHERE marketGroupID = ? LIMIT 1'
+QUERY_TYPEID_ATTRIBS = 'SELECT da.attributeName, dta.value FROM dgmattribs AS \
+da INNER JOIN dgmtypeattribs AS dta ON dta.attributeID = da.attributeID WHERE \
+dta.typeID = ?'
+QUERY_TYPEID_BASEATTRIBS = 'SELECT volume, mass, capacity FROM invtypes WHERE \
+typeID = ?'
+QUERY_TYPEID_METAGROUPID = 'SELECT metaGroupID FROM invmetatypes WHERE typeID = ?'
+QUERY_METAGROUPNAME_METAGROUPID = 'SELECT metaGroupName FROM invmetagroups WHERE metaGroupID = ?'
+
+# Compose list of effects w/o symbols which eos doesn't take into
+# consideration, we'll use it to find proper effect IDs from file
+# names
+globalmap_effectnameeos_effectid = {}
+STRIPSPEC = "[^A-Za-z0-9]"
+cursor.execute(QUERY_ALLEFFECTS)
+for row in cursor:
+ effectid = row[0]
+ effectnamedb = row[1]
+ effectnameeos = re.sub(STRIPSPEC, "", effectnamedb)
+ # There may be different effects with the same name, so form
+ # sets of IDs
+ if not effectnameeos in globalmap_effectnameeos_effectid:
+ globalmap_effectnameeos_effectid[effectnameeos] = set()
+ globalmap_effectnameeos_effectid[effectnameeos].add(effectid)
+
+# Published types set
+publishedtypes = set()
+cursor.execute(QUERY_PUBLISHEDTYPEIDS)
+for row in cursor:
+ publishedtypes.add(row[0])
+
+# Compose group maps
+# { groupid : set(typeid) }
+globalmap_groupid_typeid = {}
+# { typeid : groupid }
+globalmap_typeid_groupid = {}
+for typeid in publishedtypes:
+ groupid = 0
+ cursor.execute(QUERY_TYPEID_GROUPID, (typeid,))
+ for row in cursor:
+ groupid = row[0]
+ if not groupid in globalmap_groupid_typeid:
+ globalmap_groupid_typeid[groupid] = set()
+ globalmap_groupid_typeid[groupid].add(typeid)
+ globalmap_typeid_groupid[typeid] = groupid
+
+# Category maps
+# { categoryid : set(typeid) }
+globalmap_categoryid_typeid = {}
+# { typeid : categoryid }
+globalmap_typeid_categoryid = {}
+for typeid in publishedtypes:
+ categoryid = 0
+ cursor.execute(QUERY_GROUPID_CATEGORYID,
+ (globalmap_typeid_groupid[typeid],))
+ for row in cursor:
+ categoryid = row[0]
+ if not categoryid in globalmap_categoryid_typeid:
+ globalmap_categoryid_typeid[categoryid] = set()
+ globalmap_categoryid_typeid[categoryid].add(typeid)
+ globalmap_typeid_categoryid[typeid] = categoryid
+
+# Base type maps
+# { basetypeid : set(typeid) }
+globalmap_basetypeid_typeid = {}
+# { typeid : basetypeid }
+globalmap_typeid_basetypeid = {}
+for typeid in publishedtypes:
+ # Not all typeIDs in the database have baseTypeID, so assign some
+ # default value to it
+ basetypeid = 0
+ cursor.execute(QUERY_TYPEID_PARENTTYPEID, (typeid,))
+ for row in cursor:
+ basetypeid = row[0]
+ # If base type is not published or is not set in database, consider
+ # item as variation of self
+ if basetypeid not in publishedtypes:
+ basetypeid = typeid
+ if not basetypeid in globalmap_basetypeid_typeid:
+ globalmap_basetypeid_typeid[basetypeid] = set()
+ globalmap_basetypeid_typeid[basetypeid].add(typeid)
+ globalmap_typeid_basetypeid[typeid] = basetypeid
+
+# Market group maps - we won't use these for further processing, but
+# just as helper for composing other maps
+# { marketgroupid : set(typeid) }
+globalmap_marketgroupid_typeid = {}
+# { typeid : set(marketgroupid) }
+globalmap_typeid_marketgroupid = {}
+for typeid in publishedtypes:
+ marketgroupid = 0
+ cursor.execute(QUERY_TYPEID_MARKETGROUPID, (typeid,))
+ for row in cursor:
+ marketgroupid = row[0]
+ if not marketgroupid:
+ continue
+ if not marketgroupid in globalmap_marketgroupid_typeid:
+ globalmap_marketgroupid_typeid[marketgroupid] = set()
+ globalmap_marketgroupid_typeid[marketgroupid].add(typeid)
+# Copy items to all parent market groups
+INITIALMARKETGROUPIDS = tuple(globalmap_marketgroupid_typeid)
+for marketgroupid in INITIALMARKETGROUPIDS:
+ # Limit depths for case if database will refer to groups making
+ # the loop
+ cyclingmarketgroupid = marketgroupid
+ for depth in range(20):
+ cursor_parentmarket = db.cursor()
+ cursor_parentmarket.execute(QUERY_MARKETGROUPID_PARENTGROUPID,
+ (cyclingmarketgroupid,))
+ for row in cursor_parentmarket:
+ cyclingmarketgroupid = row[0]
+ if cyclingmarketgroupid:
+ if not cyclingmarketgroupid in globalmap_marketgroupid_typeid:
+ globalmap_marketgroupid_typeid[cyclingmarketgroupid] = set()
+ globalmap_marketgroupid_typeid[cyclingmarketgroupid].update\
+ (globalmap_marketgroupid_typeid[marketgroupid])
+ else: break
+# Now, make a reverse map
+for marketgroupid, typeidset in globalmap_marketgroupid_typeid.items():
+ for typeid in typeidset:
+ if not typeid in globalmap_typeid_marketgroupid:
+ globalmap_typeid_marketgroupid[typeid] = set()
+ globalmap_typeid_marketgroupid[typeid].add(marketgroupid)
+
+# Combine market groups and variations
+# { marketgroupid : set(typeidwithvariations) }
+globalmap_marketgroupid_typeidwithvariations = \
+copy.deepcopy(globalmap_marketgroupid_typeid)
+# { typeidwithvariations : set(marketgroupid) }
+globalmap_typeidwithvariations_marketgroupid = {}
+for marketgroupid in globalmap_marketgroupid_typeidwithvariations:
+ typestoadd = set()
+ for typeid in globalmap_marketgroupid_typeidwithvariations[marketgroupid]:
+ if typeid in globalmap_basetypeid_typeid:
+ for variationid in globalmap_basetypeid_typeid[typeid]:
+ # Do not include items which have market group, even if
+ # they're variation
+ if not variationid in globalmap_typeid_marketgroupid:
+ typestoadd.add(variationid)
+ globalmap_marketgroupid_typeidwithvariations[marketgroupid].update\
+ (typestoadd)
+# Make reverse map using simple way too
+for marketgroupid, typeidwithvariationsset in \
+globalmap_marketgroupid_typeidwithvariations.items():
+ for typeid in typeidwithvariationsset:
+ if not typeid in globalmap_typeidwithvariations_marketgroupid:
+ globalmap_typeidwithvariations_marketgroupid[typeid] = set()
+ globalmap_typeidwithvariations_marketgroupid[typeid].add(marketgroupid)
+
+
+nonmarket = set()
+for typeid in publishedtypes:
+ if not typeid in globalmap_typeidwithvariations_marketgroupid:
+ nonmarket.add(typeid)
+
+def getItemAttrs(typeid):
+ attrs = {}
+ cursor.execute(QUERY_TYPEID_ATTRIBS, (typeid,))
+ for row in cursor:
+ attrs[row[0]] = row[1]
+ cursor.execute(QUERY_TYPEID_BASEATTRIBS, (typeid,))
+ for row in cursor:
+ if row[0] is not None:
+ attrs["volume"] = row[0]
+ if row[1] is not None:
+ attrs["mass"] = row[1]
+ if row[2] is not None:
+ attrs["capacity"] = row[2]
+ return attrs
+
+def suggestMktGrp(typeid, mode="grp"):
+ typecat = globalmap_typeid_categoryid[typeid]
+ catname = ""
+ cursor.execute(QUERY_CATEGORYID_CATEGORYNAME, (typecat,))
+ for row in cursor:
+ catname = row[0]
+ typename = ""
+ cursor.execute(QUERY_TYPEID_TYPENAME, (typeid,))
+ for row in cursor:
+ typename = row[0]
+ if catname.lower() == "module" and "civilian" in typename.lower():
+ return 760
+ attrs = getItemAttrs(typeid)
+ implantness = None
+ boosterness = None
+ cpu = None
+ power = None
+ droneBandwidthUsed = None
+ volume = None
+ if "implantness" in attrs:
+ implantness = attrs["implantness"]
+ if "boosterness" in attrs:
+ boosterness = attrs["boosterness"]
+ if "cpu" in attrs:
+ cpu = attrs["cpu"]
+ if "power" in attrs:
+ power = attrs["power"]
+ if "droneBandwidthUsed" in attrs:
+ droneBandwidthUsed = attrs["droneBandwidthUsed"]
+ if "volume" in attrs:
+ volume = attrs["volume"]
+ if mode == "grp":
+ grp = globalmap_typeid_groupid[typeid]
+ comrades = globalmap_groupid_typeid[grp]
+ elif mode == "cat":
+ cat = globalmap_typeid_categoryid[typeid]
+ comrades = globalmap_categoryid_typeid[cat]
+ mktgrps_w_cos = {}
+ for co in comrades:
+ marketgroupid = 0
+ cursor.execute(QUERY_TYPEID_MARKETGROUPID, (co,))
+ for row in cursor:
+ marketgroupid = row[0]
+ if not marketgroupid:
+ continue
+ if not marketgroupid in mktgrps_w_cos:
+ mktgrps_w_cos[marketgroupid] = 0.0
+ similarity_factor = 1.0
+ metagrp = 0
+ cursor.execute(QUERY_TYPEID_METAGROUPID, (co,))
+ for row in cursor:
+ metagrp = row[0]
+ if not metagrp in (0,1,2,14):
+ similarity_factor *= 0.01
+ if implantness or boosterness or cpu or power or droneBandwidthUsed or volume:
+ cgrpattrs = getItemAttrs(co)
+ if implantness:
+ if "implantness" in cgrpattrs:
+ if cgrpattrs["implantness"] != implantness:
+ similarity_factor *= 0.1
+ else:
+ similarity_factor *= 0.01
+ if boosterness:
+ if "boosterness" in cgrpattrs:
+ if cgrpattrs["boosterness"] != boosterness:
+ similarity_factor *= 0.1
+ else:
+ similarity_factor *= 0.01
+ if cpu:
+ if "cpu" in cgrpattrs and cgrpattrs["cpu"]:
+ fct = cpu / cgrpattrs["cpu"]
+ if fct > 1:
+ fct = 1 / fct
+ similarity_factor *= fct
+ else:
+ similarity_factor *= 0.01
+ if power:
+ if "power" in cgrpattrs and cgrpattrs["power"]:
+ fct = power / cgrpattrs["power"]
+ if fct > 1:
+ fct = 1 / fct
+ similarity_factor *= fct
+ else:
+ similarity_factor *= 0.01
+ if droneBandwidthUsed:
+ if "droneBandwidthUsed" in cgrpattrs:
+ fct = droneBandwidthUsed / cgrpattrs["droneBandwidthUsed"]
+ if fct > 1:
+ fct = 1 / fct
+ similarity_factor *= fct
+ else:
+ similarity_factor *= 0.01
+ if volume:
+ if "volume" in cgrpattrs:
+ fct = volume / cgrpattrs["volume"]
+ if fct > 1:
+ fct = 1 / fct
+ similarity_factor *= fct
+ else:
+ similarity_factor *= 0.01
+ mktgrps_w_cos[marketgroupid] += similarity_factor
+ if mktgrps_w_cos:
+ winner = max(mktgrps_w_cos.keys(), key=lambda k: mktgrps_w_cos[k])
+ else:
+ winner = None
+ return winner
+
+def suggestMetaGrp(typeid):
+ typename = ""
+ cursor.execute(QUERY_TYPEID_TYPENAME, (typeid,))
+ for row in cursor:
+ typename = row[0]
+ faction_affixes = ("Arch Angel", "Domination", "Blood", "Guristas", "Sansha", "Sanshas", "Shadow", "Guardian", "Serpentis",
+ "Caldari", "Imperial", "Gallente", "Federation", "Republic",
+ "Ammatar", "Khanid", "Thukker", "Syndicate", "Sisters", "Legion", "ORE",
+ "Nugoehuvi")
+ deadspace_affixes = ("Gistii", "Gistum", "Gist",
+ "Corpii", "Corpum", "Corpus",
+ "Pithi", "Pithum", "Pith",
+ "Centii", "Centum", "Centus",
+ "Coreli", "Corelum", "Core")
+ storyline_names = {"Akemon", "Michi", "Ogdin", "Pashan", "Shaqil", "Whelan Machorin", "Numon"}
+ officer_names = ("Ahremen", "Brokara", "Brynn", "Chelm", "Cormack", "Draclira", "Estamel", "Gotan", "Hakim",
+ "Kaikka", "Mizuro", "Raysere", "Selynne", "Setele", "Tairei", "Thon", "Tuvan", "Vizan")
+ storyline_pattern_general = "'[A-Za-z ]+'"
+ storyline_pattern_names = "|".join("{0}".format(name) for name in storyline_names)
+ faction_pattern = "({0}) ".format("|".join(faction_affixes))
+ deadspace_pattern = "({0}) ".format("|".join(deadspace_affixes))
+ officer_pattern = "({0}) ".format("|".join("{0}'s".format(name) for name in officer_names))
+
+ attrs = getItemAttrs(typeid)
+ if attrs.get("metaLevel") is not None:
+ mlvl = attrs["metaLevel"]
+ if mlvl in (0, 1, 2, 3, 4):
+ meta = 1
+ elif mlvl == 5:
+ meta = 2
+ elif mlvl in (6, 7):
+ meta = 3
+ elif mlvl in (8, 9):
+ meta = 4
+ elif mlvl in (11, 12, 13, 14):
+ if re.search(deadspace_pattern, typename):
+ meta = 6
+ else:
+ meta = 5
+ else:
+ meta = 1
+ elif re.search(officer_pattern, typename):
+ meta = 5
+ elif re.search(deadspace_pattern, typename):
+ meta = 6
+ elif re.search(faction_pattern, typename):
+ meta = 4
+ elif re.search(storyline_pattern_names, typename):
+ meta = 3
+ elif re.search(storyline_pattern_general, typename) and not "Hardwiring" in typename:
+ meta = 3
+ else:
+ meta = 1
+
+ return meta
+
+
+map_typeid_stuff = {}
+map_typeid_stuff2 = {}
+
+for typeid in nonmarket:
+ typename = ""
+ cursor.execute(QUERY_TYPEID_TYPENAME, (typeid,))
+ for row in cursor:
+ typename = row[0]
+ grpname = ""
+ cursor.execute(QUERY_GROUPID_GROUPNAME, (globalmap_typeid_groupid[typeid],))
+ for row in cursor:
+ grpname = row[0]
+ mkt = suggestMktGrp(typeid)
+ if mkt is None:
+ mkt = suggestMktGrp(typeid, mode="cat")
+ meta = suggestMetaGrp(typeid)
+ attrs = getItemAttrs(typeid)
+ if mkt:
+ map_typeid_stuff[typeid] = (mkt, meta)
+ marketgroupname = ""
+ cursor.execute(QUERY_MARKETGROUPID_MARKETGROUPNAME,
+ (mkt,))
+ for row in cursor:
+ marketgroupname = row[0]
+ # Prepend market group name with its parents names
+ prependparentid = mkt
+ # Limit depth to avoid looping, as usual
+ for depth in range(20):
+ cursor_parentmarket = db.cursor()
+ cursor_parentmarket.execute(QUERY_MARKETGROUPID_PARENTGROUPID,
+ (prependparentid,))
+ for row in cursor_parentmarket:
+ prependparentid = row[0]
+ if prependparentid:
+ cursor_parentmarket2 = db.cursor()
+ cursor_parentmarket2.execute(QUERY_MARKETGROUPID_MARKETGROUPNAME,
+ (prependparentid,))
+ for row in cursor_parentmarket2:
+ marketgroupname = "{0} > {1}".format(row[0],
+ marketgroupname)
+ else:
+ break
+ else:
+ marketgroupname = "None"
+
+ map_typeid_stuff2[typename] = (mkt, marketgroupname)
+
+
+ metagroupname = ""
+ cursor.execute(QUERY_METAGROUPNAME_METAGROUPID,
+ (meta,))
+ for row in cursor:
+ metagroupname = row[0]
+
+ #print("---\nItem: {0}\nGroup: {1}\nSuggested market group: {2} ({3})\nMeta group: {4}".format(typename, grpname, marketgroupname, mkt, metagroupname))
+
+#print("\n\nmap = {{ {0} }}".format(", ".join("{0}: ({1}, {2})".format(key, map_typeid_stuff[key][0], map_typeid_stuff[key][1]) for key in sorted(map_typeid_stuff))))
+print("---\n{0}".format("\n".join("\"{0}\": {1}, # {2}".format(key, map_typeid_stuff2[key][0], map_typeid_stuff2[key][1]) for key in sorted(map_typeid_stuff2))))
diff --git a/eos/utils/scripts/itemDiff.py b/eos/utils/scripts/itemDiff.py
new file mode 100755
index 000000000..2227a783a
--- /dev/null
+++ b/eos/utils/scripts/itemDiff.py
@@ -0,0 +1,497 @@
+#!/usr/bin/env python3
+#===============================================================================
+# Copyright (C) 2010-2011 Anton Vorobyov
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with eos. If not, see .
+#===============================================================================
+
+
+'''
+This script is used to compare two different database versions.
+It shows removed/changed/new items with list of changed effects,
+changed attributes and effects which were renamed
+'''
+
+import argparse
+import os.path
+import re
+import sqlite3
+
+parser = argparse.ArgumentParser(description="Compare two databases generated from eve dump to find eos-related differences")
+parser.add_argument("-o", "--old", type=str, required=True, help="path to old cache data dump")
+parser.add_argument("-n", "--new", type=str, required=True, help="path to new cache data dump")
+parser.add_argument("-g", "--nogroups", action="store_false", default=True, dest="groups", help="don't show changed groups")
+parser.add_argument("-e", "--noeffects", action="store_false", default=True, dest="effects", help="don't show list of changed effects")
+parser.add_argument("-a", "--noattributes", action="store_false", default=True, dest="attributes", help="don't show list of changed attributes")
+parser.add_argument("-r", "--norenames", action="store_false", default=True, dest="renames", help="don't show list of renamed data")
+args = parser.parse_args()
+
+# Open both databases and get their cursors
+old_db = sqlite3.connect(os.path.expanduser(args.old))
+old_cursor = old_db.cursor()
+new_db = sqlite3.connect(os.path.expanduser(args.new))
+new_cursor = new_db.cursor()
+
+# Force some of the items to make them published
+FORCEPUB_TYPES = ("Ibis", "Impairor", "Velator", "Reaper")
+OVERRIDES_TYPEPUB = 'UPDATE invtypes SET published = 1 WHERE typeName = ?'
+for typename in FORCEPUB_TYPES:
+ old_cursor.execute(OVERRIDES_TYPEPUB, (typename,))
+ new_cursor.execute(OVERRIDES_TYPEPUB, (typename,))
+
+# Initialization of few things used by both changed/renamed effects list
+effectspath = os.path.join("..", "..", "effects")
+implemented = set()
+
+for filename in os.listdir(effectspath):
+ basename, extension = filename.rsplit('.', 1)
+ # Ignore non-py files and exclude implementation-specific 'effect'
+ if extension == "py" and basename not in ("__init__",):
+ implemented.add(basename)
+
+# Effects' names are used w/o any special symbols by eos
+stripspec = "[^A-Za-z0-9]"
+
+# Method to get data if effect is implemented in eos or not
+def geteffst(effectname):
+ eosname = re.sub(stripspec, "", effectname).lower()
+ if eosname in implemented:
+ impstate = True
+ else:
+ impstate = False
+ return impstate
+
+def findrenames(ren_dict, query, strip=False):
+
+ old_namedata = {}
+ new_namedata = {}
+
+ for cursor, dictionary in ((old_cursor, old_namedata), (new_cursor, new_namedata)):
+ cursor.execute(query)
+ for row in cursor:
+ id = row[0]
+ name = row[1]
+ if strip is True:
+ name = re.sub(stripspec, "", name)
+ dictionary[id] = name
+
+ for id in set(old_namedata.keys()).intersection(new_namedata.keys()):
+ oldname = old_namedata[id]
+ newname = new_namedata[id]
+ if oldname != newname:
+ ren_dict[id] = (oldname, newname)
+ return
+
+def printrenames(ren_dict, title, implementedtag=False):
+ if len(ren_dict) > 0:
+ print('\nRenamed ' + title + ':')
+ for id in sorted(ren_dict):
+ couple = ren_dict[id]
+ if implementedtag:
+ print("\n[{0}] \"{1}\"\n[{2}] \"{3}\"".format(geteffst(couple[0]), couple[0], geteffst(couple[1]), couple[1]))
+ else:
+ print("\n\"{0}\"\n\"{1}\"".format(couple[0], couple[1]))
+
+groupcats = {}
+def getgroupcat(grp):
+ """Get group category from the new db"""
+ if grp in groupcats:
+ cat = groupcats[grp]
+ else:
+ query = 'SELECT categoryID FROM invgroups WHERE groupID = ?'
+ new_cursor.execute(query, (grp,))
+ cat = 0
+ for row in new_cursor:
+ cat = row[0]
+ groupcats[grp] = cat
+ return cat
+
+itemnames = {}
+def getitemname(item):
+ """Get item name from the new db"""
+ if item in itemnames:
+ name = itemnames[item]
+ else:
+ query = 'SELECT typeName FROM invtypes WHERE typeID = ?'
+ new_cursor.execute(query, (item,))
+ name = ""
+ for row in new_cursor:
+ name = row[0]
+ if not name:
+ old_cursor.execute(query, (item,))
+ for row in old_cursor:
+ name = row[0]
+ itemnames[item] = name
+ return name
+
+groupnames = {}
+def getgroupname(grp):
+ """Get group name from the new db"""
+ if grp in groupnames:
+ name = groupnames[grp]
+ else:
+ query = 'SELECT groupName FROM invgroups WHERE groupID = ?'
+ new_cursor.execute(query, (grp,))
+ name = ""
+ for row in new_cursor:
+ name = row[0]
+ if not name:
+ old_cursor.execute(query, (grp,))
+ for row in old_cursor:
+ name = row[0]
+ groupnames[grp] = name
+ return name
+
+effectnames = {}
+def geteffectname(effect):
+ """Get effect name from the new db"""
+ if effect in effectnames:
+ name = effectnames[effect]
+ else:
+ query = 'SELECT effectName FROM dgmeffects WHERE effectID = ?'
+ new_cursor.execute(query, (effect,))
+ name = ""
+ for row in new_cursor:
+ name = row[0]
+ if not name:
+ old_cursor.execute(query, (effect,))
+ for row in old_cursor:
+ name = row[0]
+ effectnames[effect] = name
+ return name
+
+attrnames = {}
+def getattrname(attr):
+ """Get attribute name from the new db"""
+ if attr in attrnames:
+ name = attrnames[attr]
+ else:
+ query = 'SELECT attributeName FROM dgmattribs WHERE attributeID = ?'
+ new_cursor.execute(query, (attr,))
+ name = ""
+ for row in new_cursor:
+ name = row[0]
+ if not name:
+ old_cursor.execute(query, (attr,))
+ for row in old_cursor:
+ name = row[0]
+ attrnames[attr] = name
+ return name
+
+# State table
+S = {"unchanged": 0,
+ "removed": 1,
+ "changed": 2,
+ "added": 3 }
+
+if args.effects or args.attributes or args.groups:
+ # Format:
+ # Key: item id
+ # Value: [groupID, set(effects), {attribute id : value}]
+ old_itmdata = {}
+ new_itmdata = {}
+
+ for cursor, dictionary in ((old_cursor, old_itmdata), (new_cursor, new_itmdata)):
+ # Compose list of items we're interested in, filtered by category
+ query = 'SELECT it.typeID, it.groupID FROM invtypes AS it INNER JOIN invgroups AS ig ON it.groupID = ig.groupID INNER JOIN invcategories AS ic ON ig.categoryID = ic.categoryID WHERE it.published = 1 AND ic.categoryName IN ("Ship", "Module", "Charge", "Skill", "Drone", "Implant", "Subsystem")'
+ cursor.execute(query)
+ for row in cursor:
+ itemid = row[0]
+ groupID = row[1]
+ # Initialize container for the data for each item with empty stuff besides groupID
+ dictionary[itemid] = [groupID, set(), {}]
+ # Add items filtered by group
+ query = 'SELECT it.typeID, it.groupID FROM invtypes AS it INNER JOIN invgroups AS ig ON it.groupID = ig.groupID WHERE it.published = 1 AND ig.groupName IN ("Effect Beacon")'
+ cursor.execute(query)
+ for row in cursor:
+ itemid = row[0]
+ groupID = row[1]
+ dictionary[itemid] = [groupID, set(), {}]
+
+ if args.effects:
+ # Pull all eff
+ query = 'SELECT it.typeID, de.effectID FROM invtypes AS it INNER JOIN dgmtypeeffects AS dte ON dte.typeID = it.typeID INNER JOIN dgmeffects AS de ON de.effectID = dte.effectID WHERE it.published = 1'
+ cursor.execute(query)
+ for row in cursor:
+ itemid = row[0]
+ effectID = row[1]
+ # Process only items we need
+ if itemid in dictionary:
+ # Add effect to the set
+ effectSet = dictionary[itemid][1]
+ effectSet.add(effectID)
+
+ if args.attributes:
+ # Add base attributes to our data
+ query = 'SELECT it.typeID, it.mass, it.capacity, it.volume FROM invtypes AS it'
+ cursor.execute(query)
+ for row in cursor:
+ itemid = row[0]
+ if itemid in dictionary:
+ attrdict = dictionary[itemid][2]
+ # Add base attributes: mass (4), capacity (38) and volume (161)
+ attrdict[4] = row[1]
+ attrdict[38] = row[2]
+ attrdict[161] = row[3]
+
+ # Add attribute data for other attributes
+ query = 'SELECT dta.typeID, dta.attributeID, dta.value FROM dgmtypeattribs AS dta'
+ cursor.execute(query)
+ for row in cursor:
+ itemid = row[0]
+ if itemid in dictionary:
+ attrid = row[1]
+ attrval = row[2]
+ attrdict = dictionary[itemid][2]
+ if attrid in attrdict:
+ print("Warning: base attribute is described in non-base attribute table")
+ else:
+ attrdict[attrid] = attrval
+
+ # Get set of IDs from both dictionaries
+ items_old = set(old_itmdata.keys())
+ items_new = set(new_itmdata.keys())
+
+ # Format:
+ # Key: item state
+ # Value: {item id: ((group state, old group, new group), {effect state: set(effects)}, {attribute state: {attributeID: (old value, new value)}})}
+ global_itmdata = {}
+
+ # Initialize it
+ for state in S:
+ global_itmdata[S[state]] = {}
+
+
+ # Fill all the data for removed items
+ for item in items_old.difference(items_new):
+ # Set item state to removed
+ state = S["removed"]
+ # Set only old group for item
+ oldgroup = old_itmdata[item][0]
+ groupdata = (S["unchanged"], oldgroup, None)
+ # Set old set of effects and mark all as unchanged
+ effectsdata = {}
+ effectsdata[S["unchanged"]] = set()
+ if args.effects:
+ oldeffects = old_itmdata[item][1]
+ effectsdata[S["unchanged"]].update(oldeffects)
+ # Set old set of attributes and mark all as unchanged
+ attrdata = {}
+ attrdata[S["unchanged"]] = {}
+ if args.attributes:
+ oldattrs = old_itmdata[item][2]
+ for attr in oldattrs:
+ # NULL will mean there's no such attribute in db
+ attrdata[S["unchanged"]][attr] = (oldattrs[attr], "NULL")
+ # Fill global dictionary with data we've got
+ global_itmdata[state][item] = (groupdata, effectsdata, attrdata)
+
+
+ # Now, for added items
+ for item in items_new.difference(items_old):
+ # Set item state to added
+ state = S["added"]
+ # Set only new group for item
+ newgroup = new_itmdata[item][0]
+ groupdata = (S["unchanged"], None, newgroup)
+ # Set new set of effects and mark all as unchanged
+ effectsdata = {}
+ effectsdata[S["unchanged"]] = set()
+ if args.effects:
+ neweffects = new_itmdata[item][1]
+ effectsdata[S["unchanged"]].update(neweffects)
+ # Set new set of attributes and mark all as unchanged
+ attrdata = {}
+ attrdata[S["unchanged"]] = {}
+ if args.attributes:
+ newattrs = new_itmdata[item][2]
+ for attr in newattrs:
+ # NULL will mean there's no such attribute in db
+ attrdata[S["unchanged"]][attr] = ("NULL", newattrs[attr])
+ # Fill global dictionary with data we've got
+ global_itmdata[state][item] = (groupdata, effectsdata, attrdata)
+
+ # Now, check all the items which exist in both databases
+ for item in items_old.intersection(items_new):
+ # Set group data for an item
+ oldgroup = old_itmdata[item][0]
+ newgroup = new_itmdata[item][0]
+ # If we're not asked to compare groups, mark them as unchanged anyway
+ groupdata = (S["changed"] if oldgroup != newgroup and args.groups else S["unchanged"], oldgroup, newgroup)
+ # Fill effects data into appropriate groups
+ effectsdata = {}
+ for state in S:
+ # We do not have changed effects whatsoever
+ if state != "changed":
+ effectsdata[S[state]] = set()
+ if args.effects:
+ oldeffects = old_itmdata[item][1]
+ neweffects = new_itmdata[item][1]
+ effectsdata[S["unchanged"]].update(oldeffects.intersection(neweffects))
+ effectsdata[S["removed"]].update(oldeffects.difference(neweffects))
+ effectsdata[S["added"]].update(neweffects.difference(oldeffects))
+ # Go through all attributes, filling global data dictionary
+ attrdata = {}
+ for state in S:
+ attrdata[S[state]] = {}
+ if args.attributes:
+ oldattrs = old_itmdata[item][2]
+ newattrs = new_itmdata[item][2]
+ for attr in set(oldattrs.keys()).union(newattrs.keys()):
+ # NULL will mean there's no such attribute in db
+ oldattr = oldattrs.get(attr, "NULL")
+ newattr = newattrs.get(attr, "NULL")
+ attrstate = S["unchanged"]
+ if oldattr == "NULL" and newattr != "NULL":
+ attrstate = S["added"]
+ elif oldattr != "NULL" and newattr == "NULL":
+ attrstate = S["removed"]
+ elif oldattr != newattr:
+ attrstate = S["changed"]
+ attrdata[attrstate][attr] = (oldattr, newattr)
+ # Consider item as unchanged by default and set it to change when we see any changes in sub-items
+ state = S["unchanged"]
+ if state == S["unchanged"] and groupdata[0] != S["unchanged"]:
+ state = S["changed"]
+ if state == S["unchanged"] and (len(effectsdata[S["removed"]]) > 0 or len(effectsdata[S["added"]]) > 0):
+ state = S["changed"]
+ if state == S["unchanged"] and (len(attrdata[S["removed"]]) > 0 or len(attrdata[S["changed"]]) > 0 or len(attrdata[S["added"]]) > 0):
+ state = S["changed"]
+ # Fill global dictionary with data we've got
+ global_itmdata[state][item] = (groupdata, effectsdata, attrdata)
+
+# As eos uses names as unique IDs in lot of places, we have to keep track of name changes
+if args.renames:
+ ren_effects = {}
+ query = 'SELECT effectID, effectName FROM dgmeffects'
+ findrenames(ren_effects, query, strip = True)
+
+ ren_attributes = {}
+ query = 'SELECT attributeID, attributeName FROM dgmattribs'
+ findrenames(ren_attributes, query)
+
+ ren_categories = {}
+ query = 'SELECT categoryID, categoryName FROM invcategories'
+ findrenames(ren_categories, query)
+
+ ren_groups = {}
+ query = 'SELECT groupID, groupName FROM invgroups'
+ findrenames(ren_groups, query)
+
+ ren_marketgroups = {}
+ query = 'SELECT marketGroupID, marketGroupName FROM invmarketgroups'
+ findrenames(ren_marketgroups, query)
+
+ ren_items = {}
+ query = 'SELECT typeID, typeName FROM invtypes'
+ findrenames(ren_items, query)
+
+# Get db metadata
+old_meta = {}
+new_meta = {}
+query = 'SELECT fieldName, fieldValue FROM metadata'
+old_cursor.execute(query)
+for row in old_cursor:
+ old_meta[row[0]] = row[1]
+new_cursor.execute(query)
+for row in new_cursor:
+ new_meta[row[0]] = row[1]
+
+# Print jobs
+print("Comparing databases:\n{0}-{1}\n{2}-{3}\n".format(old_meta.get("version"), old_meta.get("release"),
+ new_meta.get("version"), new_meta.get("release")))
+if args.effects or args.attributes or args.groups:
+ # Print legend only when there're any interesting changes
+ if len(global_itmdata[S["removed"]]) > 0 or len(global_itmdata[S["changed"]]) > 0 or len(global_itmdata[S["added"]]) > 0:
+ genleg = "[+] - new item\n[-] - removed item\n[*] - changed item\n"
+ grpleg = "(x => y) - group changes\n" if args.groups else ""
+ attreffleg = " [+] - effect or attribute has been added to item\n [-] - effect or attribute has been removed from item\n" if args.attributes or args.effects else ""
+ effleg = " [y] - effect is implemented\n [n] - effect is not implemented\n" if args.effects else ""
+ print("{0}{1}{2}{3}\nItems:".format(genleg, grpleg, attreffleg, effleg))
+
+ # Make sure our states are sorted
+ stateorder = sorted(global_itmdata)
+
+ TG = {S["unchanged"]: "+", S["changed"]: "*",
+ S["removed"]: "-",
+ S["added"]: "+"}
+
+ # Cycle through states
+ for itmstate in stateorder:
+ # Skip unchanged items
+ if itmstate == S["unchanged"]:
+ continue
+ items = global_itmdata[itmstate]
+ # Sort by name first
+ itemorder = sorted(items, key=lambda item: getitemname(item))
+ # Then by group id
+ itemorder = sorted(itemorder, key=lambda item: items[item][0][2] or items[item][0][1])
+ # Then by category id
+ itemorder = sorted(itemorder, key=lambda item: getgroupcat(items[item][0][2] or items[item][0][1]))
+
+ for item in itemorder:
+ groupdata = items[item][0]
+ groupstr = " ({0} => {1})".format(getgroupname(groupdata[1]), getgroupname(groupdata[2])) if groupdata[0] == S["changed"] else ""
+ print("\n[{0}] {1}{2}".format(TG[itmstate], getitemname(item), groupstr))
+
+ effdata = items[item][1]
+ for effstate in stateorder:
+ # Skip unchanged effect sets, but always include them for added or removed ships
+ # Also, always skip empty data
+ if (effstate == S["unchanged"] and itmstate not in (S["removed"], S["added"])) or effstate not in effdata:
+ continue
+ effects = effdata[effstate]
+ efforder = sorted(effects, key=lambda eff: geteffectname(eff))
+ for eff in efforder:
+ # Take tag from item if item was added or removed
+ tag = TG[effstate] if itmstate not in (S["removed"], S["added"]) else TG[itmstate]
+ print(" [{0}|{1}] {2}".format(tag, "y" if geteffst(geteffectname(eff)) else "n", geteffectname(eff)))
+
+ attrdata = items[item][2]
+ for attrstate in stateorder:
+ # Skip unchanged and empty attribute sets, also skip attributes display for added and removed items
+ if (attrstate == S["unchanged"] and itmstate != S["added"]) or itmstate in (S["removed"], ) or attrstate not in attrdata:
+ continue
+ attrs = attrdata[attrstate]
+ attrorder = sorted(attrs, key=lambda attr: getattrname(attr))
+ for attr in attrorder:
+ valline = ""
+ if attrs[attr][0] == "NULL" or itmstate == S["added"]:
+ valline = "{0}".format(attrs[attr][1] or 0)
+ elif attrs[attr][1] == "NULL":
+ valline = "{0}".format(attrs[attr][0] or 0)
+ else:
+ valline = "{0} => {1}".format(attrs[attr][0] or 0, attrs[attr][1] or 0)
+ print(" [{0}] {1}: {2}".format(TG[attrstate], getattrname(attr), valline))
+
+if args.renames:
+ title = 'effects'
+ printrenames(ren_effects, title, implementedtag=True)
+
+ title = 'attributes'
+ printrenames(ren_attributes, title)
+
+ title = 'categories'
+ printrenames(ren_categories, title)
+
+ title = 'groups'
+ printrenames(ren_groups, title)
+
+ title = 'market groups'
+ printrenames(ren_marketgroups, title)
+
+ title = 'items'
+ printrenames(ren_items, title)
diff --git a/eos/utils/scripts/jsonToSql.py b/eos/utils/scripts/jsonToSql.py
new file mode 100755
index 000000000..1be95f271
--- /dev/null
+++ b/eos/utils/scripts/jsonToSql.py
@@ -0,0 +1,106 @@
+#!/usr/bin/env python3
+#======================================================================
+# Copyright (C) 2012 Diego Duclos
+#
+# This file is part of eos.
+#
+# eos is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation, either version 3 of
+# the License, or (at your option) any later version.
+#
+# eos 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with eos. If not, see .
+#======================================================================
+
+import os
+import sys
+
+# Add eos root path to sys.path so we can import ourselves
+path = os.path.dirname(unicode(__file__, sys.getfilesystemencoding()))
+sys.path.append(os.path.realpath(os.path.join(path, "..", "..", "..")))
+
+import sqlite3
+import json
+import argparse
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser(description="This scripts dumps effects from an sqlite cache dump to mongo")
+ parser.add_argument("-d", "--db", required=True, type=str, help="The sqlalchemy connectionstring, example: sqlite:///c:/tq.db")
+ parser.add_argument("-j", "--json", required=True, type=str, help="The path to the json dum")
+ args = parser.parse_args()
+
+ # Import eos.config first and change it
+ import eos.config
+ eos.config.gamedata_connectionstring = args.db
+ eos.config.debug = False
+
+ # Now thats done, we can import the eos modules using the config
+ import eos.db
+ import eos.gamedata
+
+ # Create the database tables
+ eos.db.gamedata_meta.create_all()
+
+ # Config dict
+ tables = {"dgmattribs": eos.gamedata.AttributeInfo,
+ "dgmeffects": eos.gamedata.EffectInfo,
+ "dgmtypeattribs": eos.gamedata.Attribute,
+ "dgmtypeeffects": eos.gamedata.Effect,
+ "dgmunits": eos.gamedata.Unit,
+ "icons": eos.gamedata.Icon,
+ "invcategories": eos.gamedata.Category,
+ "invgroups": eos.gamedata.Group,
+ "invmetagroups": eos.gamedata.MetaGroup,
+ "invmetatypes": eos.gamedata.MetaType,
+ "invtypes": eos.gamedata.Item,
+ "marketProxy_GetMarketGroups": eos.gamedata.MarketGroup}
+
+ fieldMapping = {"icons": {"id": "iconID"}}
+ data = {}
+
+ # Dump all data to memory so we can easely cross check ignored rows
+ for jsonName, cls in tables.iteritems():
+ f = open(os.path.join(args.json, "{}.json".format(jsonName)))
+ data[jsonName] = json.load(f, encoding='cp1252')
+
+ # Do some preprocessing to make our job easier
+ invTypes = set()
+ for row in data["invtypes"]:
+ if row["published"]:
+ invTypes.add(row["typeID"])
+
+ # ignore checker
+ def isIgnored(file, row):
+ if file == "invtypes" and not row["published"]:
+ return True
+ elif file == "dgmtypeeffects" and not row["typeID"] in invTypes:
+ return True
+ elif file == "dgmtypeattribs" and not row["typeID"] in invTypes:
+ return True
+ elif file == "invmetatypes" and not row["typeID"] in invTypes:
+ return True
+
+ return False
+
+ # Loop through each json file and write it away, checking ignored rows
+ for jsonName, table in data.iteritems():
+ fieldMap = fieldMapping.get(jsonName, {})
+ print "processing {}".format(jsonName)
+ for row in table:
+ # We don't care about some kind of rows, filter it out if so
+ if not isIgnored(jsonName, row):
+ instance = tables[jsonName]()
+ for k, v in row.iteritems():
+ setattr(instance, fieldMap.get(k, k), v)
+
+ eos.db.gamedata_session.add(instance)
+
+ eos.db.gamedata_session.commit()
+
+ print("done")
\ No newline at end of file
diff --git a/eos/utils/scripts/nighty.py b/eos/utils/scripts/nighty.py
new file mode 100755
index 000000000..cbda2807d
--- /dev/null
+++ b/eos/utils/scripts/nighty.py
@@ -0,0 +1,127 @@
+#!/usr/bin/env python
+
+from optparse import OptionParser
+import os.path
+import shutil
+import tempfile
+import sys
+import tarfile
+import datetime
+import random
+import string
+
+class FileStub():
+ def write(self, *args):
+ pass
+
+ def flush(self, *args):
+ pass
+
+def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
+ return ''.join(random.choice(chars) for x in range(size))
+
+if __name__ == "__main__":
+ oldstd = sys.stdout
+ parser = OptionParser()
+ parser.add_option("-s", "--skeleton", dest="skeleton", help="Location of skeleton directory")
+ parser.add_option("-b", "--base", dest="base", help="location of the base directory")
+ parser.add_option("-d", "--destination", dest="destination", help="where to copy our archive")
+ parser.add_option("-t", "--static", dest="static", help="directory containing static files")
+ parser.add_option("-q", "--quiet", dest="silent", action="store_true")
+ options, args = parser.parse_args()
+
+ if options.skeleton is None or options.base is None or options.destination is None:
+ print "Need --skeleton argument as well as --base and --destination argument"
+ parser.print_help()
+ sys.exit()
+
+ if options.silent:
+ sys.stdout = FileStub()
+
+ randomId = id_generator()
+ infoDict = {}
+ skeleton = os.path.expanduser(options.skeleton)
+ info = execfile(os.path.join(skeleton, "info.py"), infoDict)
+ now = datetime.datetime.now()
+ now = "%04d%02d%02d" % (now.year, now.month, now.day)
+ dirName = "nighty-build-%s-%s" % (now, randomId)
+ dst = os.path.join(os.getcwd(), dirName)
+ tmpFile = os.path.join(os.getcwd(), "nighty-build-%s-%s-%s.tar.bz2" % (now, infoDict["os"], randomId))
+ config = os.path.join(skeleton, "config.py")
+ destination = os.path.expanduser(options.destination)
+
+ i = 0
+ gitData = (".git", ".gitignore", ".gitmodules")
+ def loginfo(path, names):
+ global i
+ i += 1
+ if i % 10 == 0:
+ sys.stdout.write(".")
+ sys.stdout.flush()
+ return gitData
+
+ try:
+ print "copying skeleton to ", dst
+ i = 0
+ shutil.copytree(skeleton, dst, ignore=loginfo)
+ print ""
+
+ base = os.path.join(dst, infoDict["base"])
+ print "copying base to ", base
+
+ i = 0
+ for stuff in os.listdir(os.path.expanduser(options.base)):
+ currSource = os.path.join(os.path.expanduser(options.base), stuff)
+ currDest = os.path.join(base, stuff)
+ if stuff in gitData:
+ continue
+ elif os.path.isdir(currSource):
+ shutil.copytree(currSource, currDest, ignore=loginfo)
+ else:
+ shutil.copy2(currSource, currDest)
+
+ print ""
+ if os.path.exists(config):
+ print "adding skeleton config file"
+ shutil.copy2(config, base)
+
+
+ if options.static is not None and os.path.exists(os.path.expanduser(options.static)):
+ print "copying static data to ", os.path.join(base, "staticdata")
+ static = os.path.expanduser(options.static)
+ shutil.copytree(static, os.path.join(base, "staticdata"), ignore=loginfo)
+
+ print "removing development data"
+ paths = []
+ paths.append(os.path.join(base, "eos", "tests"))
+ paths.append(os.path.join(base, "eos", "utils", "scripts"))
+ for path in paths:
+ if os.path.exists(path):
+ print path
+ shutil.rmtree(path)
+
+
+ print "copying done, making archive: ", tmpFile
+ archive = tarfile.open(tmpFile, "w:bz2")
+ print "making archive"
+ archive.add(dst, arcname=infoDict["arcname"])
+ print "closing"
+ archive.close()
+ print "copying archive to ", destination
+ shutil.move(tmpFile, destination)
+ except:
+ print "encountered an error"
+ raise
+ finally:
+ print "deleting tmp files"
+ try:
+ shutil.rmtree(dst)
+ os.unlink(tmpFile)
+ except:
+ pass
+
+ sys.stdout = oldstd
+ if os.path.isdir(destination):
+ print os.path.join(destination, os.path.split(tmpFile)[1])
+ else:
+ print destination
diff --git a/eos/utils/scripts/riskItems.py b/eos/utils/scripts/riskItems.py
new file mode 100755
index 000000000..ccb7a22ab
--- /dev/null
+++ b/eos/utils/scripts/riskItems.py
@@ -0,0 +1,565 @@
+"""
+This is ugly, tricky and unreadable script which helps to detect which items should be tested,
+based on how its current effects work.
+"""
+import sqlite3
+import os.path
+import copy
+from optparse import OptionParser
+
+parser = OptionParser()
+parser.add_option("-d", "--database", help="path to eve cache data dump in \
+sqlite format, default eos database path is used if none specified",
+type="string", default=os.path.join("~", ".pyfa","eve.db"))
+parser.add_option("-a", "--attr", help="find items with all of these attributes",
+type="string", default="")
+parser.add_option("-s", "--srq", help="find items with any of these skill requirements",
+type="string", default="")
+parser.add_option("-g", "--grp", help="find items from any of these groups",
+type="string", default="")
+parser.add_option("-z", "--nozero", action="store_true", help="ignore attributes with zero values",
+default=False)
+parser.add_option("-o", "--noone", action="store_true", help="ignore attributes with value equal to 1",
+default=False)
+parser.add_option("-t", "--tech12", action="store_true", help="show only t12 items (with exception for items with no t1 variations)",
+default=False)
+(options, args) = parser.parse_args()
+
+if not options.attr:
+ import sys
+
+ sys.stderr.write("You need to specify an attribute name.\n")
+ sys.exit()
+
+# Connect to database and set up cursor
+db = sqlite3.connect(os.path.expanduser(options.database))
+cursor = db.cursor()
+
+# As we don't rely on eos's overrides, we need to set them manually
+OVERRIDES = '''
+UPDATE invtypes SET published = '1' WHERE typeName = 'Freki';
+UPDATE invtypes SET published = '1' WHERE typeName = 'Mimir';
+UPDATE invtypes SET published = '1' WHERE typeName = 'Utu';
+UPDATE invtypes SET published = '1' WHERE typeName = 'Adrestia';
+'''
+for statement in OVERRIDES.split(";\n"):
+ cursor.execute(statement)
+
+# Queries to get raw data
+# Limit categories to Celestials (2, only for wormhole effects),
+# Ships (6), Modules (7), Charges (8), Skills (16), Drones (18),
+# Implants (20), Subsystems (32)
+QUERY_PUBLISHEDTYPEIDS = 'SELECT it.typeID FROM invtypes AS it INNER JOIN \
+invgroups AS ig ON it.groupID = ig.groupID INNER JOIN invcategories AS ic ON \
+ig.categoryID = ic.categoryID WHERE it.published = 1 AND ic.categoryID IN \
+(2, 6, 7, 8, 16, 18, 20, 32)'
+QUERY_ATTRIBUTEID_TYPEID = "SELECT it.typeID, dta.value FROM invtypes AS it INNER JOIN \
+dgmtypeattribs AS dta ON it.typeID = dta.typeID INNER JOIN dgmattribs AS da \
+ON dta.attributeID = da.attributeID WHERE da.attributeID = ?"
+QUERY_TYPEID_GROUPID = 'SELECT groupID FROM invtypes WHERE typeID = ? LIMIT 1'
+QUERY_GROUPID_CATEGORYID = 'SELECT categoryID FROM invgroups WHERE \
+groupID = ? LIMIT 1'
+QUERY_TYPEID_PARENTTYPEID = 'SELECT parentTypeID FROM invmetatypes WHERE \
+typeID = ? LIMIT 1'
+QUERY_TYPEID_METAGROUPID = 'SELECT metaGroupID FROM invmetatypes WHERE \
+typeID = ? LIMIT 1'
+QUERY_TYPEID_SKILLRQ = 'SELECT dta.value FROM dgmtypeattribs AS dta INNER JOIN \
+dgmattribs AS da ON da.attributeID = dta.attributeID WHERE (da.attributeName = \
+"requiredSkill1" OR da.attributeName = "requiredSkill2" OR da.attributeName = \
+"requiredSkill3") AND dta.typeID = ?'
+QUERY_TYPEID_MARKETGROUPID = 'SELECT marketGroupID FROM invtypes WHERE \
+typeID = ? LIMIT 1'
+QUERY_TYPEID_TYPENAME = 'SELECT typeName FROM invtypes WHERE typeID = ? \
+LIMIT 1'
+QUERY_MARKETGROUPID_PARENTGROUPID = 'SELECT parentGroupID FROM \
+invmarketgroups WHERE marketGroupID = ? LIMIT 1'
+QUERY_EFFECTID_TYPEID = 'SELECT typeID FROM dgmtypeeffects WHERE effectID = ?'
+# Queries for printing
+QUERY_GROUPID_GROUPNAME = 'SELECT groupName FROM invgroups WHERE groupID = ? \
+LIMIT 1'
+QUERY_CATEGORYID_CATEGORYNAME = 'SELECT categoryName FROM invcategories \
+WHERE categoryID = ? LIMIT 1'
+QUERY_MARKETGROUPID_MARKETGROUPNAME = 'SELECT marketGroupName FROM \
+invmarketgroups WHERE marketGroupID = ? LIMIT 1'
+
+QUERY_ATTRIBUTENAME_ATTRIBUTEID = 'SELECT attributeID FROM dgmattribs WHERE attributeName = ?'
+QUERY_TYPENAME_TYPEID = 'SELECT typeID FROM invtypes WHERE typeName = ?'
+QUERY_GROUPNAME_GROUPID = 'SELECT groupID FROM invgroups WHERE groupName = ?'
+
+if options.srq:
+ global_skillrqids = set()
+ for srq in options.srq.split(","):
+ srqid = 0
+ cursor.execute(QUERY_TYPENAME_TYPEID, (srq,))
+ for row in cursor:
+ srqid = row[0]
+ if not srqid:
+ import sys
+ sys.stderr.write("You need to specify proper skill requirement name.\n")
+ sys.exit()
+ else:
+ global_skillrqids.add(srqid)
+
+if options.grp:
+ global_groupids = set()
+ for grp in options.grp.split(","):
+ grouplist = []
+ cursor.execute(QUERY_GROUPNAME_GROUPID, (grp,))
+ for row in cursor:
+ grouplist.append(row[0])
+ if len(grouplist) > 1:
+ print("Warning: multiple groups found, using ID", grouplist[0])
+ elif len(grouplist) == 0:
+ import sys
+ sys.stderr.write("You need to specify proper group name.\n")
+ sys.exit()
+ global_groupids.add(grouplist[0])
+
+# Published types set
+publishedtypes = set()
+cursor.execute(QUERY_PUBLISHEDTYPEIDS)
+for row in cursor:
+ publishedtypes.add(row[0])
+
+# We'll use list of items with given attributes as base for any operations
+# Term item means item with given attribute
+typeswithattr = set()
+first = True
+for attr in options.attr.split(","):
+ tmp = set()
+ cursor.execute(QUERY_ATTRIBUTENAME_ATTRIBUTEID, (attr,))
+ noattr = True
+ for row in cursor:
+ noattr = False
+ attrid = row[0]
+ if noattr:
+ import sys
+ sys.stderr.write("No \"{0}\" attribute found.\n".format(attr))
+ sys.exit()
+ cursor.execute(QUERY_ATTRIBUTEID_TYPEID, (attrid,))
+ for row in cursor:
+ if options.nozero:
+ if row[0] in publishedtypes and row[1] not in (None, 0, 0.0):
+ tmp.add(row[0])
+ elif options.noone:
+ if row[0] in publishedtypes and row[1] != 1.0:
+ tmp.add(row[0])
+ else:
+ if row[0] in publishedtypes:
+ tmp.add(row[0])
+ if first:
+ first = False
+ typeswithattr = copy.deepcopy(tmp)
+ else:
+ typeswithattr.intersection_update(tmp)
+if len(typeswithattr) == 0:
+ import sys
+ sys.stderr.write("No items found with all of supplied attributes.\n")
+ sys.exit()
+
+# Base type maps
+# { basetypeid : set(typeid) }
+map_basetypeid_typeid = {}
+# { typeid : basetypeid }
+map_typeid_basetypeid = {}
+for typeid in typeswithattr:
+ # Not all typeIDs in the database have baseTypeID, so assign some
+ # default value to it
+ basetypeid = 0
+ cursor.execute(QUERY_TYPEID_PARENTTYPEID, (typeid,))
+ for row in cursor:
+ basetypeid = row[0]
+ # If base type is not published or is not set in database, consider
+ # item as variation of self
+ if basetypeid not in typeswithattr:
+ basetypeid = typeid
+ if not basetypeid in map_basetypeid_typeid:
+ map_basetypeid_typeid[basetypeid] = set()
+ map_basetypeid_typeid[basetypeid].add(typeid)
+ map_typeid_basetypeid[typeid] = basetypeid
+
+# Meta group maps
+# { metagroupid : set(typeid) }
+map_metagroupid_typeid = {}
+# { typeid : metagroupid }
+map_typeid_metagroupid = {}
+for typeid in typeswithattr:
+ # Assume items are tech 1 by default
+ metagroupid = 1
+ cursor.execute(QUERY_TYPEID_METAGROUPID, (typeid,))
+ for row in cursor:
+ metagroupid = row[0]
+ if not metagroupid in map_metagroupid_typeid:
+ map_metagroupid_typeid[metagroupid] = set()
+ map_metagroupid_typeid[metagroupid].add(typeid)
+ map_typeid_metagroupid[typeid] = metagroupid
+
+# Filter out non-t1/t2 items if we're asked to do so
+if options.tech12:
+ toremove = set()
+ for typeid in typeswithattr:
+ if map_typeid_basetypeid[typeid] != typeid and map_typeid_metagroupid[typeid] != 2:
+ toremove.add(typeid)
+ for id in toremove:
+ typeswithattr.remove(id)
+
+print("Attributes:")
+for attr in sorted(options.attr.split(",")):
+ print(attr)
+print("")
+
+# Compose group maps
+# { groupid : set(typeid) }
+map_groupid_typeid = {}
+# { typeid : groupid }
+map_typeid_groupid = {}
+for typeid in typeswithattr:
+ groupid = 0
+ cursor.execute(QUERY_TYPEID_GROUPID, (typeid,))
+ for row in cursor:
+ groupid = row[0]
+ if not groupid in map_groupid_typeid:
+ map_groupid_typeid[groupid] = set()
+ map_groupid_typeid[groupid].add(typeid)
+ map_typeid_groupid[typeid] = groupid
+
+# Category maps
+# { categoryid : set(typeid) }
+map_categoryid_typeid = {}
+# { typeid : categoryid }
+map_typeid_categoryid = {}
+for typeid in typeswithattr:
+ categoryid = 0
+ cursor.execute(QUERY_GROUPID_CATEGORYID,
+ (map_typeid_groupid[typeid],))
+ for row in cursor:
+ categoryid = row[0]
+ if not categoryid in map_categoryid_typeid:
+ map_categoryid_typeid[categoryid] = set()
+ map_categoryid_typeid[categoryid].add(typeid)
+ map_typeid_categoryid[typeid] = categoryid
+# { categoryid : set(groupid) }
+map_categoryid_groupid = {}
+# { groupid : categoryid }
+map_groupid_categoryid = {}
+for groupid in map_groupid_typeid:
+ categoryid = 0
+ cursor.execute(QUERY_GROUPID_CATEGORYID,
+ (groupid,))
+ for row in cursor:
+ categoryid = row[0]
+ if not categoryid in map_categoryid_groupid:
+ map_categoryid_groupid[categoryid] = set()
+ map_categoryid_groupid[categoryid].add(groupid)
+ map_groupid_categoryid[groupid] = categoryid
+
+# Skill required maps
+# { skillid : set(typeid) }
+map_skillrq_typeid = {}
+# { typeid : set(skillid) }
+map_typeid_skillrq = {}
+# list of items without skill requirements
+set_typeid_noskillrq = set()
+for typeid in typeswithattr:
+ map_typeid_skillrq[typeid] = set()
+ cursor.execute(QUERY_TYPEID_SKILLRQ, (typeid,))
+ no_rqs = True
+ for row in cursor:
+ no_rqs = False
+ skillid = row[0]
+ if not skillid in map_skillrq_typeid:
+ map_skillrq_typeid[skillid] = set()
+ map_skillrq_typeid[skillid].add(typeid)
+ map_typeid_skillrq[typeid].add(skillid)
+ if no_rqs:
+ set_typeid_noskillrq.add(typeid)
+
+def gettypename(typeid):
+ typename = ""
+ cursor.execute(QUERY_TYPEID_TYPENAME, (typeid,))
+ for row in cursor:
+ typename = row[0]
+ return typename
+
+def getgroupname(grpid):
+ grpname = ""
+ cursor.execute(QUERY_GROUPID_GROUPNAME, (grpid,))
+ for row in cursor:
+ grpname = row[0]
+ return grpname
+
+def getcatname(catid):
+ catname = ""
+ cursor.execute(QUERY_CATEGORYID_CATEGORYNAME, (catid,))
+ for row in cursor:
+ catname = row[0]
+ return catname
+
+if options.grp and options.srq:
+ # Set of items which are supposed to be affected
+ targetitems = set()
+ for groupid in global_groupids:
+ for srqid in global_skillrqids:
+ if groupid in map_groupid_typeid and srqid in map_skillrq_typeid:
+ targetitems.update(map_groupid_typeid[groupid].intersection(map_skillrq_typeid[srqid]))
+ targetitems_noskillrqs = targetitems.intersection(set_typeid_noskillrq)
+ # All skill requirements of items which are supposed to be affected
+ targetitems_skillrqs = set()
+ for itemid in targetitems:
+ targetitems_skillrqs.update(map_typeid_skillrq[itemid])
+ # Remove skill requirement supplied as argument to script
+ # we can use that argument when needed manually, and it
+ # covers all targetitems which we don't want to do with single skill
+ for srqid in global_skillrqids:
+ targetitems_skillrqs.remove(srqid)
+
+ if targetitems:
+ # Print items which are supposed to be affected
+ print("Affected items:")
+ for groupid in sorted(global_groupids, key=lambda grid: getgroupname(grid)):
+ targetitems_grp = targetitems.intersection(map_groupid_typeid[groupid])
+ print(" Items from {0} group:".format(getgroupname(groupid)))
+ # Cycle through all required skills
+ targetitems_skillrqs_withgiven = copy.deepcopy(targetitems_skillrqs)
+ for srqid in global_skillrqids:
+ targetitems_skillrqs_withgiven.add(srqid)
+ for skillrq in sorted(targetitems_skillrqs_withgiven, key=lambda sk: gettypename(sk)):
+ targetitems_grp_srq = targetitems_grp.intersection(map_skillrq_typeid[skillrq])
+ if targetitems_grp_srq:
+ print(" Items requiring {0} skill:".format(gettypename(skillrq)))
+ for item in sorted(targetitems_grp_srq, key=lambda item: gettypename(item)):
+ # If item has 3rd skill requirement (besides supplied as argument and
+ # included into header of current section), mention it
+ if len(map_typeid_skillrq[item]) in (2, 3):
+ otherskillrq = copy.deepcopy(map_typeid_skillrq[item])
+ otherskillrq.discard(skillrq)
+ print(" {0} ({1})".format(gettypename(item), ", ".join(sorted(gettypename(id) for id in otherskillrq))))
+ # Just print item names if there's only 1 skill requirement
+ elif len(map_typeid_skillrq[item]) == 1:
+ print(" {0}".format(gettypename(item)))
+ else:
+ print("WARNING: Bad things happened, we never should get here")
+
+ print("\nUnaffected items")
+
+
+ items_in_groups = set()
+ for groupid in global_groupids:
+ items_in_groups.update(map_groupid_typeid[groupid])
+ items_with_skillrqs = set()
+ for srqid in global_skillrqids:
+ items_with_skillrqs.update(map_skillrq_typeid[srqid])
+ # List items which do not belong to given group, but have given skill requirement
+ wskill = typeswithattr.intersection(items_with_skillrqs)
+ wogroup = typeswithattr.difference(items_in_groups)
+ nontarget_wskill_wogroup = wskill.intersection(wogroup)
+ if nontarget_wskill_wogroup:
+ print(" With {0} skill requirements, not belonging to {1} groups:".format(", ".join(sorted(gettypename(id) for id in global_skillrqids)), ", ".join(sorted(getgroupname(grid) for grid in global_groupids))))
+ for item in sorted(nontarget_wskill_wogroup, key=lambda item: gettypename(item)):
+ print(" {0}".format(gettypename(item)))
+
+ # List items which belong to given group, but do not have given skill requirement
+ woskill = typeswithattr.difference(items_with_skillrqs)
+ wgroup = typeswithattr.intersection(items_in_groups)
+ nontarget_woskill_wgroup = woskill.intersection(wgroup)
+ if nontarget_woskill_wgroup:
+ print(" Without {0} skill requirement, belonging to {1} group:".format(", ".join(sorted(gettypename(id) for id in global_skillrqids)), ", ".join(sorted(getgroupname(grid) for grid in global_groupids))))
+ for item in sorted(nontarget_woskill_wgroup, key=lambda item: gettypename(item)):
+ print(" {0}".format(gettypename(item)))
+
+ # If any of the above lists is missing, list all unaffected items
+ if not nontarget_wskill_wogroup or not nontarget_woskill_wgroup:
+ nontarget = typeswithattr.difference(items_in_groups)
+ for srqid in global_skillrqids:
+ nontarget.difference_update(map_skillrq_typeid[srqid])
+ if nontarget_wskill_wogroup:
+ nontarget.difference_update(nontarget_wskill_wogroup)
+ if nontarget_woskill_wgroup:
+ nontarget.difference_update(nontarget_woskill_wgroup)
+ nontarget_groups = set()
+ nontarget_cats = set()
+ print(" Plain list:")
+ for item in sorted(nontarget, key=lambda item: gettypename(item)):
+ nontarget_groups.add(map_typeid_groupid[item])
+ print(" {0} ({1})".format(gettypename(item), getgroupname(map_typeid_groupid[item])))
+ #print(" Groups:")
+ #for group in sorted(nontarget_groups, key=lambda grp: getgroupname(grp)):
+ # nontarget_cats.add(map_groupid_categoryid[group])
+ # print(" {0} ({1})".format(getgroupname(group), getcatname(map_groupid_categoryid[group])))
+ #print(" Categories:")
+ #for cat in sorted(nontarget_cats, key=lambda cat: getcatname(cat)):
+ # print(" {0}".format(getcatname(cat)))
+
+elif options.grp:
+ # Set of items which are supposed to be affected
+ targetitems = set()
+ for groupid in global_groupids:
+ if groupid in map_groupid_typeid:
+ targetitems.update(map_groupid_typeid[groupid])
+ # All skill requirements of items which are supposed to be affected
+ targetitems_skillrqs = set()
+ for itemid in targetitems:
+ targetitems_skillrqs.update(map_typeid_skillrq[itemid])
+ targetitems_noskillrqs = targetitems.intersection(set_typeid_noskillrq)
+ if targetitems:
+ # Print items which are supposed to be affected
+ print("Affected items:")
+ for groupid in sorted(global_groupids, key=lambda grid: getgroupname(grid)):
+ print(" From {0} group:".format(getgroupname(groupid)))
+ targetitems_grp = targetitems.intersection(map_groupid_typeid[groupid])
+ targetitems_noskillrqs_grp = targetitems_noskillrqs.intersection(map_groupid_typeid[groupid])
+ # Cycle through all required skills
+ for skillrq in sorted(targetitems_skillrqs, key=lambda sk: gettypename(sk)):
+ items_grpsrq = targetitems_grp.intersection(map_skillrq_typeid[skillrq])
+ if items_grpsrq:
+ print(" Requiring {0} skill:".format(gettypename(skillrq)))
+ for item in sorted(items_grpsrq, key=lambda item: gettypename(item)):
+ # If item has other skill requirements, print them
+ if len(map_typeid_skillrq[item]) == 3 or len(map_typeid_skillrq[item]) == 2:
+ otherskillrq = copy.deepcopy(map_typeid_skillrq[item])
+ otherskillrq.discard(skillrq)
+ print(" {0} ({1})".format(gettypename(item), ", ".join(sorted(gettypename(id) for id in otherskillrq))))
+ # Just print item names if there're only 2 skill requirements
+ elif len(map_typeid_skillrq[item]) == 1:
+ print(" {0}".format(gettypename(item)))
+ else:
+ print("WARNING: Bad things happened, we never should get here")
+ if targetitems_noskillrqs:
+ print(" Requiring no skills:")
+ for item in sorted(targetitems_noskillrqs_grp, key=lambda item: gettypename(item)):
+ print(" {0}".format(gettypename(item)))
+
+ print("\nUnaffected items")
+
+ # List items which are supposed to be unaffected
+ nontarget = typeswithattr.difference(targetitems)
+ nontarget_groups = set()
+ nontarget_cats = set()
+ print(" Not belonging to groups {0}:".format(", ".join(getgroupname(id) for id in global_groupids)))
+
+ removeitms = set()
+ # Check 1 unaffected item with each skill requirement, if some items with it were affected
+ for skillrq in sorted(targetitems_skillrqs, key=lambda srq: gettypename(srq)):
+ if nontarget.intersection(map_skillrq_typeid[skillrq]):
+ print(" With {0} skill requirement:".format(gettypename(skillrq)))
+ for item in sorted(nontarget.intersection(map_skillrq_typeid[skillrq]), key=lambda item: gettypename(item)):
+ print(" {0}".format(gettypename(item)))
+ removeitms.update(map_skillrq_typeid[skillrq])
+ nontarget.difference_update(removeitms)
+ print(" With other or no skill requirements:")
+ for item in sorted(nontarget, key=lambda item: gettypename(item)):
+ nontarget_groups.add(map_typeid_groupid[item])
+ print(" {0} ({1})".format(gettypename(item), getgroupname(map_typeid_groupid[item])))
+
+ #print(" Groups:")
+ #for group in sorted(nontarget_groups, key=lambda grp: getgroupname(grp)):
+ # nontarget_cats.add(map_groupid_categoryid[group])
+ # print(" {0} ({1})".format(getgroupname(group), getcatname(map_groupid_categoryid[group])))
+ #print(" Categories:")
+ #for cat in sorted(nontarget_cats, key=lambda cat: getcatname(cat)):
+ # print(" {0}".format(getcatname(cat)))
+
+elif options.srq:
+ # Set of items which are supposed to be affected
+ targetitems = set()
+ for srqid in global_skillrqids:
+ if srqid in map_skillrq_typeid:
+ targetitems.update(map_skillrq_typeid[srqid])
+
+ # All groups of items which are supposed to be affected
+ targetitems_groups = set()
+ targetitems_srqs = set()
+ targetitems_cats = set()
+ for itemid in targetitems:
+ targetitems_groups.add(map_typeid_groupid[itemid])
+ targetitems_srqs.update(map_typeid_skillrq[itemid])
+ targetitems_cats.add(map_typeid_categoryid[itemid])
+ if targetitems:
+ # Print items which are supposed to be affected
+ print("Affected items:")
+ for srqid in sorted(global_skillrqids, key=lambda itm: gettypename(itm)):
+ print(" With {0} skill requirements:".format(gettypename(srqid)))
+ targetitems_srq = targetitems.intersection(map_skillrq_typeid[srqid])
+ targetitems_srq_groups = set()
+ targetitems_srq_cats = set()
+ for itemid in targetitems_srq:
+ targetitems_srq_groups.add(map_typeid_groupid[itemid])
+ targetitems_srq_cats.add(map_typeid_categoryid[itemid])
+ # Cycle through groups
+ for groupid in sorted(targetitems_srq_groups, key=lambda grp: getgroupname(grp)):
+ print(" From {0} group:".format(getgroupname(groupid)))
+ for item in sorted(targetitems_srq.intersection(map_groupid_typeid[groupid]), key=lambda item: gettypename(item)):
+ print(" {0} ({1})".format(gettypename(item), ", ".join(sorted(gettypename(itm) for itm in map_typeid_skillrq[item].difference(global_skillrqids))) or "None"))
+
+ print("\nUnaffected items")
+
+ # List items which are supposed to be unaffected
+ nontarget = typeswithattr.difference(targetitems)
+ nontarget_groups = set()
+ nontarget_cats = set()
+ print(" Without {0} skills requirement:".format(", ".join(gettypename(id) for id in global_skillrqids)))
+ removeitms = set()
+ # Check 1 unaffected item from each group where some items were affected
+ for groupid in sorted(targetitems_groups, key=lambda grp: getgroupname(grp)):
+ if nontarget.intersection(map_groupid_typeid[groupid]):
+ print(" From {0} group:".format(getgroupname(groupid)))
+ for skillrqid in sorted(targetitems_srqs.difference(global_skillrqids), key=lambda srq: gettypename(srq)):
+ itmset = nontarget.intersection(map_groupid_typeid[groupid]).intersection(map_skillrq_typeid[skillrqid])
+ if itmset:
+ print(" Items with {0} skill requirement:".format(gettypename(skillrqid)))
+ for item in sorted(itmset, key=lambda itm: gettypename(itm)):
+ otherskrqs = map_typeid_skillrq[item].difference(global_skillrqids)
+ otherskrqs.remove(skillrqid)
+ print(" {0} ({1})".format(gettypename(item), ", ".join(sorted(gettypename(itm) for itm in otherskrqs)) or "None"))
+ removeitms.update(itmset)
+ nontarget.difference_update(removeitms)
+ otsk = nontarget.intersection(map_groupid_typeid[groupid]).difference(set_typeid_noskillrq)
+ if otsk:
+ print(" Items with other skill requirements:")
+ for item in sorted(otsk, key=lambda itm: gettypename(itm)):
+ print(" {0} (None)".format(gettypename(item)))
+ removeitms.update(otsk)
+ nosk = nontarget.intersection(map_groupid_typeid[groupid]).intersection(set_typeid_noskillrq)
+ if nosk:
+ print(" Items with no skill requirement:")
+ for item in sorted(nosk, key=lambda itm: gettypename(itm)):
+ print(" {0} (None)".format(gettypename(item)))
+ removeitms.update(nosk)
+ nontarget.difference_update(removeitms)
+ for catid in sorted(targetitems_cats, key=lambda cat: getcatname(cat)):
+ if nontarget.intersection(map_categoryid_typeid[catid]):
+ print(" From {0} category:".format(getcatname(catid)))
+ for item in sorted(nontarget.intersection(map_categoryid_typeid[catid]), key=lambda item: gettypename(item)):
+ print(" {0}".format(gettypename(item)))
+ removeitms.update(map_categoryid_typeid[catid])
+ nontarget.difference_update(removeitms)
+ if nontarget:
+ # Check any other unaffected item
+ print(" Remaining items:")
+ for item in sorted(nontarget, key=lambda item: gettypename(item)):
+ nontarget_groups.add(map_typeid_groupid[item])
+ print(" {0} ({1})".format(gettypename(item), getgroupname(map_typeid_groupid[item])))
+ #print(" Groups:")
+ #for group in sorted(nontarget_groups, key=lambda grp: getgroupname(grp)):
+ # nontarget_cats.add(map_groupid_categoryid[group])
+ # print(" {0} ({1})".format(getgroupname(group), getcatname(map_groupid_categoryid[group])))
+ #print(" Categories:")
+ #for cat in sorted(nontarget_cats, key=lambda cat: getcatname(cat)):
+ # print(" {0}".format(getcatname(cat)))
+
+else:
+ print("Affected items")
+ targetitems = typeswithattr
+ targetitems_groups = set()
+ targetitems_cats = set()
+ print(" Assumed set of items:")
+ for item in sorted(targetitems, key=lambda item: gettypename(item)):
+ targetitems_groups.add(map_typeid_groupid[item])
+ print(" {0} ({1})".format(gettypename(item), getgroupname(map_typeid_groupid[item])))
+ print(" Groups:")
+ for group in sorted(targetitems_groups, key=lambda grp: getgroupname(grp)):
+ targetitems_cats.add(map_groupid_categoryid[group])
+ print(" {0} ({1})".format(getgroupname(group), getcatname(map_groupid_categoryid[group])))
+ print(" Categories:")
+ for cat in sorted(targetitems_cats, key=lambda cat: getcatname(cat)):
+ print(" {0}".format(getcatname(cat)))
diff --git a/staticdata/README.txt b/staticdata/README.txt
new file mode 100755
index 000000000..81f4f7723
--- /dev/null
+++ b/staticdata/README.txt
@@ -0,0 +1,25 @@
+Generating a new sqlite dump HOWTO
+
+You'll need pyfa itself (git://dev.evefit.org/pyfa.git)
+as well as phobos (git://dev.evefit.org/phobos.git)
+
+Phobos can dump the whole of the eve cache to json, after installing it (=python setup.py install) just do python dumpToJson.py -e /path/to/eve -c /path/to/eve/cache -s serverName -o /output/folder
+
+Arguments explained: -e and -c should be pretty self explanitory, they're the path to the eve install and the eve cache respectivly
+
+-s is the serverName, its used to figure out which subfolder in the machonet folder we're intrested in. (possible values: tranquility, singularity, duality).
+This is passed directly to reverence which keeps a serverName to IP address mapping. You could probably add more servers with their IPs in the reverence sourcecode (cache.py file, around like 150 in the CacheMgr class) if you need another one.
+
+-o is the output folder to dump all json files to, it should already exist or you'll get errors.
+
+
+
+After thats done, you'll have all json files you need, and you can use a script within pyfa to generate a dump from that.
+
+After you checked out pyfa, don't forget to update submodules (git submodule update --init).
+
+and then browse to eos/utils/scripts/jsonToSql.py, which can generate the sqlite dump pyfa needs.
+
+python jsonToSql.py -d eve.db -j /output/folder
+
+Once thats done, you should have a nice little sqlite database, you can replace the one in the staticdata folder with yours and it should run right away.
\ No newline at end of file
diff --git a/staticdata/eve.db b/staticdata/eve.db
new file mode 100644
index 000000000..bcbda2cf3
Binary files /dev/null and b/staticdata/eve.db differ
diff --git a/staticdata/icons/icon01_01.png b/staticdata/icons/icon01_01.png
new file mode 100644
index 000000000..d1c662dd8
Binary files /dev/null and b/staticdata/icons/icon01_01.png differ
diff --git a/staticdata/icons/icon01_02.png b/staticdata/icons/icon01_02.png
new file mode 100644
index 000000000..a1cbfb434
Binary files /dev/null and b/staticdata/icons/icon01_02.png differ
diff --git a/staticdata/icons/icon01_03.png b/staticdata/icons/icon01_03.png
new file mode 100644
index 000000000..c5fd9a760
Binary files /dev/null and b/staticdata/icons/icon01_03.png differ
diff --git a/staticdata/icons/icon01_04.png b/staticdata/icons/icon01_04.png
new file mode 100644
index 000000000..23f2a5d52
Binary files /dev/null and b/staticdata/icons/icon01_04.png differ
diff --git a/staticdata/icons/icon01_05.png b/staticdata/icons/icon01_05.png
new file mode 100644
index 000000000..6a255bef5
Binary files /dev/null and b/staticdata/icons/icon01_05.png differ
diff --git a/staticdata/icons/icon01_06.png b/staticdata/icons/icon01_06.png
new file mode 100644
index 000000000..8f9360a03
Binary files /dev/null and b/staticdata/icons/icon01_06.png differ
diff --git a/staticdata/icons/icon01_07.png b/staticdata/icons/icon01_07.png
new file mode 100644
index 000000000..c727a4721
Binary files /dev/null and b/staticdata/icons/icon01_07.png differ
diff --git a/staticdata/icons/icon01_08.png b/staticdata/icons/icon01_08.png
new file mode 100644
index 000000000..542034e4d
Binary files /dev/null and b/staticdata/icons/icon01_08.png differ
diff --git a/staticdata/icons/icon01_09.png b/staticdata/icons/icon01_09.png
new file mode 100644
index 000000000..2c36e95ee
Binary files /dev/null and b/staticdata/icons/icon01_09.png differ
diff --git a/staticdata/icons/icon01_10.png b/staticdata/icons/icon01_10.png
new file mode 100644
index 000000000..76684f794
Binary files /dev/null and b/staticdata/icons/icon01_10.png differ
diff --git a/staticdata/icons/icon01_11.png b/staticdata/icons/icon01_11.png
new file mode 100644
index 000000000..034296d86
Binary files /dev/null and b/staticdata/icons/icon01_11.png differ
diff --git a/staticdata/icons/icon01_13.png b/staticdata/icons/icon01_13.png
new file mode 100644
index 000000000..3b2fafa64
Binary files /dev/null and b/staticdata/icons/icon01_13.png differ
diff --git a/staticdata/icons/icon01_15.png b/staticdata/icons/icon01_15.png
new file mode 100644
index 000000000..9a1679018
Binary files /dev/null and b/staticdata/icons/icon01_15.png differ
diff --git a/staticdata/icons/icon01_16.png b/staticdata/icons/icon01_16.png
new file mode 100644
index 000000000..8cf088c96
Binary files /dev/null and b/staticdata/icons/icon01_16.png differ
diff --git a/staticdata/icons/icon02_02.png b/staticdata/icons/icon02_02.png
new file mode 100644
index 000000000..b0b7c698a
Binary files /dev/null and b/staticdata/icons/icon02_02.png differ
diff --git a/staticdata/icons/icon02_03.png b/staticdata/icons/icon02_03.png
new file mode 100644
index 000000000..ed0bc5f5f
Binary files /dev/null and b/staticdata/icons/icon02_03.png differ
diff --git a/staticdata/icons/icon02_04.png b/staticdata/icons/icon02_04.png
new file mode 100644
index 000000000..0b96f8ce4
Binary files /dev/null and b/staticdata/icons/icon02_04.png differ
diff --git a/staticdata/icons/icon02_05.png b/staticdata/icons/icon02_05.png
new file mode 100644
index 000000000..42d9fb79c
Binary files /dev/null and b/staticdata/icons/icon02_05.png differ
diff --git a/staticdata/icons/icon02_07.png b/staticdata/icons/icon02_07.png
new file mode 100644
index 000000000..1104d3de3
Binary files /dev/null and b/staticdata/icons/icon02_07.png differ
diff --git a/staticdata/icons/icon02_09.png b/staticdata/icons/icon02_09.png
new file mode 100644
index 000000000..914987c78
Binary files /dev/null and b/staticdata/icons/icon02_09.png differ
diff --git a/staticdata/icons/icon02_10.png b/staticdata/icons/icon02_10.png
new file mode 100644
index 000000000..52540b38f
Binary files /dev/null and b/staticdata/icons/icon02_10.png differ
diff --git a/staticdata/icons/icon02_11.png b/staticdata/icons/icon02_11.png
new file mode 100644
index 000000000..a10d9886d
Binary files /dev/null and b/staticdata/icons/icon02_11.png differ
diff --git a/staticdata/icons/icon02_12.png b/staticdata/icons/icon02_12.png
new file mode 100644
index 000000000..0d73557d0
Binary files /dev/null and b/staticdata/icons/icon02_12.png differ
diff --git a/staticdata/icons/icon02_14.png b/staticdata/icons/icon02_14.png
new file mode 100644
index 000000000..3af838c46
Binary files /dev/null and b/staticdata/icons/icon02_14.png differ
diff --git a/staticdata/icons/icon02_16.png b/staticdata/icons/icon02_16.png
new file mode 100644
index 000000000..aa04ba14d
Binary files /dev/null and b/staticdata/icons/icon02_16.png differ
diff --git a/staticdata/icons/icon03_01.png b/staticdata/icons/icon03_01.png
new file mode 100644
index 000000000..8134ca9d1
Binary files /dev/null and b/staticdata/icons/icon03_01.png differ
diff --git a/staticdata/icons/icon03_02.png b/staticdata/icons/icon03_02.png
new file mode 100644
index 000000000..3aaf38630
Binary files /dev/null and b/staticdata/icons/icon03_02.png differ
diff --git a/staticdata/icons/icon03_04.png b/staticdata/icons/icon03_04.png
new file mode 100644
index 000000000..b4e240577
Binary files /dev/null and b/staticdata/icons/icon03_04.png differ
diff --git a/staticdata/icons/icon03_05.png b/staticdata/icons/icon03_05.png
new file mode 100644
index 000000000..c963395ef
Binary files /dev/null and b/staticdata/icons/icon03_05.png differ
diff --git a/staticdata/icons/icon03_06.png b/staticdata/icons/icon03_06.png
new file mode 100644
index 000000000..5e906eb4c
Binary files /dev/null and b/staticdata/icons/icon03_06.png differ
diff --git a/staticdata/icons/icon03_08.png b/staticdata/icons/icon03_08.png
new file mode 100644
index 000000000..16993d0d1
Binary files /dev/null and b/staticdata/icons/icon03_08.png differ
diff --git a/staticdata/icons/icon03_09.png b/staticdata/icons/icon03_09.png
new file mode 100644
index 000000000..57fadda30
Binary files /dev/null and b/staticdata/icons/icon03_09.png differ
diff --git a/staticdata/icons/icon03_10.png b/staticdata/icons/icon03_10.png
new file mode 100644
index 000000000..71cc52c0c
Binary files /dev/null and b/staticdata/icons/icon03_10.png differ
diff --git a/staticdata/icons/icon03_11.png b/staticdata/icons/icon03_11.png
new file mode 100644
index 000000000..e4f940101
Binary files /dev/null and b/staticdata/icons/icon03_11.png differ
diff --git a/staticdata/icons/icon03_12.png b/staticdata/icons/icon03_12.png
new file mode 100644
index 000000000..4969e8ba9
Binary files /dev/null and b/staticdata/icons/icon03_12.png differ
diff --git a/staticdata/icons/icon03_13.png b/staticdata/icons/icon03_13.png
new file mode 100644
index 000000000..2906b9214
Binary files /dev/null and b/staticdata/icons/icon03_13.png differ
diff --git a/staticdata/icons/icon04_01.png b/staticdata/icons/icon04_01.png
new file mode 100644
index 000000000..0fafb8989
Binary files /dev/null and b/staticdata/icons/icon04_01.png differ
diff --git a/staticdata/icons/icon04_09.png b/staticdata/icons/icon04_09.png
new file mode 100644
index 000000000..ac8aa04df
Binary files /dev/null and b/staticdata/icons/icon04_09.png differ
diff --git a/staticdata/icons/icon04_10.png b/staticdata/icons/icon04_10.png
new file mode 100644
index 000000000..d5c9b5824
Binary files /dev/null and b/staticdata/icons/icon04_10.png differ
diff --git a/staticdata/icons/icon04_11.png b/staticdata/icons/icon04_11.png
new file mode 100644
index 000000000..27f5c82ec
Binary files /dev/null and b/staticdata/icons/icon04_11.png differ
diff --git a/staticdata/icons/icon04_12.png b/staticdata/icons/icon04_12.png
new file mode 100644
index 000000000..afbd5f153
Binary files /dev/null and b/staticdata/icons/icon04_12.png differ
diff --git a/staticdata/icons/icon04_13.png b/staticdata/icons/icon04_13.png
new file mode 100644
index 000000000..69da0982f
Binary files /dev/null and b/staticdata/icons/icon04_13.png differ
diff --git a/staticdata/icons/icon05_01.png b/staticdata/icons/icon05_01.png
new file mode 100644
index 000000000..a9135166e
Binary files /dev/null and b/staticdata/icons/icon05_01.png differ
diff --git a/staticdata/icons/icon05_02.png b/staticdata/icons/icon05_02.png
new file mode 100644
index 000000000..b9288a072
Binary files /dev/null and b/staticdata/icons/icon05_02.png differ
diff --git a/staticdata/icons/icon05_07.png b/staticdata/icons/icon05_07.png
new file mode 100644
index 000000000..b2fb2c078
Binary files /dev/null and b/staticdata/icons/icon05_07.png differ
diff --git a/staticdata/icons/icon05_11.png b/staticdata/icons/icon05_11.png
new file mode 100644
index 000000000..61eb206dd
Binary files /dev/null and b/staticdata/icons/icon05_11.png differ
diff --git a/staticdata/icons/icon05_12.png b/staticdata/icons/icon05_12.png
new file mode 100644
index 000000000..fe9b587f2
Binary files /dev/null and b/staticdata/icons/icon05_12.png differ
diff --git a/staticdata/icons/icon05_14.png b/staticdata/icons/icon05_14.png
new file mode 100644
index 000000000..a5da24ec7
Binary files /dev/null and b/staticdata/icons/icon05_14.png differ
diff --git a/staticdata/icons/icon07_15.png b/staticdata/icons/icon07_15.png
new file mode 100644
index 000000000..88132733c
Binary files /dev/null and b/staticdata/icons/icon07_15.png differ
diff --git a/staticdata/icons/icon08_01.png b/staticdata/icons/icon08_01.png
new file mode 100644
index 000000000..c4d87b2fe
Binary files /dev/null and b/staticdata/icons/icon08_01.png differ
diff --git a/staticdata/icons/icon08_02.png b/staticdata/icons/icon08_02.png
new file mode 100644
index 000000000..3233a2c07
Binary files /dev/null and b/staticdata/icons/icon08_02.png differ
diff --git a/staticdata/icons/icon08_03.png b/staticdata/icons/icon08_03.png
new file mode 100644
index 000000000..4b0a084b0
Binary files /dev/null and b/staticdata/icons/icon08_03.png differ
diff --git a/staticdata/icons/icon08_04.png b/staticdata/icons/icon08_04.png
new file mode 100644
index 000000000..87ee75669
Binary files /dev/null and b/staticdata/icons/icon08_04.png differ
diff --git a/staticdata/icons/icon08_05.png b/staticdata/icons/icon08_05.png
new file mode 100644
index 000000000..0a0f2a405
Binary files /dev/null and b/staticdata/icons/icon08_05.png differ
diff --git a/staticdata/icons/icon08_06.png b/staticdata/icons/icon08_06.png
new file mode 100644
index 000000000..b8f8c701c
Binary files /dev/null and b/staticdata/icons/icon08_06.png differ
diff --git a/staticdata/icons/icon08_07.png b/staticdata/icons/icon08_07.png
new file mode 100644
index 000000000..1e3a461e1
Binary files /dev/null and b/staticdata/icons/icon08_07.png differ
diff --git a/staticdata/icons/icon08_08.png b/staticdata/icons/icon08_08.png
new file mode 100644
index 000000000..c8c41d6d5
Binary files /dev/null and b/staticdata/icons/icon08_08.png differ
diff --git a/staticdata/icons/icon08_09.png b/staticdata/icons/icon08_09.png
new file mode 100644
index 000000000..a268b24aa
Binary files /dev/null and b/staticdata/icons/icon08_09.png differ
diff --git a/staticdata/icons/icon08_10.png b/staticdata/icons/icon08_10.png
new file mode 100644
index 000000000..236534b86
Binary files /dev/null and b/staticdata/icons/icon08_10.png differ
diff --git a/staticdata/icons/icon08_11.png b/staticdata/icons/icon08_11.png
new file mode 100644
index 000000000..173fe309c
Binary files /dev/null and b/staticdata/icons/icon08_11.png differ
diff --git a/staticdata/icons/icon08_12.png b/staticdata/icons/icon08_12.png
new file mode 100644
index 000000000..e0fa22d98
Binary files /dev/null and b/staticdata/icons/icon08_12.png differ
diff --git a/staticdata/icons/icon08_16.png b/staticdata/icons/icon08_16.png
new file mode 100644
index 000000000..1da935814
Binary files /dev/null and b/staticdata/icons/icon08_16.png differ
diff --git a/staticdata/icons/icon09_05.png b/staticdata/icons/icon09_05.png
new file mode 100644
index 000000000..5c3b0133b
Binary files /dev/null and b/staticdata/icons/icon09_05.png differ
diff --git a/staticdata/icons/icon09_16.png b/staticdata/icons/icon09_16.png
new file mode 100644
index 000000000..95c167cc4
Binary files /dev/null and b/staticdata/icons/icon09_16.png differ
diff --git a/staticdata/icons/icon105_46.png b/staticdata/icons/icon105_46.png
new file mode 100644
index 000000000..2f634f0e5
Binary files /dev/null and b/staticdata/icons/icon105_46.png differ
diff --git a/staticdata/icons/icon105_47.png b/staticdata/icons/icon105_47.png
new file mode 100644
index 000000000..6523de8d7
Binary files /dev/null and b/staticdata/icons/icon105_47.png differ
diff --git a/staticdata/icons/icon105_48.png b/staticdata/icons/icon105_48.png
new file mode 100644
index 000000000..eb47056e9
Binary files /dev/null and b/staticdata/icons/icon105_48.png differ
diff --git a/staticdata/icons/icon105_49.png b/staticdata/icons/icon105_49.png
new file mode 100644
index 000000000..604151724
Binary files /dev/null and b/staticdata/icons/icon105_49.png differ
diff --git a/staticdata/icons/icon10_15.png b/staticdata/icons/icon10_15.png
new file mode 100644
index 000000000..055fb8163
Binary files /dev/null and b/staticdata/icons/icon10_15.png differ
diff --git a/staticdata/icons/icon11_04.png b/staticdata/icons/icon11_04.png
new file mode 100644
index 000000000..94914e31d
Binary files /dev/null and b/staticdata/icons/icon11_04.png differ
diff --git a/staticdata/icons/icon11_09.png b/staticdata/icons/icon11_09.png
new file mode 100644
index 000000000..0556022a7
Binary files /dev/null and b/staticdata/icons/icon11_09.png differ
diff --git a/staticdata/icons/icon11_14.png b/staticdata/icons/icon11_14.png
new file mode 100644
index 000000000..cf0e7bf58
Binary files /dev/null and b/staticdata/icons/icon11_14.png differ
diff --git a/staticdata/icons/icon11_16.png b/staticdata/icons/icon11_16.png
new file mode 100644
index 000000000..61f11c187
Binary files /dev/null and b/staticdata/icons/icon11_16.png differ
diff --git a/staticdata/icons/icon12_04.png b/staticdata/icons/icon12_04.png
new file mode 100644
index 000000000..7c173a870
Binary files /dev/null and b/staticdata/icons/icon12_04.png differ
diff --git a/staticdata/icons/icon12_06.png b/staticdata/icons/icon12_06.png
new file mode 100644
index 000000000..b8147e462
Binary files /dev/null and b/staticdata/icons/icon12_06.png differ
diff --git a/staticdata/icons/icon12_07.png b/staticdata/icons/icon12_07.png
new file mode 100644
index 000000000..7ba9bb372
Binary files /dev/null and b/staticdata/icons/icon12_07.png differ
diff --git a/staticdata/icons/icon12_08.png b/staticdata/icons/icon12_08.png
new file mode 100644
index 000000000..d252387d7
Binary files /dev/null and b/staticdata/icons/icon12_08.png differ
diff --git a/staticdata/icons/icon12_09.png b/staticdata/icons/icon12_09.png
new file mode 100644
index 000000000..6de8e7b61
Binary files /dev/null and b/staticdata/icons/icon12_09.png differ
diff --git a/staticdata/icons/icon12_10.png b/staticdata/icons/icon12_10.png
new file mode 100644
index 000000000..e2d5fd138
Binary files /dev/null and b/staticdata/icons/icon12_10.png differ
diff --git a/staticdata/icons/icon12_11.png b/staticdata/icons/icon12_11.png
new file mode 100644
index 000000000..bbcb3eb88
Binary files /dev/null and b/staticdata/icons/icon12_11.png differ
diff --git a/staticdata/icons/icon12_12.png b/staticdata/icons/icon12_12.png
new file mode 100644
index 000000000..7917f4b32
Binary files /dev/null and b/staticdata/icons/icon12_12.png differ
diff --git a/staticdata/icons/icon12_13.png b/staticdata/icons/icon12_13.png
new file mode 100644
index 000000000..4a550b7f8
Binary files /dev/null and b/staticdata/icons/icon12_13.png differ
diff --git a/staticdata/icons/icon12_14.png b/staticdata/icons/icon12_14.png
new file mode 100644
index 000000000..8418f8330
Binary files /dev/null and b/staticdata/icons/icon12_14.png differ
diff --git a/staticdata/icons/icon12_15.png b/staticdata/icons/icon12_15.png
new file mode 100644
index 000000000..6e70ec492
Binary files /dev/null and b/staticdata/icons/icon12_15.png differ
diff --git a/staticdata/icons/icon12_16.png b/staticdata/icons/icon12_16.png
new file mode 100644
index 000000000..761b3c93f
Binary files /dev/null and b/staticdata/icons/icon12_16.png differ
diff --git a/staticdata/icons/icon13_01.png b/staticdata/icons/icon13_01.png
new file mode 100644
index 000000000..38312d43b
Binary files /dev/null and b/staticdata/icons/icon13_01.png differ
diff --git a/staticdata/icons/icon13_02.png b/staticdata/icons/icon13_02.png
new file mode 100644
index 000000000..001f6f0f0
Binary files /dev/null and b/staticdata/icons/icon13_02.png differ
diff --git a/staticdata/icons/icon13_03.png b/staticdata/icons/icon13_03.png
new file mode 100644
index 000000000..e0f44dd1e
Binary files /dev/null and b/staticdata/icons/icon13_03.png differ
diff --git a/staticdata/icons/icon13_04.png b/staticdata/icons/icon13_04.png
new file mode 100644
index 000000000..f3b032d66
Binary files /dev/null and b/staticdata/icons/icon13_04.png differ
diff --git a/staticdata/icons/icon13_05.png b/staticdata/icons/icon13_05.png
new file mode 100644
index 000000000..359a91bb4
Binary files /dev/null and b/staticdata/icons/icon13_05.png differ
diff --git a/staticdata/icons/icon13_06.png b/staticdata/icons/icon13_06.png
new file mode 100644
index 000000000..47df65cfa
Binary files /dev/null and b/staticdata/icons/icon13_06.png differ
diff --git a/staticdata/icons/icon13_07.png b/staticdata/icons/icon13_07.png
new file mode 100644
index 000000000..eeb1948d2
Binary files /dev/null and b/staticdata/icons/icon13_07.png differ
diff --git a/staticdata/icons/icon13_08.png b/staticdata/icons/icon13_08.png
new file mode 100644
index 000000000..70f0dcb6c
Binary files /dev/null and b/staticdata/icons/icon13_08.png differ
diff --git a/staticdata/icons/icon13_09.png b/staticdata/icons/icon13_09.png
new file mode 100644
index 000000000..9a007920d
Binary files /dev/null and b/staticdata/icons/icon13_09.png differ
diff --git a/staticdata/icons/icon13_10.png b/staticdata/icons/icon13_10.png
new file mode 100644
index 000000000..f1e6c1d32
Binary files /dev/null and b/staticdata/icons/icon13_10.png differ
diff --git a/staticdata/icons/icon13_11.png b/staticdata/icons/icon13_11.png
new file mode 100644
index 000000000..695c0f776
Binary files /dev/null and b/staticdata/icons/icon13_11.png differ
diff --git a/staticdata/icons/icon13_12.png b/staticdata/icons/icon13_12.png
new file mode 100644
index 000000000..ed992360d
Binary files /dev/null and b/staticdata/icons/icon13_12.png differ
diff --git a/staticdata/icons/icon13_13.png b/staticdata/icons/icon13_13.png
new file mode 100644
index 000000000..0baf55159
Binary files /dev/null and b/staticdata/icons/icon13_13.png differ
diff --git a/staticdata/icons/icon13_14.png b/staticdata/icons/icon13_14.png
new file mode 100644
index 000000000..7d166f170
Binary files /dev/null and b/staticdata/icons/icon13_14.png differ
diff --git a/staticdata/icons/icon13_15.png b/staticdata/icons/icon13_15.png
new file mode 100644
index 000000000..418267713
Binary files /dev/null and b/staticdata/icons/icon13_15.png differ
diff --git a/staticdata/icons/icon13_16.png b/staticdata/icons/icon13_16.png
new file mode 100644
index 000000000..fad36cc67
Binary files /dev/null and b/staticdata/icons/icon13_16.png differ
diff --git a/staticdata/icons/icon14_01.png b/staticdata/icons/icon14_01.png
new file mode 100644
index 000000000..30ff0fec8
Binary files /dev/null and b/staticdata/icons/icon14_01.png differ
diff --git a/staticdata/icons/icon14_02.png b/staticdata/icons/icon14_02.png
new file mode 100644
index 000000000..c68a0959d
Binary files /dev/null and b/staticdata/icons/icon14_02.png differ
diff --git a/staticdata/icons/icon14_03.png b/staticdata/icons/icon14_03.png
new file mode 100644
index 000000000..6a22730a4
Binary files /dev/null and b/staticdata/icons/icon14_03.png differ
diff --git a/staticdata/icons/icon14_04.png b/staticdata/icons/icon14_04.png
new file mode 100644
index 000000000..c6fa31870
Binary files /dev/null and b/staticdata/icons/icon14_04.png differ
diff --git a/staticdata/icons/icon14_05.png b/staticdata/icons/icon14_05.png
new file mode 100644
index 000000000..2e9938c09
Binary files /dev/null and b/staticdata/icons/icon14_05.png differ
diff --git a/staticdata/icons/icon14_06.png b/staticdata/icons/icon14_06.png
new file mode 100644
index 000000000..625f61e17
Binary files /dev/null and b/staticdata/icons/icon14_06.png differ
diff --git a/staticdata/icons/icon14_07.png b/staticdata/icons/icon14_07.png
new file mode 100644
index 000000000..0c8f7ae16
Binary files /dev/null and b/staticdata/icons/icon14_07.png differ
diff --git a/staticdata/icons/icon14_08.png b/staticdata/icons/icon14_08.png
new file mode 100644
index 000000000..0b37b9605
Binary files /dev/null and b/staticdata/icons/icon14_08.png differ
diff --git a/staticdata/icons/icon14_09.png b/staticdata/icons/icon14_09.png
new file mode 100644
index 000000000..a6a7990b0
Binary files /dev/null and b/staticdata/icons/icon14_09.png differ
diff --git a/staticdata/icons/icon14_10.png b/staticdata/icons/icon14_10.png
new file mode 100644
index 000000000..307c8cff0
Binary files /dev/null and b/staticdata/icons/icon14_10.png differ
diff --git a/staticdata/icons/icon14_11.png b/staticdata/icons/icon14_11.png
new file mode 100644
index 000000000..bf58f5edb
Binary files /dev/null and b/staticdata/icons/icon14_11.png differ
diff --git a/staticdata/icons/icon14_12.png b/staticdata/icons/icon14_12.png
new file mode 100644
index 000000000..08ae2f9b7
Binary files /dev/null and b/staticdata/icons/icon14_12.png differ
diff --git a/staticdata/icons/icon14_13.png b/staticdata/icons/icon14_13.png
new file mode 100644
index 000000000..305a70da7
Binary files /dev/null and b/staticdata/icons/icon14_13.png differ
diff --git a/staticdata/icons/icon14_14.png b/staticdata/icons/icon14_14.png
new file mode 100644
index 000000000..4f1d0df82
Binary files /dev/null and b/staticdata/icons/icon14_14.png differ
diff --git a/staticdata/icons/icon14_15.png b/staticdata/icons/icon14_15.png
new file mode 100644
index 000000000..d1a3f2533
Binary files /dev/null and b/staticdata/icons/icon14_15.png differ
diff --git a/staticdata/icons/icon14_16.png b/staticdata/icons/icon14_16.png
new file mode 100644
index 000000000..bae8b925a
Binary files /dev/null and b/staticdata/icons/icon14_16.png differ
diff --git a/staticdata/icons/icon15_01.png b/staticdata/icons/icon15_01.png
new file mode 100644
index 000000000..d8977ea95
Binary files /dev/null and b/staticdata/icons/icon15_01.png differ
diff --git a/staticdata/icons/icon15_02.png b/staticdata/icons/icon15_02.png
new file mode 100644
index 000000000..3fc92b799
Binary files /dev/null and b/staticdata/icons/icon15_02.png differ
diff --git a/staticdata/icons/icon15_03.png b/staticdata/icons/icon15_03.png
new file mode 100644
index 000000000..59faab05c
Binary files /dev/null and b/staticdata/icons/icon15_03.png differ
diff --git a/staticdata/icons/icon15_04.png b/staticdata/icons/icon15_04.png
new file mode 100644
index 000000000..5e5b02d9e
Binary files /dev/null and b/staticdata/icons/icon15_04.png differ
diff --git a/staticdata/icons/icon15_05.png b/staticdata/icons/icon15_05.png
new file mode 100644
index 000000000..5093d0f1a
Binary files /dev/null and b/staticdata/icons/icon15_05.png differ
diff --git a/staticdata/icons/icon15_06.png b/staticdata/icons/icon15_06.png
new file mode 100644
index 000000000..4a9111276
Binary files /dev/null and b/staticdata/icons/icon15_06.png differ
diff --git a/staticdata/icons/icon15_07.png b/staticdata/icons/icon15_07.png
new file mode 100644
index 000000000..792d8af8e
Binary files /dev/null and b/staticdata/icons/icon15_07.png differ
diff --git a/staticdata/icons/icon15_08.png b/staticdata/icons/icon15_08.png
new file mode 100644
index 000000000..63700d5b5
Binary files /dev/null and b/staticdata/icons/icon15_08.png differ
diff --git a/staticdata/icons/icon15_09.png b/staticdata/icons/icon15_09.png
new file mode 100644
index 000000000..117843724
Binary files /dev/null and b/staticdata/icons/icon15_09.png differ
diff --git a/staticdata/icons/icon15_10.png b/staticdata/icons/icon15_10.png
new file mode 100644
index 000000000..8aca1d0ae
Binary files /dev/null and b/staticdata/icons/icon15_10.png differ
diff --git a/staticdata/icons/icon15_11.png b/staticdata/icons/icon15_11.png
new file mode 100644
index 000000000..9c6888847
Binary files /dev/null and b/staticdata/icons/icon15_11.png differ
diff --git a/staticdata/icons/icon15_12.png b/staticdata/icons/icon15_12.png
new file mode 100644
index 000000000..b67b8f47c
Binary files /dev/null and b/staticdata/icons/icon15_12.png differ
diff --git a/staticdata/icons/icon15_13.png b/staticdata/icons/icon15_13.png
new file mode 100644
index 000000000..b234baed7
Binary files /dev/null and b/staticdata/icons/icon15_13.png differ
diff --git a/staticdata/icons/icon15_14.png b/staticdata/icons/icon15_14.png
new file mode 100644
index 000000000..68bf8bc77
Binary files /dev/null and b/staticdata/icons/icon15_14.png differ
diff --git a/staticdata/icons/icon15_15.png b/staticdata/icons/icon15_15.png
new file mode 100644
index 000000000..cdbbba081
Binary files /dev/null and b/staticdata/icons/icon15_15.png differ
diff --git a/staticdata/icons/icon15_16.png b/staticdata/icons/icon15_16.png
new file mode 100644
index 000000000..2fd563c81
Binary files /dev/null and b/staticdata/icons/icon15_16.png differ
diff --git a/staticdata/icons/icon16_01.png b/staticdata/icons/icon16_01.png
new file mode 100644
index 000000000..2585244cb
Binary files /dev/null and b/staticdata/icons/icon16_01.png differ
diff --git a/staticdata/icons/icon16_02.png b/staticdata/icons/icon16_02.png
new file mode 100644
index 000000000..9b0bbf15c
Binary files /dev/null and b/staticdata/icons/icon16_02.png differ
diff --git a/staticdata/icons/icon16_03.png b/staticdata/icons/icon16_03.png
new file mode 100644
index 000000000..4325c116b
Binary files /dev/null and b/staticdata/icons/icon16_03.png differ
diff --git a/staticdata/icons/icon16_04.png b/staticdata/icons/icon16_04.png
new file mode 100644
index 000000000..92ac84db3
Binary files /dev/null and b/staticdata/icons/icon16_04.png differ
diff --git a/staticdata/icons/icon16_05.png b/staticdata/icons/icon16_05.png
new file mode 100644
index 000000000..bdb009215
Binary files /dev/null and b/staticdata/icons/icon16_05.png differ
diff --git a/staticdata/icons/icon16_06.png b/staticdata/icons/icon16_06.png
new file mode 100644
index 000000000..2dededd2a
Binary files /dev/null and b/staticdata/icons/icon16_06.png differ
diff --git a/staticdata/icons/icon16_07.png b/staticdata/icons/icon16_07.png
new file mode 100644
index 000000000..9a2776f96
Binary files /dev/null and b/staticdata/icons/icon16_07.png differ
diff --git a/staticdata/icons/icon16_08.png b/staticdata/icons/icon16_08.png
new file mode 100644
index 000000000..186fc24e4
Binary files /dev/null and b/staticdata/icons/icon16_08.png differ
diff --git a/staticdata/icons/icon16_09.png b/staticdata/icons/icon16_09.png
new file mode 100644
index 000000000..5dec100ea
Binary files /dev/null and b/staticdata/icons/icon16_09.png differ
diff --git a/staticdata/icons/icon16_10.png b/staticdata/icons/icon16_10.png
new file mode 100644
index 000000000..75acc335d
Binary files /dev/null and b/staticdata/icons/icon16_10.png differ
diff --git a/staticdata/icons/icon16_11.png b/staticdata/icons/icon16_11.png
new file mode 100644
index 000000000..868068883
Binary files /dev/null and b/staticdata/icons/icon16_11.png differ
diff --git a/staticdata/icons/icon16_12.png b/staticdata/icons/icon16_12.png
new file mode 100644
index 000000000..e8ae302be
Binary files /dev/null and b/staticdata/icons/icon16_12.png differ
diff --git a/staticdata/icons/icon16_13.png b/staticdata/icons/icon16_13.png
new file mode 100644
index 000000000..a8de23b9b
Binary files /dev/null and b/staticdata/icons/icon16_13.png differ
diff --git a/staticdata/icons/icon16_14.png b/staticdata/icons/icon16_14.png
new file mode 100644
index 000000000..29f476ddc
Binary files /dev/null and b/staticdata/icons/icon16_14.png differ
diff --git a/staticdata/icons/icon16_15.png b/staticdata/icons/icon16_15.png
new file mode 100644
index 000000000..3a146b640
Binary files /dev/null and b/staticdata/icons/icon16_15.png differ
diff --git a/staticdata/icons/icon16_16.png b/staticdata/icons/icon16_16.png
new file mode 100644
index 000000000..b7bbab670
Binary files /dev/null and b/staticdata/icons/icon16_16.png differ
diff --git a/staticdata/icons/icon20_01.png b/staticdata/icons/icon20_01.png
new file mode 100644
index 000000000..5f9b793f7
Binary files /dev/null and b/staticdata/icons/icon20_01.png differ
diff --git a/staticdata/icons/icon20_02.png b/staticdata/icons/icon20_02.png
new file mode 100644
index 000000000..4c8cdd737
Binary files /dev/null and b/staticdata/icons/icon20_02.png differ
diff --git a/staticdata/icons/icon20_03.png b/staticdata/icons/icon20_03.png
new file mode 100644
index 000000000..1c1657b99
Binary files /dev/null and b/staticdata/icons/icon20_03.png differ
diff --git a/staticdata/icons/icon20_04.png b/staticdata/icons/icon20_04.png
new file mode 100644
index 000000000..615088a21
Binary files /dev/null and b/staticdata/icons/icon20_04.png differ
diff --git a/staticdata/icons/icon20_05.png b/staticdata/icons/icon20_05.png
new file mode 100644
index 000000000..bcd4fad17
Binary files /dev/null and b/staticdata/icons/icon20_05.png differ
diff --git a/staticdata/icons/icon20_06.png b/staticdata/icons/icon20_06.png
new file mode 100644
index 000000000..afc292d9b
Binary files /dev/null and b/staticdata/icons/icon20_06.png differ
diff --git a/staticdata/icons/icon20_07.png b/staticdata/icons/icon20_07.png
new file mode 100644
index 000000000..0b7e9c3af
Binary files /dev/null and b/staticdata/icons/icon20_07.png differ
diff --git a/staticdata/icons/icon20_08.png b/staticdata/icons/icon20_08.png
new file mode 100644
index 000000000..6e8cca047
Binary files /dev/null and b/staticdata/icons/icon20_08.png differ
diff --git a/staticdata/icons/icon20_09.png b/staticdata/icons/icon20_09.png
new file mode 100644
index 000000000..fbfbfd49a
Binary files /dev/null and b/staticdata/icons/icon20_09.png differ
diff --git a/staticdata/icons/icon20_10.png b/staticdata/icons/icon20_10.png
new file mode 100644
index 000000000..5a2944789
Binary files /dev/null and b/staticdata/icons/icon20_10.png differ
diff --git a/staticdata/icons/icon20_11.png b/staticdata/icons/icon20_11.png
new file mode 100644
index 000000000..150227958
Binary files /dev/null and b/staticdata/icons/icon20_11.png differ
diff --git a/staticdata/icons/icon20_12.png b/staticdata/icons/icon20_12.png
new file mode 100644
index 000000000..55a90e8c3
Binary files /dev/null and b/staticdata/icons/icon20_12.png differ
diff --git a/staticdata/icons/icon20_13.png b/staticdata/icons/icon20_13.png
new file mode 100644
index 000000000..1ccc842d3
Binary files /dev/null and b/staticdata/icons/icon20_13.png differ
diff --git a/staticdata/icons/icon20_14.png b/staticdata/icons/icon20_14.png
new file mode 100644
index 000000000..8710f15ae
Binary files /dev/null and b/staticdata/icons/icon20_14.png differ
diff --git a/staticdata/icons/icon20_15.png b/staticdata/icons/icon20_15.png
new file mode 100644
index 000000000..9c813540d
Binary files /dev/null and b/staticdata/icons/icon20_15.png differ
diff --git a/staticdata/icons/icon20_16.png b/staticdata/icons/icon20_16.png
new file mode 100644
index 000000000..9265e631f
Binary files /dev/null and b/staticdata/icons/icon20_16.png differ
diff --git a/staticdata/icons/icon21_01.png b/staticdata/icons/icon21_01.png
new file mode 100644
index 000000000..19bc005de
Binary files /dev/null and b/staticdata/icons/icon21_01.png differ
diff --git a/staticdata/icons/icon21_02.png b/staticdata/icons/icon21_02.png
new file mode 100644
index 000000000..914f7520b
Binary files /dev/null and b/staticdata/icons/icon21_02.png differ
diff --git a/staticdata/icons/icon21_03.png b/staticdata/icons/icon21_03.png
new file mode 100644
index 000000000..905a70739
Binary files /dev/null and b/staticdata/icons/icon21_03.png differ
diff --git a/staticdata/icons/icon21_05.png b/staticdata/icons/icon21_05.png
new file mode 100644
index 000000000..adcb61a8f
Binary files /dev/null and b/staticdata/icons/icon21_05.png differ
diff --git a/staticdata/icons/icon21_06.png b/staticdata/icons/icon21_06.png
new file mode 100644
index 000000000..210152308
Binary files /dev/null and b/staticdata/icons/icon21_06.png differ
diff --git a/staticdata/icons/icon21_07.png b/staticdata/icons/icon21_07.png
new file mode 100644
index 000000000..e50775e1b
Binary files /dev/null and b/staticdata/icons/icon21_07.png differ
diff --git a/staticdata/icons/icon21_08.png b/staticdata/icons/icon21_08.png
new file mode 100644
index 000000000..5a395b615
Binary files /dev/null and b/staticdata/icons/icon21_08.png differ
diff --git a/staticdata/icons/icon21_09.png b/staticdata/icons/icon21_09.png
new file mode 100644
index 000000000..b8051e72a
Binary files /dev/null and b/staticdata/icons/icon21_09.png differ
diff --git a/staticdata/icons/icon21_10.png b/staticdata/icons/icon21_10.png
new file mode 100644
index 000000000..7f28b44cc
Binary files /dev/null and b/staticdata/icons/icon21_10.png differ
diff --git a/staticdata/icons/icon21_11.png b/staticdata/icons/icon21_11.png
new file mode 100644
index 000000000..4955588eb
Binary files /dev/null and b/staticdata/icons/icon21_11.png differ
diff --git a/staticdata/icons/icon21_12.png b/staticdata/icons/icon21_12.png
new file mode 100644
index 000000000..2af45f8fe
Binary files /dev/null and b/staticdata/icons/icon21_12.png differ
diff --git a/staticdata/icons/icon21_13.png b/staticdata/icons/icon21_13.png
new file mode 100644
index 000000000..c37754e97
Binary files /dev/null and b/staticdata/icons/icon21_13.png differ
diff --git a/staticdata/icons/icon21_14.png b/staticdata/icons/icon21_14.png
new file mode 100644
index 000000000..93d6f92f7
Binary files /dev/null and b/staticdata/icons/icon21_14.png differ
diff --git a/staticdata/icons/icon21_15.png b/staticdata/icons/icon21_15.png
new file mode 100644
index 000000000..a26cb1e03
Binary files /dev/null and b/staticdata/icons/icon21_15.png differ
diff --git a/staticdata/icons/icon21_16.png b/staticdata/icons/icon21_16.png
new file mode 100644
index 000000000..b59237cbb
Binary files /dev/null and b/staticdata/icons/icon21_16.png differ
diff --git a/staticdata/icons/icon22_01.png b/staticdata/icons/icon22_01.png
new file mode 100644
index 000000000..a5dc37dfc
Binary files /dev/null and b/staticdata/icons/icon22_01.png differ
diff --git a/staticdata/icons/icon22_02.png b/staticdata/icons/icon22_02.png
new file mode 100644
index 000000000..519b2a80e
Binary files /dev/null and b/staticdata/icons/icon22_02.png differ
diff --git a/staticdata/icons/icon22_03.png b/staticdata/icons/icon22_03.png
new file mode 100644
index 000000000..9a47e46ae
Binary files /dev/null and b/staticdata/icons/icon22_03.png differ
diff --git a/staticdata/icons/icon22_04.png b/staticdata/icons/icon22_04.png
new file mode 100644
index 000000000..e919642f5
Binary files /dev/null and b/staticdata/icons/icon22_04.png differ
diff --git a/staticdata/icons/icon22_05.png b/staticdata/icons/icon22_05.png
new file mode 100644
index 000000000..aa5fcc2de
Binary files /dev/null and b/staticdata/icons/icon22_05.png differ
diff --git a/staticdata/icons/icon22_06.png b/staticdata/icons/icon22_06.png
new file mode 100644
index 000000000..4dfaa52e4
Binary files /dev/null and b/staticdata/icons/icon22_06.png differ
diff --git a/staticdata/icons/icon22_07.png b/staticdata/icons/icon22_07.png
new file mode 100644
index 000000000..6ebcf3485
Binary files /dev/null and b/staticdata/icons/icon22_07.png differ
diff --git a/staticdata/icons/icon22_08.png b/staticdata/icons/icon22_08.png
new file mode 100644
index 000000000..2dd6910c4
Binary files /dev/null and b/staticdata/icons/icon22_08.png differ
diff --git a/staticdata/icons/icon22_09.png b/staticdata/icons/icon22_09.png
new file mode 100644
index 000000000..c4bd63b91
Binary files /dev/null and b/staticdata/icons/icon22_09.png differ
diff --git a/staticdata/icons/icon22_10.png b/staticdata/icons/icon22_10.png
new file mode 100644
index 000000000..537e21975
Binary files /dev/null and b/staticdata/icons/icon22_10.png differ
diff --git a/staticdata/icons/icon22_11.png b/staticdata/icons/icon22_11.png
new file mode 100644
index 000000000..2acbdb188
Binary files /dev/null and b/staticdata/icons/icon22_11.png differ
diff --git a/staticdata/icons/icon22_12.png b/staticdata/icons/icon22_12.png
new file mode 100644
index 000000000..49ecf9b69
Binary files /dev/null and b/staticdata/icons/icon22_12.png differ
diff --git a/staticdata/icons/icon22_13.png b/staticdata/icons/icon22_13.png
new file mode 100644
index 000000000..f596292f9
Binary files /dev/null and b/staticdata/icons/icon22_13.png differ
diff --git a/staticdata/icons/icon22_14.png b/staticdata/icons/icon22_14.png
new file mode 100644
index 000000000..e631de8f9
Binary files /dev/null and b/staticdata/icons/icon22_14.png differ
diff --git a/staticdata/icons/icon22_15.png b/staticdata/icons/icon22_15.png
new file mode 100644
index 000000000..153108892
Binary files /dev/null and b/staticdata/icons/icon22_15.png differ
diff --git a/staticdata/icons/icon22_16.png b/staticdata/icons/icon22_16.png
new file mode 100644
index 000000000..04a57b6c4
Binary files /dev/null and b/staticdata/icons/icon22_16.png differ
diff --git a/staticdata/icons/icon22_17.png b/staticdata/icons/icon22_17.png
new file mode 100644
index 000000000..5209b9c38
Binary files /dev/null and b/staticdata/icons/icon22_17.png differ
diff --git a/staticdata/icons/icon22_18.png b/staticdata/icons/icon22_18.png
new file mode 100644
index 000000000..66f259b6d
Binary files /dev/null and b/staticdata/icons/icon22_18.png differ
diff --git a/staticdata/icons/icon22_19.png b/staticdata/icons/icon22_19.png
new file mode 100644
index 000000000..e419e5dfc
Binary files /dev/null and b/staticdata/icons/icon22_19.png differ
diff --git a/staticdata/icons/icon22_20.png b/staticdata/icons/icon22_20.png
new file mode 100644
index 000000000..4979d8dd2
Binary files /dev/null and b/staticdata/icons/icon22_20.png differ
diff --git a/staticdata/icons/icon22_21.png b/staticdata/icons/icon22_21.png
new file mode 100644
index 000000000..1fb76f7db
Binary files /dev/null and b/staticdata/icons/icon22_21.png differ
diff --git a/staticdata/icons/icon22_22.png b/staticdata/icons/icon22_22.png
new file mode 100644
index 000000000..179ece385
Binary files /dev/null and b/staticdata/icons/icon22_22.png differ
diff --git a/staticdata/icons/icon22_23.png b/staticdata/icons/icon22_23.png
new file mode 100644
index 000000000..2ba48964c
Binary files /dev/null and b/staticdata/icons/icon22_23.png differ
diff --git a/staticdata/icons/icon22_24.png b/staticdata/icons/icon22_24.png
new file mode 100644
index 000000000..e2c9c977c
Binary files /dev/null and b/staticdata/icons/icon22_24.png differ
diff --git a/staticdata/icons/icon22_25.png b/staticdata/icons/icon22_25.png
new file mode 100644
index 000000000..6eb49af46
Binary files /dev/null and b/staticdata/icons/icon22_25.png differ
diff --git a/staticdata/icons/icon22_26.png b/staticdata/icons/icon22_26.png
new file mode 100644
index 000000000..6b747dde6
Binary files /dev/null and b/staticdata/icons/icon22_26.png differ
diff --git a/staticdata/icons/icon22_27.png b/staticdata/icons/icon22_27.png
new file mode 100644
index 000000000..bf844a0bc
Binary files /dev/null and b/staticdata/icons/icon22_27.png differ
diff --git a/staticdata/icons/icon22_28.png b/staticdata/icons/icon22_28.png
new file mode 100644
index 000000000..ba5985a45
Binary files /dev/null and b/staticdata/icons/icon22_28.png differ
diff --git a/staticdata/icons/icon25_04.png b/staticdata/icons/icon25_04.png
new file mode 100644
index 000000000..20e4d2b3b
Binary files /dev/null and b/staticdata/icons/icon25_04.png differ
diff --git a/staticdata/icons/icon26_01.png b/staticdata/icons/icon26_01.png
new file mode 100644
index 000000000..57e93574f
Binary files /dev/null and b/staticdata/icons/icon26_01.png differ
diff --git a/staticdata/icons/icon27_01.png b/staticdata/icons/icon27_01.png
new file mode 100644
index 000000000..79ef937e1
Binary files /dev/null and b/staticdata/icons/icon27_01.png differ
diff --git a/staticdata/icons/icon27_04.png b/staticdata/icons/icon27_04.png
new file mode 100644
index 000000000..634d7efc5
Binary files /dev/null and b/staticdata/icons/icon27_04.png differ
diff --git a/staticdata/icons/icon27_09.png b/staticdata/icons/icon27_09.png
new file mode 100644
index 000000000..92894672f
Binary files /dev/null and b/staticdata/icons/icon27_09.png differ
diff --git a/staticdata/icons/icon31_10.png b/staticdata/icons/icon31_10.png
new file mode 100644
index 000000000..abb3c0c52
Binary files /dev/null and b/staticdata/icons/icon31_10.png differ
diff --git a/staticdata/icons/icon31_11.png b/staticdata/icons/icon31_11.png
new file mode 100644
index 000000000..c22665de7
Binary files /dev/null and b/staticdata/icons/icon31_11.png differ
diff --git a/staticdata/icons/icon31_12.png b/staticdata/icons/icon31_12.png
new file mode 100644
index 000000000..7a08d2299
Binary files /dev/null and b/staticdata/icons/icon31_12.png differ
diff --git a/staticdata/icons/icon31_14.png b/staticdata/icons/icon31_14.png
new file mode 100644
index 000000000..ca20c5aa2
Binary files /dev/null and b/staticdata/icons/icon31_14.png differ
diff --git a/staticdata/icons/icon31_15.png b/staticdata/icons/icon31_15.png
new file mode 100644
index 000000000..9a10f1327
Binary files /dev/null and b/staticdata/icons/icon31_15.png differ
diff --git a/staticdata/icons/icon31_16.png b/staticdata/icons/icon31_16.png
new file mode 100644
index 000000000..814379016
Binary files /dev/null and b/staticdata/icons/icon31_16.png differ
diff --git a/staticdata/icons/icon34_01.png b/staticdata/icons/icon34_01.png
new file mode 100644
index 000000000..1f2977eae
Binary files /dev/null and b/staticdata/icons/icon34_01.png differ
diff --git a/staticdata/icons/icon34_02.png b/staticdata/icons/icon34_02.png
new file mode 100644
index 000000000..8a19769ca
Binary files /dev/null and b/staticdata/icons/icon34_02.png differ
diff --git a/staticdata/icons/icon34_12.png b/staticdata/icons/icon34_12.png
new file mode 100644
index 000000000..f9ce144c8
Binary files /dev/null and b/staticdata/icons/icon34_12.png differ
diff --git a/staticdata/icons/icon34_15.png b/staticdata/icons/icon34_15.png
new file mode 100644
index 000000000..f91e4a83a
Binary files /dev/null and b/staticdata/icons/icon34_15.png differ
diff --git a/staticdata/icons/icon34_16.png b/staticdata/icons/icon34_16.png
new file mode 100644
index 000000000..9831736b1
Binary files /dev/null and b/staticdata/icons/icon34_16.png differ
diff --git a/staticdata/icons/icon35_01.png b/staticdata/icons/icon35_01.png
new file mode 100644
index 000000000..f70a50d58
Binary files /dev/null and b/staticdata/icons/icon35_01.png differ
diff --git a/staticdata/icons/icon35_03.png b/staticdata/icons/icon35_03.png
new file mode 100644
index 000000000..e81c07609
Binary files /dev/null and b/staticdata/icons/icon35_03.png differ
diff --git a/staticdata/icons/icon35_07.png b/staticdata/icons/icon35_07.png
new file mode 100644
index 000000000..4468ba44b
Binary files /dev/null and b/staticdata/icons/icon35_07.png differ
diff --git a/staticdata/icons/icon35_08.png b/staticdata/icons/icon35_08.png
new file mode 100644
index 000000000..e120f3bf7
Binary files /dev/null and b/staticdata/icons/icon35_08.png differ
diff --git a/staticdata/icons/icon35_09.png b/staticdata/icons/icon35_09.png
new file mode 100644
index 000000000..eb43c58a8
Binary files /dev/null and b/staticdata/icons/icon35_09.png differ
diff --git a/staticdata/icons/icon35_12.png b/staticdata/icons/icon35_12.png
new file mode 100644
index 000000000..6ac9fbecc
Binary files /dev/null and b/staticdata/icons/icon35_12.png differ
diff --git a/staticdata/icons/icon35_14.png b/staticdata/icons/icon35_14.png
new file mode 100644
index 000000000..6327b7030
Binary files /dev/null and b/staticdata/icons/icon35_14.png differ
diff --git a/staticdata/icons/icon35_15.png b/staticdata/icons/icon35_15.png
new file mode 100644
index 000000000..32882300f
Binary files /dev/null and b/staticdata/icons/icon35_15.png differ
diff --git a/staticdata/icons/icon36_13.png b/staticdata/icons/icon36_13.png
new file mode 100644
index 000000000..5ee279f0c
Binary files /dev/null and b/staticdata/icons/icon36_13.png differ
diff --git a/staticdata/icons/icon37_12.png b/staticdata/icons/icon37_12.png
new file mode 100644
index 000000000..c0f5dfb2d
Binary files /dev/null and b/staticdata/icons/icon37_12.png differ
diff --git a/staticdata/icons/icon40_14.png b/staticdata/icons/icon40_14.png
new file mode 100644
index 000000000..fcfd8f6c8
Binary files /dev/null and b/staticdata/icons/icon40_14.png differ
diff --git a/staticdata/icons/icon40_16.png b/staticdata/icons/icon40_16.png
new file mode 100644
index 000000000..65f1be587
Binary files /dev/null and b/staticdata/icons/icon40_16.png differ
diff --git a/staticdata/icons/icon45_11.png b/staticdata/icons/icon45_11.png
new file mode 100644
index 000000000..e52cdb243
Binary files /dev/null and b/staticdata/icons/icon45_11.png differ
diff --git a/staticdata/icons/icon45_12.png b/staticdata/icons/icon45_12.png
new file mode 100644
index 000000000..a93593995
Binary files /dev/null and b/staticdata/icons/icon45_12.png differ
diff --git a/staticdata/icons/icon48_01.png b/staticdata/icons/icon48_01.png
new file mode 100644
index 000000000..57ba9874d
Binary files /dev/null and b/staticdata/icons/icon48_01.png differ
diff --git a/staticdata/icons/icon48_02.png b/staticdata/icons/icon48_02.png
new file mode 100644
index 000000000..ca44c792a
Binary files /dev/null and b/staticdata/icons/icon48_02.png differ
diff --git a/staticdata/icons/icon48_03.png b/staticdata/icons/icon48_03.png
new file mode 100644
index 000000000..2a4e5f144
Binary files /dev/null and b/staticdata/icons/icon48_03.png differ
diff --git a/staticdata/icons/icon48_04.png b/staticdata/icons/icon48_04.png
new file mode 100644
index 000000000..da0709000
Binary files /dev/null and b/staticdata/icons/icon48_04.png differ
diff --git a/staticdata/icons/icon48_05.png b/staticdata/icons/icon48_05.png
new file mode 100644
index 000000000..b12967ea6
Binary files /dev/null and b/staticdata/icons/icon48_05.png differ
diff --git a/staticdata/icons/icon48_06.png b/staticdata/icons/icon48_06.png
new file mode 100644
index 000000000..ae313dfae
Binary files /dev/null and b/staticdata/icons/icon48_06.png differ
diff --git a/staticdata/icons/icon48_07.png b/staticdata/icons/icon48_07.png
new file mode 100644
index 000000000..1b95ffbdb
Binary files /dev/null and b/staticdata/icons/icon48_07.png differ
diff --git a/staticdata/icons/icon48_08.png b/staticdata/icons/icon48_08.png
new file mode 100644
index 000000000..85905e3dd
Binary files /dev/null and b/staticdata/icons/icon48_08.png differ
diff --git a/staticdata/icons/icon48_09.png b/staticdata/icons/icon48_09.png
new file mode 100644
index 000000000..13e333011
Binary files /dev/null and b/staticdata/icons/icon48_09.png differ
diff --git a/staticdata/icons/icon48_10.png b/staticdata/icons/icon48_10.png
new file mode 100644
index 000000000..d20204863
Binary files /dev/null and b/staticdata/icons/icon48_10.png differ
diff --git a/staticdata/icons/icon48_11.png b/staticdata/icons/icon48_11.png
new file mode 100644
index 000000000..8bfe18a2d
Binary files /dev/null and b/staticdata/icons/icon48_11.png differ
diff --git a/staticdata/icons/icon48_12.png b/staticdata/icons/icon48_12.png
new file mode 100644
index 000000000..d398ba65e
Binary files /dev/null and b/staticdata/icons/icon48_12.png differ
diff --git a/staticdata/icons/icon48_13.png b/staticdata/icons/icon48_13.png
new file mode 100644
index 000000000..016457f13
Binary files /dev/null and b/staticdata/icons/icon48_13.png differ
diff --git a/staticdata/icons/icon48_14.png b/staticdata/icons/icon48_14.png
new file mode 100644
index 000000000..c0b04d3aa
Binary files /dev/null and b/staticdata/icons/icon48_14.png differ
diff --git a/staticdata/icons/icon48_15.png b/staticdata/icons/icon48_15.png
new file mode 100644
index 000000000..872a714d4
Binary files /dev/null and b/staticdata/icons/icon48_15.png differ
diff --git a/staticdata/icons/icon48_16.png b/staticdata/icons/icon48_16.png
new file mode 100644
index 000000000..b8b0c0eb2
Binary files /dev/null and b/staticdata/icons/icon48_16.png differ
diff --git a/staticdata/icons/icon49_05.png b/staticdata/icons/icon49_05.png
new file mode 100644
index 000000000..94c75aaa9
Binary files /dev/null and b/staticdata/icons/icon49_05.png differ
diff --git a/staticdata/icons/icon49_06.png b/staticdata/icons/icon49_06.png
new file mode 100644
index 000000000..3d902f741
Binary files /dev/null and b/staticdata/icons/icon49_06.png differ
diff --git a/staticdata/icons/icon49_07.png b/staticdata/icons/icon49_07.png
new file mode 100644
index 000000000..177c4c446
Binary files /dev/null and b/staticdata/icons/icon49_07.png differ
diff --git a/staticdata/icons/icon50_03.png b/staticdata/icons/icon50_03.png
new file mode 100644
index 000000000..c8b24a677
Binary files /dev/null and b/staticdata/icons/icon50_03.png differ
diff --git a/staticdata/icons/icon50_11.png b/staticdata/icons/icon50_11.png
new file mode 100644
index 000000000..4ff49a3fe
Binary files /dev/null and b/staticdata/icons/icon50_11.png differ
diff --git a/staticdata/icons/icon51_05.png b/staticdata/icons/icon51_05.png
new file mode 100644
index 000000000..fa39a4ddb
Binary files /dev/null and b/staticdata/icons/icon51_05.png differ
diff --git a/staticdata/icons/icon51_10.png b/staticdata/icons/icon51_10.png
new file mode 100644
index 000000000..59e473906
Binary files /dev/null and b/staticdata/icons/icon51_10.png differ
diff --git a/staticdata/icons/icon51_11.png b/staticdata/icons/icon51_11.png
new file mode 100644
index 000000000..10cadc4d9
Binary files /dev/null and b/staticdata/icons/icon51_11.png differ
diff --git a/staticdata/icons/icon51_12.png b/staticdata/icons/icon51_12.png
new file mode 100644
index 000000000..1af65bf2f
Binary files /dev/null and b/staticdata/icons/icon51_12.png differ
diff --git a/staticdata/icons/icon51_13.png b/staticdata/icons/icon51_13.png
new file mode 100644
index 000000000..b7bd8bbcb
Binary files /dev/null and b/staticdata/icons/icon51_13.png differ
diff --git a/staticdata/icons/icon51_14.png b/staticdata/icons/icon51_14.png
new file mode 100644
index 000000000..d01205c0b
Binary files /dev/null and b/staticdata/icons/icon51_14.png differ
diff --git a/staticdata/icons/icon51_15.png b/staticdata/icons/icon51_15.png
new file mode 100644
index 000000000..c3f5b90f1
Binary files /dev/null and b/staticdata/icons/icon51_15.png differ
diff --git a/staticdata/icons/icon51_16.png b/staticdata/icons/icon51_16.png
new file mode 100644
index 000000000..59592b5d7
Binary files /dev/null and b/staticdata/icons/icon51_16.png differ
diff --git a/staticdata/icons/icon52_01.png b/staticdata/icons/icon52_01.png
new file mode 100644
index 000000000..7320d5c05
Binary files /dev/null and b/staticdata/icons/icon52_01.png differ
diff --git a/staticdata/icons/icon52_02.png b/staticdata/icons/icon52_02.png
new file mode 100644
index 000000000..99dcab10b
Binary files /dev/null and b/staticdata/icons/icon52_02.png differ
diff --git a/staticdata/icons/icon52_03.png b/staticdata/icons/icon52_03.png
new file mode 100644
index 000000000..ac88ec6f2
Binary files /dev/null and b/staticdata/icons/icon52_03.png differ
diff --git a/staticdata/icons/icon52_04.png b/staticdata/icons/icon52_04.png
new file mode 100644
index 000000000..23c7a0b0c
Binary files /dev/null and b/staticdata/icons/icon52_04.png differ
diff --git a/staticdata/icons/icon52_05.png b/staticdata/icons/icon52_05.png
new file mode 100644
index 000000000..9795612ba
Binary files /dev/null and b/staticdata/icons/icon52_05.png differ
diff --git a/staticdata/icons/icon52_06.png b/staticdata/icons/icon52_06.png
new file mode 100644
index 000000000..289c0da77
Binary files /dev/null and b/staticdata/icons/icon52_06.png differ
diff --git a/staticdata/icons/icon52_07.png b/staticdata/icons/icon52_07.png
new file mode 100644
index 000000000..7fc12104f
Binary files /dev/null and b/staticdata/icons/icon52_07.png differ
diff --git a/staticdata/icons/icon52_08.png b/staticdata/icons/icon52_08.png
new file mode 100644
index 000000000..cb1ad243c
Binary files /dev/null and b/staticdata/icons/icon52_08.png differ
diff --git a/staticdata/icons/icon52_10.png b/staticdata/icons/icon52_10.png
new file mode 100644
index 000000000..958c923e4
Binary files /dev/null and b/staticdata/icons/icon52_10.png differ
diff --git a/staticdata/icons/icon52_11.png b/staticdata/icons/icon52_11.png
new file mode 100644
index 000000000..d649b67b6
Binary files /dev/null and b/staticdata/icons/icon52_11.png differ
diff --git a/staticdata/icons/icon52_12.png b/staticdata/icons/icon52_12.png
new file mode 100644
index 000000000..28b8e5729
Binary files /dev/null and b/staticdata/icons/icon52_12.png differ
diff --git a/staticdata/icons/icon52_13.png b/staticdata/icons/icon52_13.png
new file mode 100644
index 000000000..0a7e0088d
Binary files /dev/null and b/staticdata/icons/icon52_13.png differ
diff --git a/staticdata/icons/icon52_14.png b/staticdata/icons/icon52_14.png
new file mode 100644
index 000000000..3304fecca
Binary files /dev/null and b/staticdata/icons/icon52_14.png differ
diff --git a/staticdata/icons/icon52_15.png b/staticdata/icons/icon52_15.png
new file mode 100644
index 000000000..ee38ea487
Binary files /dev/null and b/staticdata/icons/icon52_15.png differ
diff --git a/staticdata/icons/icon52_16.png b/staticdata/icons/icon52_16.png
new file mode 100644
index 000000000..29db0d096
Binary files /dev/null and b/staticdata/icons/icon52_16.png differ
diff --git a/staticdata/icons/icon53_01.png b/staticdata/icons/icon53_01.png
new file mode 100644
index 000000000..f793c4b87
Binary files /dev/null and b/staticdata/icons/icon53_01.png differ
diff --git a/staticdata/icons/icon53_02.png b/staticdata/icons/icon53_02.png
new file mode 100644
index 000000000..df3f9a57c
Binary files /dev/null and b/staticdata/icons/icon53_02.png differ
diff --git a/staticdata/icons/icon53_03.png b/staticdata/icons/icon53_03.png
new file mode 100644
index 000000000..0167d1112
Binary files /dev/null and b/staticdata/icons/icon53_03.png differ
diff --git a/staticdata/icons/icon53_04.png b/staticdata/icons/icon53_04.png
new file mode 100644
index 000000000..41a22585d
Binary files /dev/null and b/staticdata/icons/icon53_04.png differ
diff --git a/staticdata/icons/icon53_05.png b/staticdata/icons/icon53_05.png
new file mode 100644
index 000000000..a6d7ebd8c
Binary files /dev/null and b/staticdata/icons/icon53_05.png differ
diff --git a/staticdata/icons/icon53_06.png b/staticdata/icons/icon53_06.png
new file mode 100644
index 000000000..f1ce0d22b
Binary files /dev/null and b/staticdata/icons/icon53_06.png differ
diff --git a/staticdata/icons/icon53_07.png b/staticdata/icons/icon53_07.png
new file mode 100644
index 000000000..381324f6c
Binary files /dev/null and b/staticdata/icons/icon53_07.png differ
diff --git a/staticdata/icons/icon53_08.png b/staticdata/icons/icon53_08.png
new file mode 100644
index 000000000..ab22fd6f9
Binary files /dev/null and b/staticdata/icons/icon53_08.png differ
diff --git a/staticdata/icons/icon53_09.png b/staticdata/icons/icon53_09.png
new file mode 100644
index 000000000..de9367292
Binary files /dev/null and b/staticdata/icons/icon53_09.png differ
diff --git a/staticdata/icons/icon53_14.png b/staticdata/icons/icon53_14.png
new file mode 100644
index 000000000..34fd4c6ae
Binary files /dev/null and b/staticdata/icons/icon53_14.png differ
diff --git a/staticdata/icons/icon53_15.png b/staticdata/icons/icon53_15.png
new file mode 100644
index 000000000..499d3bf74
Binary files /dev/null and b/staticdata/icons/icon53_15.png differ
diff --git a/staticdata/icons/icon53_16.png b/staticdata/icons/icon53_16.png
new file mode 100644
index 000000000..42afb7b32
Binary files /dev/null and b/staticdata/icons/icon53_16.png differ
diff --git a/staticdata/icons/icon55_13.png b/staticdata/icons/icon55_13.png
new file mode 100644
index 000000000..f03590bdf
Binary files /dev/null and b/staticdata/icons/icon55_13.png differ
diff --git a/staticdata/icons/icon56_01.png b/staticdata/icons/icon56_01.png
new file mode 100644
index 000000000..225ed6419
Binary files /dev/null and b/staticdata/icons/icon56_01.png differ
diff --git a/staticdata/icons/icon56_02.png b/staticdata/icons/icon56_02.png
new file mode 100644
index 000000000..b6267943d
Binary files /dev/null and b/staticdata/icons/icon56_02.png differ
diff --git a/staticdata/icons/icon56_03.png b/staticdata/icons/icon56_03.png
new file mode 100644
index 000000000..e11f13c6d
Binary files /dev/null and b/staticdata/icons/icon56_03.png differ
diff --git a/staticdata/icons/icon56_04.png b/staticdata/icons/icon56_04.png
new file mode 100644
index 000000000..776b2de34
Binary files /dev/null and b/staticdata/icons/icon56_04.png differ
diff --git a/staticdata/icons/icon56_05.png b/staticdata/icons/icon56_05.png
new file mode 100644
index 000000000..58b9a58eb
Binary files /dev/null and b/staticdata/icons/icon56_05.png differ
diff --git a/staticdata/icons/icon56_06.png b/staticdata/icons/icon56_06.png
new file mode 100644
index 000000000..3814262c7
Binary files /dev/null and b/staticdata/icons/icon56_06.png differ
diff --git a/staticdata/icons/icon56_07.png b/staticdata/icons/icon56_07.png
new file mode 100644
index 000000000..838fb10f2
Binary files /dev/null and b/staticdata/icons/icon56_07.png differ
diff --git a/staticdata/icons/icon56_08.png b/staticdata/icons/icon56_08.png
new file mode 100644
index 000000000..5e2e3c325
Binary files /dev/null and b/staticdata/icons/icon56_08.png differ
diff --git a/staticdata/icons/icon57_04.png b/staticdata/icons/icon57_04.png
new file mode 100644
index 000000000..38c1957d1
Binary files /dev/null and b/staticdata/icons/icon57_04.png differ
diff --git a/staticdata/icons/icon62_01.png b/staticdata/icons/icon62_01.png
new file mode 100644
index 000000000..0614ecd2b
Binary files /dev/null and b/staticdata/icons/icon62_01.png differ
diff --git a/staticdata/icons/icon62_02.png b/staticdata/icons/icon62_02.png
new file mode 100644
index 000000000..ff3858bd0
Binary files /dev/null and b/staticdata/icons/icon62_02.png differ
diff --git a/staticdata/icons/icon62_03.png b/staticdata/icons/icon62_03.png
new file mode 100644
index 000000000..715684db8
Binary files /dev/null and b/staticdata/icons/icon62_03.png differ
diff --git a/staticdata/icons/icon62_04.png b/staticdata/icons/icon62_04.png
new file mode 100644
index 000000000..f1d6def4d
Binary files /dev/null and b/staticdata/icons/icon62_04.png differ
diff --git a/staticdata/icons/icon62_05.png b/staticdata/icons/icon62_05.png
new file mode 100644
index 000000000..87d339949
Binary files /dev/null and b/staticdata/icons/icon62_05.png differ
diff --git a/staticdata/icons/icon62_06.png b/staticdata/icons/icon62_06.png
new file mode 100644
index 000000000..77d9a611a
Binary files /dev/null and b/staticdata/icons/icon62_06.png differ
diff --git a/staticdata/icons/icon62_07.png b/staticdata/icons/icon62_07.png
new file mode 100644
index 000000000..b1cc2a39b
Binary files /dev/null and b/staticdata/icons/icon62_07.png differ
diff --git a/staticdata/icons/icon62_08.png b/staticdata/icons/icon62_08.png
new file mode 100644
index 000000000..f2b16cf1c
Binary files /dev/null and b/staticdata/icons/icon62_08.png differ
diff --git a/staticdata/icons/icon63_13.png b/staticdata/icons/icon63_13.png
new file mode 100644
index 000000000..3554a6894
Binary files /dev/null and b/staticdata/icons/icon63_13.png differ
diff --git a/staticdata/icons/icon63_14.png b/staticdata/icons/icon63_14.png
new file mode 100644
index 000000000..fb2d6b2da
Binary files /dev/null and b/staticdata/icons/icon63_14.png differ
diff --git a/staticdata/icons/icon63_15.png b/staticdata/icons/icon63_15.png
new file mode 100644
index 000000000..e3504d805
Binary files /dev/null and b/staticdata/icons/icon63_15.png differ
diff --git a/staticdata/icons/icon63_16.png b/staticdata/icons/icon63_16.png
new file mode 100644
index 000000000..68fe8a83f
Binary files /dev/null and b/staticdata/icons/icon63_16.png differ
diff --git a/staticdata/icons/icon64_05.png b/staticdata/icons/icon64_05.png
new file mode 100644
index 000000000..038b43a10
Binary files /dev/null and b/staticdata/icons/icon64_05.png differ
diff --git a/staticdata/icons/icon64_06.png b/staticdata/icons/icon64_06.png
new file mode 100644
index 000000000..8d6b24f86
Binary files /dev/null and b/staticdata/icons/icon64_06.png differ
diff --git a/staticdata/icons/icon64_07.png b/staticdata/icons/icon64_07.png
new file mode 100644
index 000000000..c6fdad277
Binary files /dev/null and b/staticdata/icons/icon64_07.png differ
diff --git a/staticdata/icons/icon64_08.png b/staticdata/icons/icon64_08.png
new file mode 100644
index 000000000..4f0e0fd52
Binary files /dev/null and b/staticdata/icons/icon64_08.png differ
diff --git a/staticdata/icons/icon64_11.png b/staticdata/icons/icon64_11.png
new file mode 100644
index 000000000..822dc1f3d
Binary files /dev/null and b/staticdata/icons/icon64_11.png differ
diff --git a/staticdata/icons/icon64_12.png b/staticdata/icons/icon64_12.png
new file mode 100644
index 000000000..3c6db67c8
Binary files /dev/null and b/staticdata/icons/icon64_12.png differ
diff --git a/staticdata/icons/icon68_01.png b/staticdata/icons/icon68_01.png
new file mode 100644
index 000000000..356bc6343
Binary files /dev/null and b/staticdata/icons/icon68_01.png differ
diff --git a/staticdata/icons/icon68_02.png b/staticdata/icons/icon68_02.png
new file mode 100644
index 000000000..9e491dcc4
Binary files /dev/null and b/staticdata/icons/icon68_02.png differ
diff --git a/staticdata/icons/icon68_03.png b/staticdata/icons/icon68_03.png
new file mode 100644
index 000000000..5865c1dfd
Binary files /dev/null and b/staticdata/icons/icon68_03.png differ
diff --git a/staticdata/icons/icon68_04.png b/staticdata/icons/icon68_04.png
new file mode 100644
index 000000000..29f017ff1
Binary files /dev/null and b/staticdata/icons/icon68_04.png differ
diff --git a/staticdata/icons/icon68_09.png b/staticdata/icons/icon68_09.png
new file mode 100644
index 000000000..7c8127ad0
Binary files /dev/null and b/staticdata/icons/icon68_09.png differ
diff --git a/staticdata/icons/icon68_10.png b/staticdata/icons/icon68_10.png
new file mode 100644
index 000000000..ea2ffd931
Binary files /dev/null and b/staticdata/icons/icon68_10.png differ
diff --git a/staticdata/icons/icon68_11.png b/staticdata/icons/icon68_11.png
new file mode 100644
index 000000000..098a580bd
Binary files /dev/null and b/staticdata/icons/icon68_11.png differ
diff --git a/staticdata/icons/icon68_12.png b/staticdata/icons/icon68_12.png
new file mode 100644
index 000000000..441254865
Binary files /dev/null and b/staticdata/icons/icon68_12.png differ
diff --git a/staticdata/icons/icon68_13.png b/staticdata/icons/icon68_13.png
new file mode 100644
index 000000000..ba36bfd00
Binary files /dev/null and b/staticdata/icons/icon68_13.png differ
diff --git a/staticdata/icons/icon68_14.png b/staticdata/icons/icon68_14.png
new file mode 100644
index 000000000..f589da0b3
Binary files /dev/null and b/staticdata/icons/icon68_14.png differ
diff --git a/staticdata/icons/icon68_15.png b/staticdata/icons/icon68_15.png
new file mode 100644
index 000000000..62b061b29
Binary files /dev/null and b/staticdata/icons/icon68_15.png differ
diff --git a/staticdata/icons/icon68_16.png b/staticdata/icons/icon68_16.png
new file mode 100644
index 000000000..ba588fb24
Binary files /dev/null and b/staticdata/icons/icon68_16.png differ
diff --git a/staticdata/icons/icon70_03.png b/staticdata/icons/icon70_03.png
new file mode 100644
index 000000000..01b356cba
Binary files /dev/null and b/staticdata/icons/icon70_03.png differ
diff --git a/staticdata/icons/icon70_04.png b/staticdata/icons/icon70_04.png
new file mode 100644
index 000000000..3425bf9f6
Binary files /dev/null and b/staticdata/icons/icon70_04.png differ
diff --git a/staticdata/icons/icon70_05.png b/staticdata/icons/icon70_05.png
new file mode 100644
index 000000000..0d9041925
Binary files /dev/null and b/staticdata/icons/icon70_05.png differ
diff --git a/staticdata/icons/icon70_06.png b/staticdata/icons/icon70_06.png
new file mode 100644
index 000000000..427942d7d
Binary files /dev/null and b/staticdata/icons/icon70_06.png differ
diff --git a/staticdata/icons/icon70_07.png b/staticdata/icons/icon70_07.png
new file mode 100644
index 000000000..e46e4c135
Binary files /dev/null and b/staticdata/icons/icon70_07.png differ
diff --git a/staticdata/icons/icon70_08.png b/staticdata/icons/icon70_08.png
new file mode 100644
index 000000000..a2a697a01
Binary files /dev/null and b/staticdata/icons/icon70_08.png differ
diff --git a/staticdata/icons/icon70_09.png b/staticdata/icons/icon70_09.png
new file mode 100644
index 000000000..9456c9df5
Binary files /dev/null and b/staticdata/icons/icon70_09.png differ
diff --git a/staticdata/icons/icon70_10.png b/staticdata/icons/icon70_10.png
new file mode 100644
index 000000000..3eb75a47d
Binary files /dev/null and b/staticdata/icons/icon70_10.png differ
diff --git a/staticdata/icons/icon70_12.png b/staticdata/icons/icon70_12.png
new file mode 100644
index 000000000..f36c51aa3
Binary files /dev/null and b/staticdata/icons/icon70_12.png differ
diff --git a/staticdata/icons/icon74_01.png b/staticdata/icons/icon74_01.png
new file mode 100644
index 000000000..c1ad3d713
Binary files /dev/null and b/staticdata/icons/icon74_01.png differ
diff --git a/staticdata/icons/icon74_02.png b/staticdata/icons/icon74_02.png
new file mode 100644
index 000000000..b40e58036
Binary files /dev/null and b/staticdata/icons/icon74_02.png differ
diff --git a/staticdata/icons/icon74_03.png b/staticdata/icons/icon74_03.png
new file mode 100644
index 000000000..49ca23fd5
Binary files /dev/null and b/staticdata/icons/icon74_03.png differ
diff --git a/staticdata/icons/icon74_04.png b/staticdata/icons/icon74_04.png
new file mode 100644
index 000000000..a31599743
Binary files /dev/null and b/staticdata/icons/icon74_04.png differ
diff --git a/staticdata/icons/icon74_05.png b/staticdata/icons/icon74_05.png
new file mode 100644
index 000000000..c0d977bcc
Binary files /dev/null and b/staticdata/icons/icon74_05.png differ
diff --git a/staticdata/icons/icon74_06.png b/staticdata/icons/icon74_06.png
new file mode 100644
index 000000000..9a9e9601f
Binary files /dev/null and b/staticdata/icons/icon74_06.png differ
diff --git a/staticdata/icons/icon74_07.png b/staticdata/icons/icon74_07.png
new file mode 100644
index 000000000..49cf98dea
Binary files /dev/null and b/staticdata/icons/icon74_07.png differ
diff --git a/staticdata/icons/icon74_08.png b/staticdata/icons/icon74_08.png
new file mode 100644
index 000000000..f7af775c6
Binary files /dev/null and b/staticdata/icons/icon74_08.png differ
diff --git a/staticdata/icons/icon74_09.png b/staticdata/icons/icon74_09.png
new file mode 100644
index 000000000..b3e00bfd9
Binary files /dev/null and b/staticdata/icons/icon74_09.png differ
diff --git a/staticdata/icons/icon74_10.png b/staticdata/icons/icon74_10.png
new file mode 100644
index 000000000..42fbd8f34
Binary files /dev/null and b/staticdata/icons/icon74_10.png differ
diff --git a/staticdata/icons/icon76_01.png b/staticdata/icons/icon76_01.png
new file mode 100644
index 000000000..45ddc912e
Binary files /dev/null and b/staticdata/icons/icon76_01.png differ
diff --git a/staticdata/icons/icon76_04.png b/staticdata/icons/icon76_04.png
new file mode 100644
index 000000000..817033b43
Binary files /dev/null and b/staticdata/icons/icon76_04.png differ
diff --git a/staticdata/icons/icon76_05.png b/staticdata/icons/icon76_05.png
new file mode 100644
index 000000000..4e5dcd310
Binary files /dev/null and b/staticdata/icons/icon76_05.png differ
diff --git a/staticdata/icons/icon76_06.png b/staticdata/icons/icon76_06.png
new file mode 100644
index 000000000..f6b3974c1
Binary files /dev/null and b/staticdata/icons/icon76_06.png differ
diff --git a/staticdata/icons/icon76_07.png b/staticdata/icons/icon76_07.png
new file mode 100644
index 000000000..87b7dfa54
Binary files /dev/null and b/staticdata/icons/icon76_07.png differ
diff --git a/staticdata/icons/icon76_08.png b/staticdata/icons/icon76_08.png
new file mode 100644
index 000000000..c72a9ac50
Binary files /dev/null and b/staticdata/icons/icon76_08.png differ
diff --git a/staticdata/icons/icon76_09.png b/staticdata/icons/icon76_09.png
new file mode 100644
index 000000000..55764d10e
Binary files /dev/null and b/staticdata/icons/icon76_09.png differ
diff --git a/staticdata/icons/icon76_16.png b/staticdata/icons/icon76_16.png
new file mode 100644
index 000000000..6acfe85b9
Binary files /dev/null and b/staticdata/icons/icon76_16.png differ
diff --git a/staticdata/icons/icon79_09.png b/staticdata/icons/icon79_09.png
new file mode 100644
index 000000000..d31290e9d
Binary files /dev/null and b/staticdata/icons/icon79_09.png differ
diff --git a/staticdata/icons/icon89_1.png b/staticdata/icons/icon89_1.png
new file mode 100644
index 000000000..327642096
Binary files /dev/null and b/staticdata/icons/icon89_1.png differ
diff --git a/staticdata/icons/icon89_2.png b/staticdata/icons/icon89_2.png
new file mode 100644
index 000000000..08523c4c9
Binary files /dev/null and b/staticdata/icons/icon89_2.png differ
diff --git a/staticdata/icons/icon89_3.png b/staticdata/icons/icon89_3.png
new file mode 100644
index 000000000..b352c9af2
Binary files /dev/null and b/staticdata/icons/icon89_3.png differ
diff --git a/staticdata/icons/icon89_4.png b/staticdata/icons/icon89_4.png
new file mode 100644
index 000000000..48ca32121
Binary files /dev/null and b/staticdata/icons/icon89_4.png differ
diff --git a/staticdata/icons/icon95_05.png b/staticdata/icons/icon95_05.png
new file mode 100644
index 000000000..8d1864b09
Binary files /dev/null and b/staticdata/icons/icon95_05.png differ
diff --git a/staticdata/icons/icon99_09.png b/staticdata/icons/icon99_09.png
new file mode 100644
index 000000000..7fceff5ee
Binary files /dev/null and b/staticdata/icons/icon99_09.png differ
diff --git a/staticdata/icons/ships/10254.png b/staticdata/icons/ships/10254.png
new file mode 100644
index 000000000..8565496e7
Binary files /dev/null and b/staticdata/icons/ships/10254.png differ
diff --git a/staticdata/icons/ships/11011.png b/staticdata/icons/ships/11011.png
new file mode 100644
index 000000000..df9403448
Binary files /dev/null and b/staticdata/icons/ships/11011.png differ
diff --git a/staticdata/icons/ships/11019.png b/staticdata/icons/ships/11019.png
new file mode 100644
index 000000000..6a28f2e1c
Binary files /dev/null and b/staticdata/icons/ships/11019.png differ
diff --git a/staticdata/icons/ships/11129.png b/staticdata/icons/ships/11129.png
new file mode 100644
index 000000000..ae2388de0
Binary files /dev/null and b/staticdata/icons/ships/11129.png differ
diff --git a/staticdata/icons/ships/11132.png b/staticdata/icons/ships/11132.png
new file mode 100644
index 000000000..8a1d09b75
Binary files /dev/null and b/staticdata/icons/ships/11132.png differ
diff --git a/staticdata/icons/ships/11134.png b/staticdata/icons/ships/11134.png
new file mode 100644
index 000000000..2f93535a1
Binary files /dev/null and b/staticdata/icons/ships/11134.png differ
diff --git a/staticdata/icons/ships/11172.png b/staticdata/icons/ships/11172.png
new file mode 100644
index 000000000..25a8b4e07
Binary files /dev/null and b/staticdata/icons/ships/11172.png differ
diff --git a/staticdata/icons/ships/11174.png b/staticdata/icons/ships/11174.png
new file mode 100644
index 000000000..ad26c096f
Binary files /dev/null and b/staticdata/icons/ships/11174.png differ
diff --git a/staticdata/icons/ships/11176.png b/staticdata/icons/ships/11176.png
new file mode 100644
index 000000000..108f9db31
Binary files /dev/null and b/staticdata/icons/ships/11176.png differ
diff --git a/staticdata/icons/ships/11178.png b/staticdata/icons/ships/11178.png
new file mode 100644
index 000000000..cba17f395
Binary files /dev/null and b/staticdata/icons/ships/11178.png differ
diff --git a/staticdata/icons/ships/11180.png b/staticdata/icons/ships/11180.png
new file mode 100644
index 000000000..d96b43988
Binary files /dev/null and b/staticdata/icons/ships/11180.png differ
diff --git a/staticdata/icons/ships/11182.png b/staticdata/icons/ships/11182.png
new file mode 100644
index 000000000..68465ce3f
Binary files /dev/null and b/staticdata/icons/ships/11182.png differ
diff --git a/staticdata/icons/ships/11184.png b/staticdata/icons/ships/11184.png
new file mode 100644
index 000000000..8b4b098c2
Binary files /dev/null and b/staticdata/icons/ships/11184.png differ
diff --git a/staticdata/icons/ships/11186.png b/staticdata/icons/ships/11186.png
new file mode 100644
index 000000000..e70728197
Binary files /dev/null and b/staticdata/icons/ships/11186.png differ
diff --git a/staticdata/icons/ships/11188.png b/staticdata/icons/ships/11188.png
new file mode 100644
index 000000000..f9023cdcf
Binary files /dev/null and b/staticdata/icons/ships/11188.png differ
diff --git a/staticdata/icons/ships/11190.png b/staticdata/icons/ships/11190.png
new file mode 100644
index 000000000..c896ef317
Binary files /dev/null and b/staticdata/icons/ships/11190.png differ
diff --git a/staticdata/icons/ships/11192.png b/staticdata/icons/ships/11192.png
new file mode 100644
index 000000000..d67dcea22
Binary files /dev/null and b/staticdata/icons/ships/11192.png differ
diff --git a/staticdata/icons/ships/11194.png b/staticdata/icons/ships/11194.png
new file mode 100644
index 000000000..e7a2809da
Binary files /dev/null and b/staticdata/icons/ships/11194.png differ
diff --git a/staticdata/icons/ships/11196.png b/staticdata/icons/ships/11196.png
new file mode 100644
index 000000000..294c3017c
Binary files /dev/null and b/staticdata/icons/ships/11196.png differ
diff --git a/staticdata/icons/ships/11198.png b/staticdata/icons/ships/11198.png
new file mode 100644
index 000000000..db9e03682
Binary files /dev/null and b/staticdata/icons/ships/11198.png differ
diff --git a/staticdata/icons/ships/11200.png b/staticdata/icons/ships/11200.png
new file mode 100644
index 000000000..f3fd9e301
Binary files /dev/null and b/staticdata/icons/ships/11200.png differ
diff --git a/staticdata/icons/ships/11202.png b/staticdata/icons/ships/11202.png
new file mode 100644
index 000000000..1c2371c8a
Binary files /dev/null and b/staticdata/icons/ships/11202.png differ
diff --git a/staticdata/icons/ships/11365.png b/staticdata/icons/ships/11365.png
new file mode 100644
index 000000000..08c98a261
Binary files /dev/null and b/staticdata/icons/ships/11365.png differ
diff --git a/staticdata/icons/ships/11371.png b/staticdata/icons/ships/11371.png
new file mode 100644
index 000000000..42c7ff266
Binary files /dev/null and b/staticdata/icons/ships/11371.png differ
diff --git a/staticdata/icons/ships/11373.png b/staticdata/icons/ships/11373.png
new file mode 100644
index 000000000..dc291b4e3
Binary files /dev/null and b/staticdata/icons/ships/11373.png differ
diff --git a/staticdata/icons/ships/11375.png b/staticdata/icons/ships/11375.png
new file mode 100644
index 000000000..dc8f74125
Binary files /dev/null and b/staticdata/icons/ships/11375.png differ
diff --git a/staticdata/icons/ships/11377.png b/staticdata/icons/ships/11377.png
new file mode 100644
index 000000000..214096570
Binary files /dev/null and b/staticdata/icons/ships/11377.png differ
diff --git a/staticdata/icons/ships/11379.png b/staticdata/icons/ships/11379.png
new file mode 100644
index 000000000..c71ee0e28
Binary files /dev/null and b/staticdata/icons/ships/11379.png differ
diff --git a/staticdata/icons/ships/11381.png b/staticdata/icons/ships/11381.png
new file mode 100644
index 000000000..e9fc0c85f
Binary files /dev/null and b/staticdata/icons/ships/11381.png differ
diff --git a/staticdata/icons/ships/11383.png b/staticdata/icons/ships/11383.png
new file mode 100644
index 000000000..6e84ec32f
Binary files /dev/null and b/staticdata/icons/ships/11383.png differ
diff --git a/staticdata/icons/ships/11385.png b/staticdata/icons/ships/11385.png
new file mode 100644
index 000000000..8165ae0da
Binary files /dev/null and b/staticdata/icons/ships/11385.png differ
diff --git a/staticdata/icons/ships/11387.png b/staticdata/icons/ships/11387.png
new file mode 100644
index 000000000..2aa2c4f80
Binary files /dev/null and b/staticdata/icons/ships/11387.png differ
diff --git a/staticdata/icons/ships/11389.png b/staticdata/icons/ships/11389.png
new file mode 100644
index 000000000..ad26c096f
Binary files /dev/null and b/staticdata/icons/ships/11389.png differ
diff --git a/staticdata/icons/ships/11393.png b/staticdata/icons/ships/11393.png
new file mode 100644
index 000000000..efaee68e2
Binary files /dev/null and b/staticdata/icons/ships/11393.png differ
diff --git a/staticdata/icons/ships/11400.png b/staticdata/icons/ships/11400.png
new file mode 100644
index 000000000..622c8ea81
Binary files /dev/null and b/staticdata/icons/ships/11400.png differ
diff --git a/staticdata/icons/ships/11567.png b/staticdata/icons/ships/11567.png
new file mode 100644
index 000000000..719ea5f4e
Binary files /dev/null and b/staticdata/icons/ships/11567.png differ
diff --git a/staticdata/icons/ships/11591.png b/staticdata/icons/ships/11591.png
new file mode 100644
index 000000000..73fb0a648
Binary files /dev/null and b/staticdata/icons/ships/11591.png differ
diff --git a/staticdata/icons/ships/11936.png b/staticdata/icons/ships/11936.png
new file mode 100644
index 000000000..465dee29f
Binary files /dev/null and b/staticdata/icons/ships/11936.png differ
diff --git a/staticdata/icons/ships/11938.png b/staticdata/icons/ships/11938.png
new file mode 100644
index 000000000..88e7e50a2
Binary files /dev/null and b/staticdata/icons/ships/11938.png differ
diff --git a/staticdata/icons/ships/11940.png b/staticdata/icons/ships/11940.png
new file mode 100644
index 000000000..452dfe2cd
Binary files /dev/null and b/staticdata/icons/ships/11940.png differ
diff --git a/staticdata/icons/ships/11942.png b/staticdata/icons/ships/11942.png
new file mode 100644
index 000000000..85c6c6111
Binary files /dev/null and b/staticdata/icons/ships/11942.png differ
diff --git a/staticdata/icons/ships/11957.png b/staticdata/icons/ships/11957.png
new file mode 100644
index 000000000..92cfe19c5
Binary files /dev/null and b/staticdata/icons/ships/11957.png differ
diff --git a/staticdata/icons/ships/11959.png b/staticdata/icons/ships/11959.png
new file mode 100644
index 000000000..6d97b5906
Binary files /dev/null and b/staticdata/icons/ships/11959.png differ
diff --git a/staticdata/icons/ships/11961.png b/staticdata/icons/ships/11961.png
new file mode 100644
index 000000000..d2af75fcf
Binary files /dev/null and b/staticdata/icons/ships/11961.png differ
diff --git a/staticdata/icons/ships/11963.png b/staticdata/icons/ships/11963.png
new file mode 100644
index 000000000..139b2dc07
Binary files /dev/null and b/staticdata/icons/ships/11963.png differ
diff --git a/staticdata/icons/ships/11965.png b/staticdata/icons/ships/11965.png
new file mode 100644
index 000000000..735a61347
Binary files /dev/null and b/staticdata/icons/ships/11965.png differ
diff --git a/staticdata/icons/ships/11969.png b/staticdata/icons/ships/11969.png
new file mode 100644
index 000000000..12517f255
Binary files /dev/null and b/staticdata/icons/ships/11969.png differ
diff --git a/staticdata/icons/ships/11971.png b/staticdata/icons/ships/11971.png
new file mode 100644
index 000000000..019c49b53
Binary files /dev/null and b/staticdata/icons/ships/11971.png differ
diff --git a/staticdata/icons/ships/11973.png b/staticdata/icons/ships/11973.png
new file mode 100644
index 000000000..49865abf0
Binary files /dev/null and b/staticdata/icons/ships/11973.png differ
diff --git a/staticdata/icons/ships/11978.png b/staticdata/icons/ships/11978.png
new file mode 100644
index 000000000..caf6d790e
Binary files /dev/null and b/staticdata/icons/ships/11978.png differ
diff --git a/staticdata/icons/ships/11980.png b/staticdata/icons/ships/11980.png
new file mode 100644
index 000000000..d4a4245d0
Binary files /dev/null and b/staticdata/icons/ships/11980.png differ
diff --git a/staticdata/icons/ships/11982.png b/staticdata/icons/ships/11982.png
new file mode 100644
index 000000000..eecb3e43d
Binary files /dev/null and b/staticdata/icons/ships/11982.png differ
diff --git a/staticdata/icons/ships/11985.png b/staticdata/icons/ships/11985.png
new file mode 100644
index 000000000..31a421b86
Binary files /dev/null and b/staticdata/icons/ships/11985.png differ
diff --git a/staticdata/icons/ships/11987.png b/staticdata/icons/ships/11987.png
new file mode 100644
index 000000000..8da262213
Binary files /dev/null and b/staticdata/icons/ships/11987.png differ
diff --git a/staticdata/icons/ships/11989.png b/staticdata/icons/ships/11989.png
new file mode 100644
index 000000000..b54f056ab
Binary files /dev/null and b/staticdata/icons/ships/11989.png differ
diff --git a/staticdata/icons/ships/11991.png b/staticdata/icons/ships/11991.png
new file mode 100644
index 000000000..c7f730b36
Binary files /dev/null and b/staticdata/icons/ships/11991.png differ
diff --git a/staticdata/icons/ships/11993.png b/staticdata/icons/ships/11993.png
new file mode 100644
index 000000000..f138004e8
Binary files /dev/null and b/staticdata/icons/ships/11993.png differ
diff --git a/staticdata/icons/ships/11995.png b/staticdata/icons/ships/11995.png
new file mode 100644
index 000000000..779a9a565
Binary files /dev/null and b/staticdata/icons/ships/11995.png differ
diff --git a/staticdata/icons/ships/11997.png b/staticdata/icons/ships/11997.png
new file mode 100644
index 000000000..982142977
Binary files /dev/null and b/staticdata/icons/ships/11997.png differ
diff --git a/staticdata/icons/ships/11999.png b/staticdata/icons/ships/11999.png
new file mode 100644
index 000000000..8d3ae4d10
Binary files /dev/null and b/staticdata/icons/ships/11999.png differ
diff --git a/staticdata/icons/ships/12003.png b/staticdata/icons/ships/12003.png
new file mode 100644
index 000000000..f33dc5ba3
Binary files /dev/null and b/staticdata/icons/ships/12003.png differ
diff --git a/staticdata/icons/ships/12005.png b/staticdata/icons/ships/12005.png
new file mode 100644
index 000000000..f33bfeaf7
Binary files /dev/null and b/staticdata/icons/ships/12005.png differ
diff --git a/staticdata/icons/ships/12007.png b/staticdata/icons/ships/12007.png
new file mode 100644
index 000000000..11b13f10a
Binary files /dev/null and b/staticdata/icons/ships/12007.png differ
diff --git a/staticdata/icons/ships/12009.png b/staticdata/icons/ships/12009.png
new file mode 100644
index 000000000..35eeeda6b
Binary files /dev/null and b/staticdata/icons/ships/12009.png differ
diff --git a/staticdata/icons/ships/12011.png b/staticdata/icons/ships/12011.png
new file mode 100644
index 000000000..0f214d467
Binary files /dev/null and b/staticdata/icons/ships/12011.png differ
diff --git a/staticdata/icons/ships/12013.png b/staticdata/icons/ships/12013.png
new file mode 100644
index 000000000..ddb78c910
Binary files /dev/null and b/staticdata/icons/ships/12013.png differ
diff --git a/staticdata/icons/ships/12015.png b/staticdata/icons/ships/12015.png
new file mode 100644
index 000000000..5f7c66d5d
Binary files /dev/null and b/staticdata/icons/ships/12015.png differ
diff --git a/staticdata/icons/ships/12017.png b/staticdata/icons/ships/12017.png
new file mode 100644
index 000000000..dee214aba
Binary files /dev/null and b/staticdata/icons/ships/12017.png differ
diff --git a/staticdata/icons/ships/12019.png b/staticdata/icons/ships/12019.png
new file mode 100644
index 000000000..b45d90255
Binary files /dev/null and b/staticdata/icons/ships/12019.png differ
diff --git a/staticdata/icons/ships/12021.png b/staticdata/icons/ships/12021.png
new file mode 100644
index 000000000..38d32fdc1
Binary files /dev/null and b/staticdata/icons/ships/12021.png differ
diff --git a/staticdata/icons/ships/12023.png b/staticdata/icons/ships/12023.png
new file mode 100644
index 000000000..f6220f391
Binary files /dev/null and b/staticdata/icons/ships/12023.png differ
diff --git a/staticdata/icons/ships/12030.png b/staticdata/icons/ships/12030.png
new file mode 100644
index 000000000..3bbb56213
Binary files /dev/null and b/staticdata/icons/ships/12030.png differ
diff --git a/staticdata/icons/ships/12032.png b/staticdata/icons/ships/12032.png
new file mode 100644
index 000000000..08af646c8
Binary files /dev/null and b/staticdata/icons/ships/12032.png differ
diff --git a/staticdata/icons/ships/12034.png b/staticdata/icons/ships/12034.png
new file mode 100644
index 000000000..cc2acd672
Binary files /dev/null and b/staticdata/icons/ships/12034.png differ
diff --git a/staticdata/icons/ships/12036.png b/staticdata/icons/ships/12036.png
new file mode 100644
index 000000000..cc2acd672
Binary files /dev/null and b/staticdata/icons/ships/12036.png differ
diff --git a/staticdata/icons/ships/12038.png b/staticdata/icons/ships/12038.png
new file mode 100644
index 000000000..f48ced8a7
Binary files /dev/null and b/staticdata/icons/ships/12038.png differ
diff --git a/staticdata/icons/ships/12040.png b/staticdata/icons/ships/12040.png
new file mode 100644
index 000000000..cab21f6b9
Binary files /dev/null and b/staticdata/icons/ships/12040.png differ
diff --git a/staticdata/icons/ships/12042.png b/staticdata/icons/ships/12042.png
new file mode 100644
index 000000000..1a9790c96
Binary files /dev/null and b/staticdata/icons/ships/12042.png differ
diff --git a/staticdata/icons/ships/12044.png b/staticdata/icons/ships/12044.png
new file mode 100644
index 000000000..a0754c2d4
Binary files /dev/null and b/staticdata/icons/ships/12044.png differ
diff --git a/staticdata/icons/ships/1233.png b/staticdata/icons/ships/1233.png
new file mode 100644
index 000000000..7bf96299c
Binary files /dev/null and b/staticdata/icons/ships/1233.png differ
diff --git a/staticdata/icons/ships/12403.png b/staticdata/icons/ships/12403.png
new file mode 100644
index 000000000..b42858ce8
Binary files /dev/null and b/staticdata/icons/ships/12403.png differ
diff --git a/staticdata/icons/ships/12729.png b/staticdata/icons/ships/12729.png
new file mode 100644
index 000000000..ab79d752a
Binary files /dev/null and b/staticdata/icons/ships/12729.png differ
diff --git a/staticdata/icons/ships/12731.png b/staticdata/icons/ships/12731.png
new file mode 100644
index 000000000..876b7594f
Binary files /dev/null and b/staticdata/icons/ships/12731.png differ
diff --git a/staticdata/icons/ships/12733.png b/staticdata/icons/ships/12733.png
new file mode 100644
index 000000000..01fffcd66
Binary files /dev/null and b/staticdata/icons/ships/12733.png differ
diff --git a/staticdata/icons/ships/12735.png b/staticdata/icons/ships/12735.png
new file mode 100644
index 000000000..cadf27886
Binary files /dev/null and b/staticdata/icons/ships/12735.png differ
diff --git a/staticdata/icons/ships/12743.png b/staticdata/icons/ships/12743.png
new file mode 100644
index 000000000..ec2ae7ea6
Binary files /dev/null and b/staticdata/icons/ships/12743.png differ
diff --git a/staticdata/icons/ships/12745.png b/staticdata/icons/ships/12745.png
new file mode 100644
index 000000000..6efb0c765
Binary files /dev/null and b/staticdata/icons/ships/12745.png differ
diff --git a/staticdata/icons/ships/12747.png b/staticdata/icons/ships/12747.png
new file mode 100644
index 000000000..064022695
Binary files /dev/null and b/staticdata/icons/ships/12747.png differ
diff --git a/staticdata/icons/ships/12753.png b/staticdata/icons/ships/12753.png
new file mode 100644
index 000000000..15cbac26d
Binary files /dev/null and b/staticdata/icons/ships/12753.png differ
diff --git a/staticdata/icons/ships/13202.png b/staticdata/icons/ships/13202.png
new file mode 100644
index 000000000..6ac3b76cd
Binary files /dev/null and b/staticdata/icons/ships/13202.png differ
diff --git a/staticdata/icons/ships/16227.png b/staticdata/icons/ships/16227.png
new file mode 100644
index 000000000..74deebce0
Binary files /dev/null and b/staticdata/icons/ships/16227.png differ
diff --git a/staticdata/icons/ships/16229.png b/staticdata/icons/ships/16229.png
new file mode 100644
index 000000000..c29c9f743
Binary files /dev/null and b/staticdata/icons/ships/16229.png differ
diff --git a/staticdata/icons/ships/16231.png b/staticdata/icons/ships/16231.png
new file mode 100644
index 000000000..a4331d68c
Binary files /dev/null and b/staticdata/icons/ships/16231.png differ
diff --git a/staticdata/icons/ships/16233.png b/staticdata/icons/ships/16233.png
new file mode 100644
index 000000000..97e346e03
Binary files /dev/null and b/staticdata/icons/ships/16233.png differ
diff --git a/staticdata/icons/ships/16236.png b/staticdata/icons/ships/16236.png
new file mode 100644
index 000000000..bba51b4f1
Binary files /dev/null and b/staticdata/icons/ships/16236.png differ
diff --git a/staticdata/icons/ships/16238.png b/staticdata/icons/ships/16238.png
new file mode 100644
index 000000000..51651e995
Binary files /dev/null and b/staticdata/icons/ships/16238.png differ
diff --git a/staticdata/icons/ships/16240.png b/staticdata/icons/ships/16240.png
new file mode 100644
index 000000000..4d2e62b76
Binary files /dev/null and b/staticdata/icons/ships/16240.png differ
diff --git a/staticdata/icons/ships/16242.png b/staticdata/icons/ships/16242.png
new file mode 100644
index 000000000..bd9a09567
Binary files /dev/null and b/staticdata/icons/ships/16242.png differ
diff --git a/staticdata/icons/ships/17360.png b/staticdata/icons/ships/17360.png
new file mode 100644
index 000000000..7bf96299c
Binary files /dev/null and b/staticdata/icons/ships/17360.png differ
diff --git a/staticdata/icons/ships/17476.png b/staticdata/icons/ships/17476.png
new file mode 100644
index 000000000..c7118c604
Binary files /dev/null and b/staticdata/icons/ships/17476.png differ
diff --git a/staticdata/icons/ships/17478.png b/staticdata/icons/ships/17478.png
new file mode 100644
index 000000000..075b833fd
Binary files /dev/null and b/staticdata/icons/ships/17478.png differ
diff --git a/staticdata/icons/ships/17480.png b/staticdata/icons/ships/17480.png
new file mode 100644
index 000000000..b706fe624
Binary files /dev/null and b/staticdata/icons/ships/17480.png differ
diff --git a/staticdata/icons/ships/17619.png b/staticdata/icons/ships/17619.png
new file mode 100644
index 000000000..eca548883
Binary files /dev/null and b/staticdata/icons/ships/17619.png differ
diff --git a/staticdata/icons/ships/17634.png b/staticdata/icons/ships/17634.png
new file mode 100644
index 000000000..8b992fc73
Binary files /dev/null and b/staticdata/icons/ships/17634.png differ
diff --git a/staticdata/icons/ships/17636.png b/staticdata/icons/ships/17636.png
new file mode 100644
index 000000000..792f7bf9e
Binary files /dev/null and b/staticdata/icons/ships/17636.png differ
diff --git a/staticdata/icons/ships/17703.png b/staticdata/icons/ships/17703.png
new file mode 100644
index 000000000..7ab522487
Binary files /dev/null and b/staticdata/icons/ships/17703.png differ
diff --git a/staticdata/icons/ships/17705.png b/staticdata/icons/ships/17705.png
new file mode 100644
index 000000000..cd32f06ba
Binary files /dev/null and b/staticdata/icons/ships/17705.png differ
diff --git a/staticdata/icons/ships/17707.png b/staticdata/icons/ships/17707.png
new file mode 100644
index 000000000..5386f74e0
Binary files /dev/null and b/staticdata/icons/ships/17707.png differ
diff --git a/staticdata/icons/ships/17709.png b/staticdata/icons/ships/17709.png
new file mode 100644
index 000000000..44026ecd6
Binary files /dev/null and b/staticdata/icons/ships/17709.png differ
diff --git a/staticdata/icons/ships/17711.png b/staticdata/icons/ships/17711.png
new file mode 100644
index 000000000..f35ea9abf
Binary files /dev/null and b/staticdata/icons/ships/17711.png differ
diff --git a/staticdata/icons/ships/17713.png b/staticdata/icons/ships/17713.png
new file mode 100644
index 000000000..3d6e13d53
Binary files /dev/null and b/staticdata/icons/ships/17713.png differ
diff --git a/staticdata/icons/ships/17715.png b/staticdata/icons/ships/17715.png
new file mode 100644
index 000000000..e0ab3bd20
Binary files /dev/null and b/staticdata/icons/ships/17715.png differ
diff --git a/staticdata/icons/ships/17718.png b/staticdata/icons/ships/17718.png
new file mode 100644
index 000000000..26f9dbc76
Binary files /dev/null and b/staticdata/icons/ships/17718.png differ
diff --git a/staticdata/icons/ships/17720.png b/staticdata/icons/ships/17720.png
new file mode 100644
index 000000000..3985253b3
Binary files /dev/null and b/staticdata/icons/ships/17720.png differ
diff --git a/staticdata/icons/ships/17722.png b/staticdata/icons/ships/17722.png
new file mode 100644
index 000000000..5d3357a3f
Binary files /dev/null and b/staticdata/icons/ships/17722.png differ
diff --git a/staticdata/icons/ships/17724.png b/staticdata/icons/ships/17724.png
new file mode 100644
index 000000000..f35ea9abf
Binary files /dev/null and b/staticdata/icons/ships/17724.png differ
diff --git a/staticdata/icons/ships/17726.png b/staticdata/icons/ships/17726.png
new file mode 100644
index 000000000..b7839e991
Binary files /dev/null and b/staticdata/icons/ships/17726.png differ
diff --git a/staticdata/icons/ships/17728.png b/staticdata/icons/ships/17728.png
new file mode 100644
index 000000000..778e3e6e5
Binary files /dev/null and b/staticdata/icons/ships/17728.png differ
diff --git a/staticdata/icons/ships/17730.png b/staticdata/icons/ships/17730.png
new file mode 100644
index 000000000..11e804337
Binary files /dev/null and b/staticdata/icons/ships/17730.png differ
diff --git a/staticdata/icons/ships/17732.png b/staticdata/icons/ships/17732.png
new file mode 100644
index 000000000..b42f1e1c8
Binary files /dev/null and b/staticdata/icons/ships/17732.png differ
diff --git a/staticdata/icons/ships/17734.png b/staticdata/icons/ships/17734.png
new file mode 100644
index 000000000..012766dcb
Binary files /dev/null and b/staticdata/icons/ships/17734.png differ
diff --git a/staticdata/icons/ships/17736.png b/staticdata/icons/ships/17736.png
new file mode 100644
index 000000000..f263def7d
Binary files /dev/null and b/staticdata/icons/ships/17736.png differ
diff --git a/staticdata/icons/ships/17738.png b/staticdata/icons/ships/17738.png
new file mode 100644
index 000000000..e033540bc
Binary files /dev/null and b/staticdata/icons/ships/17738.png differ
diff --git a/staticdata/icons/ships/17740.png b/staticdata/icons/ships/17740.png
new file mode 100644
index 000000000..0be54db51
Binary files /dev/null and b/staticdata/icons/ships/17740.png differ
diff --git a/staticdata/icons/ships/17812.png b/staticdata/icons/ships/17812.png
new file mode 100644
index 000000000..c62b8c4fb
Binary files /dev/null and b/staticdata/icons/ships/17812.png differ
diff --git a/staticdata/icons/ships/17841.png b/staticdata/icons/ships/17841.png
new file mode 100644
index 000000000..5e07e9259
Binary files /dev/null and b/staticdata/icons/ships/17841.png differ
diff --git a/staticdata/icons/ships/17843.png b/staticdata/icons/ships/17843.png
new file mode 100644
index 000000000..b82fb145f
Binary files /dev/null and b/staticdata/icons/ships/17843.png differ
diff --git a/staticdata/icons/ships/17918.png b/staticdata/icons/ships/17918.png
new file mode 100644
index 000000000..cb1b5e0b0
Binary files /dev/null and b/staticdata/icons/ships/17918.png differ
diff --git a/staticdata/icons/ships/17920.png b/staticdata/icons/ships/17920.png
new file mode 100644
index 000000000..bb8cdd015
Binary files /dev/null and b/staticdata/icons/ships/17920.png differ
diff --git a/staticdata/icons/ships/17922.png b/staticdata/icons/ships/17922.png
new file mode 100644
index 000000000..c7d1f4cbb
Binary files /dev/null and b/staticdata/icons/ships/17922.png differ
diff --git a/staticdata/icons/ships/17924.png b/staticdata/icons/ships/17924.png
new file mode 100644
index 000000000..58bb128b0
Binary files /dev/null and b/staticdata/icons/ships/17924.png differ
diff --git a/staticdata/icons/ships/17926.png b/staticdata/icons/ships/17926.png
new file mode 100644
index 000000000..7645b5730
Binary files /dev/null and b/staticdata/icons/ships/17926.png differ
diff --git a/staticdata/icons/ships/17928.png b/staticdata/icons/ships/17928.png
new file mode 100644
index 000000000..4dddb5046
Binary files /dev/null and b/staticdata/icons/ships/17928.png differ
diff --git a/staticdata/icons/ships/17930.png b/staticdata/icons/ships/17930.png
new file mode 100644
index 000000000..0bff29917
Binary files /dev/null and b/staticdata/icons/ships/17930.png differ
diff --git a/staticdata/icons/ships/17932.png b/staticdata/icons/ships/17932.png
new file mode 100644
index 000000000..74ca9aa43
Binary files /dev/null and b/staticdata/icons/ships/17932.png differ
diff --git a/staticdata/icons/ships/1896.png b/staticdata/icons/ships/1896.png
new file mode 100644
index 000000000..fb829a445
Binary files /dev/null and b/staticdata/icons/ships/1896.png differ
diff --git a/staticdata/icons/ships/1898.png b/staticdata/icons/ships/1898.png
new file mode 100644
index 000000000..9cc6eb051
Binary files /dev/null and b/staticdata/icons/ships/1898.png differ
diff --git a/staticdata/icons/ships/1900.png b/staticdata/icons/ships/1900.png
new file mode 100644
index 000000000..0163caea3
Binary files /dev/null and b/staticdata/icons/ships/1900.png differ
diff --git a/staticdata/icons/ships/1902.png b/staticdata/icons/ships/1902.png
new file mode 100644
index 000000000..efae0b1fd
Binary files /dev/null and b/staticdata/icons/ships/1902.png differ
diff --git a/staticdata/icons/ships/1904.png b/staticdata/icons/ships/1904.png
new file mode 100644
index 000000000..99ba6e876
Binary files /dev/null and b/staticdata/icons/ships/1904.png differ
diff --git a/staticdata/icons/ships/1906.png b/staticdata/icons/ships/1906.png
new file mode 100644
index 000000000..f132c99d2
Binary files /dev/null and b/staticdata/icons/ships/1906.png differ
diff --git a/staticdata/icons/ships/1908.png b/staticdata/icons/ships/1908.png
new file mode 100644
index 000000000..e882a9373
Binary files /dev/null and b/staticdata/icons/ships/1908.png differ
diff --git a/staticdata/icons/ships/1910.png b/staticdata/icons/ships/1910.png
new file mode 100644
index 000000000..fb804d9ef
Binary files /dev/null and b/staticdata/icons/ships/1910.png differ
diff --git a/staticdata/icons/ships/1912.png b/staticdata/icons/ships/1912.png
new file mode 100644
index 000000000..c21ec30f3
Binary files /dev/null and b/staticdata/icons/ships/1912.png differ
diff --git a/staticdata/icons/ships/1914.png b/staticdata/icons/ships/1914.png
new file mode 100644
index 000000000..9d3751f55
Binary files /dev/null and b/staticdata/icons/ships/1914.png differ
diff --git a/staticdata/icons/ships/1916.png b/staticdata/icons/ships/1916.png
new file mode 100644
index 000000000..0cd825994
Binary files /dev/null and b/staticdata/icons/ships/1916.png differ
diff --git a/staticdata/icons/ships/1918.png b/staticdata/icons/ships/1918.png
new file mode 100644
index 000000000..058f97042
Binary files /dev/null and b/staticdata/icons/ships/1918.png differ
diff --git a/staticdata/icons/ships/1944.png b/staticdata/icons/ships/1944.png
new file mode 100644
index 000000000..08ab97078
Binary files /dev/null and b/staticdata/icons/ships/1944.png differ
diff --git a/staticdata/icons/ships/19720.png b/staticdata/icons/ships/19720.png
new file mode 100644
index 000000000..a9d7b8558
Binary files /dev/null and b/staticdata/icons/ships/19720.png differ
diff --git a/staticdata/icons/ships/19722.png b/staticdata/icons/ships/19722.png
new file mode 100644
index 000000000..0fdc7bc1e
Binary files /dev/null and b/staticdata/icons/ships/19722.png differ
diff --git a/staticdata/icons/ships/19724.png b/staticdata/icons/ships/19724.png
new file mode 100644
index 000000000..9a5848d7f
Binary files /dev/null and b/staticdata/icons/ships/19724.png differ
diff --git a/staticdata/icons/ships/19726.png b/staticdata/icons/ships/19726.png
new file mode 100644
index 000000000..8b17fbccb
Binary files /dev/null and b/staticdata/icons/ships/19726.png differ
diff --git a/staticdata/icons/ships/19744.png b/staticdata/icons/ships/19744.png
new file mode 100644
index 000000000..3bf76a0c4
Binary files /dev/null and b/staticdata/icons/ships/19744.png differ
diff --git a/staticdata/icons/ships/19770.png b/staticdata/icons/ships/19770.png
new file mode 100644
index 000000000..de066a437
Binary files /dev/null and b/staticdata/icons/ships/19770.png differ
diff --git a/staticdata/icons/ships/2006.png b/staticdata/icons/ships/2006.png
new file mode 100644
index 000000000..6b5bfc08e
Binary files /dev/null and b/staticdata/icons/ships/2006.png differ
diff --git a/staticdata/icons/ships/20067.png b/staticdata/icons/ships/20067.png
new file mode 100644
index 000000000..5a2222fd1
Binary files /dev/null and b/staticdata/icons/ships/20067.png differ
diff --git a/staticdata/icons/ships/20122.png b/staticdata/icons/ships/20122.png
new file mode 100644
index 000000000..fe33bc69d
Binary files /dev/null and b/staticdata/icons/ships/20122.png differ
diff --git a/staticdata/icons/ships/20125.png b/staticdata/icons/ships/20125.png
new file mode 100644
index 000000000..0506b5a34
Binary files /dev/null and b/staticdata/icons/ships/20125.png differ
diff --git a/staticdata/icons/ships/20183.png b/staticdata/icons/ships/20183.png
new file mode 100644
index 000000000..19c75b7fd
Binary files /dev/null and b/staticdata/icons/ships/20183.png differ
diff --git a/staticdata/icons/ships/20185.png b/staticdata/icons/ships/20185.png
new file mode 100644
index 000000000..f23c9cf3f
Binary files /dev/null and b/staticdata/icons/ships/20185.png differ
diff --git a/staticdata/icons/ships/20187.png b/staticdata/icons/ships/20187.png
new file mode 100644
index 000000000..28e047952
Binary files /dev/null and b/staticdata/icons/ships/20187.png differ
diff --git a/staticdata/icons/ships/20189.png b/staticdata/icons/ships/20189.png
new file mode 100644
index 000000000..62b7e0d05
Binary files /dev/null and b/staticdata/icons/ships/20189.png differ
diff --git a/staticdata/icons/ships/2078.png b/staticdata/icons/ships/2078.png
new file mode 100644
index 000000000..6ad220303
Binary files /dev/null and b/staticdata/icons/ships/2078.png differ
diff --git a/staticdata/icons/ships/21097.png b/staticdata/icons/ships/21097.png
new file mode 100644
index 000000000..084e241e9
Binary files /dev/null and b/staticdata/icons/ships/21097.png differ
diff --git a/staticdata/icons/ships/2161.png b/staticdata/icons/ships/2161.png
new file mode 100644
index 000000000..7748ff087
Binary files /dev/null and b/staticdata/icons/ships/2161.png differ
diff --git a/staticdata/icons/ships/21628.png b/staticdata/icons/ships/21628.png
new file mode 100644
index 000000000..9db69e4f6
Binary files /dev/null and b/staticdata/icons/ships/21628.png differ
diff --git a/staticdata/icons/ships/2164.png b/staticdata/icons/ships/2164.png
new file mode 100644
index 000000000..54ea98a0a
Binary files /dev/null and b/staticdata/icons/ships/2164.png differ
diff --git a/staticdata/icons/ships/2166.png b/staticdata/icons/ships/2166.png
new file mode 100644
index 000000000..0e72e6c94
Binary files /dev/null and b/staticdata/icons/ships/2166.png differ
diff --git a/staticdata/icons/ships/2168.png b/staticdata/icons/ships/2168.png
new file mode 100644
index 000000000..3b25eaf5f
Binary files /dev/null and b/staticdata/icons/ships/2168.png differ
diff --git a/staticdata/icons/ships/22426.png b/staticdata/icons/ships/22426.png
new file mode 100644
index 000000000..8f452d23b
Binary files /dev/null and b/staticdata/icons/ships/22426.png differ
diff --git a/staticdata/icons/ships/22428.png b/staticdata/icons/ships/22428.png
new file mode 100644
index 000000000..5accdd8e4
Binary files /dev/null and b/staticdata/icons/ships/22428.png differ
diff --git a/staticdata/icons/ships/22430.png b/staticdata/icons/ships/22430.png
new file mode 100644
index 000000000..1e34dbfc1
Binary files /dev/null and b/staticdata/icons/ships/22430.png differ
diff --git a/staticdata/icons/ships/22432.png b/staticdata/icons/ships/22432.png
new file mode 100644
index 000000000..3c6f553e3
Binary files /dev/null and b/staticdata/icons/ships/22432.png differ
diff --git a/staticdata/icons/ships/22434.png b/staticdata/icons/ships/22434.png
new file mode 100644
index 000000000..5e98d2184
Binary files /dev/null and b/staticdata/icons/ships/22434.png differ
diff --git a/staticdata/icons/ships/22436.png b/staticdata/icons/ships/22436.png
new file mode 100644
index 000000000..b31dd94f6
Binary files /dev/null and b/staticdata/icons/ships/22436.png differ
diff --git a/staticdata/icons/ships/22438.png b/staticdata/icons/ships/22438.png
new file mode 100644
index 000000000..3348bd789
Binary files /dev/null and b/staticdata/icons/ships/22438.png differ
diff --git a/staticdata/icons/ships/22440.png b/staticdata/icons/ships/22440.png
new file mode 100644
index 000000000..b86bcca37
Binary files /dev/null and b/staticdata/icons/ships/22440.png differ
diff --git a/staticdata/icons/ships/22442.png b/staticdata/icons/ships/22442.png
new file mode 100644
index 000000000..d4db5fa86
Binary files /dev/null and b/staticdata/icons/ships/22442.png differ
diff --git a/staticdata/icons/ships/22444.png b/staticdata/icons/ships/22444.png
new file mode 100644
index 000000000..2a2b52f6b
Binary files /dev/null and b/staticdata/icons/ships/22444.png differ
diff --git a/staticdata/icons/ships/22446.png b/staticdata/icons/ships/22446.png
new file mode 100644
index 000000000..e82299bcb
Binary files /dev/null and b/staticdata/icons/ships/22446.png differ
diff --git a/staticdata/icons/ships/22448.png b/staticdata/icons/ships/22448.png
new file mode 100644
index 000000000..b1337bda7
Binary files /dev/null and b/staticdata/icons/ships/22448.png differ
diff --git a/staticdata/icons/ships/22450.png b/staticdata/icons/ships/22450.png
new file mode 100644
index 000000000..080acc1e0
Binary files /dev/null and b/staticdata/icons/ships/22450.png differ
diff --git a/staticdata/icons/ships/22452.png b/staticdata/icons/ships/22452.png
new file mode 100644
index 000000000..1e7f9e760
Binary files /dev/null and b/staticdata/icons/ships/22452.png differ
diff --git a/staticdata/icons/ships/22454.png b/staticdata/icons/ships/22454.png
new file mode 100644
index 000000000..1d2a00c2d
Binary files /dev/null and b/staticdata/icons/ships/22454.png differ
diff --git a/staticdata/icons/ships/22456.png b/staticdata/icons/ships/22456.png
new file mode 100644
index 000000000..f3450d024
Binary files /dev/null and b/staticdata/icons/ships/22456.png differ
diff --git a/staticdata/icons/ships/22458.png b/staticdata/icons/ships/22458.png
new file mode 100644
index 000000000..763868238
Binary files /dev/null and b/staticdata/icons/ships/22458.png differ
diff --git a/staticdata/icons/ships/22460.png b/staticdata/icons/ships/22460.png
new file mode 100644
index 000000000..8e94ba0b7
Binary files /dev/null and b/staticdata/icons/ships/22460.png differ
diff --git a/staticdata/icons/ships/22462.png b/staticdata/icons/ships/22462.png
new file mode 100644
index 000000000..98af6ee4c
Binary files /dev/null and b/staticdata/icons/ships/22462.png differ
diff --git a/staticdata/icons/ships/22464.png b/staticdata/icons/ships/22464.png
new file mode 100644
index 000000000..654850021
Binary files /dev/null and b/staticdata/icons/ships/22464.png differ
diff --git a/staticdata/icons/ships/22466.png b/staticdata/icons/ships/22466.png
new file mode 100644
index 000000000..36aea9526
Binary files /dev/null and b/staticdata/icons/ships/22466.png differ
diff --git a/staticdata/icons/ships/22468.png b/staticdata/icons/ships/22468.png
new file mode 100644
index 000000000..f828d4a40
Binary files /dev/null and b/staticdata/icons/ships/22468.png differ
diff --git a/staticdata/icons/ships/22470.png b/staticdata/icons/ships/22470.png
new file mode 100644
index 000000000..537160f02
Binary files /dev/null and b/staticdata/icons/ships/22470.png differ
diff --git a/staticdata/icons/ships/22472.png b/staticdata/icons/ships/22472.png
new file mode 100644
index 000000000..78269e657
Binary files /dev/null and b/staticdata/icons/ships/22472.png differ
diff --git a/staticdata/icons/ships/22474.png b/staticdata/icons/ships/22474.png
new file mode 100644
index 000000000..934af3f4f
Binary files /dev/null and b/staticdata/icons/ships/22474.png differ
diff --git a/staticdata/icons/ships/22544.png b/staticdata/icons/ships/22544.png
new file mode 100644
index 000000000..382975e51
Binary files /dev/null and b/staticdata/icons/ships/22544.png differ
diff --git a/staticdata/icons/ships/22546.png b/staticdata/icons/ships/22546.png
new file mode 100644
index 000000000..196691a54
Binary files /dev/null and b/staticdata/icons/ships/22546.png differ
diff --git a/staticdata/icons/ships/22548.png b/staticdata/icons/ships/22548.png
new file mode 100644
index 000000000..c71452873
Binary files /dev/null and b/staticdata/icons/ships/22548.png differ
diff --git a/staticdata/icons/ships/22579.png b/staticdata/icons/ships/22579.png
new file mode 100644
index 000000000..6bdeadaf0
Binary files /dev/null and b/staticdata/icons/ships/22579.png differ
diff --git a/staticdata/icons/ships/22852.png b/staticdata/icons/ships/22852.png
new file mode 100644
index 000000000..102b073d5
Binary files /dev/null and b/staticdata/icons/ships/22852.png differ
diff --git a/staticdata/icons/ships/23693.png b/staticdata/icons/ships/23693.png
new file mode 100644
index 000000000..f585a90ce
Binary files /dev/null and b/staticdata/icons/ships/23693.png differ
diff --git a/staticdata/icons/ships/23757.png b/staticdata/icons/ships/23757.png
new file mode 100644
index 000000000..2588cb2db
Binary files /dev/null and b/staticdata/icons/ships/23757.png differ
diff --git a/staticdata/icons/ships/23773.png b/staticdata/icons/ships/23773.png
new file mode 100644
index 000000000..307d0ab6b
Binary files /dev/null and b/staticdata/icons/ships/23773.png differ
diff --git a/staticdata/icons/ships/23911.png b/staticdata/icons/ships/23911.png
new file mode 100644
index 000000000..25a209f54
Binary files /dev/null and b/staticdata/icons/ships/23911.png differ
diff --git a/staticdata/icons/ships/23913.png b/staticdata/icons/ships/23913.png
new file mode 100644
index 000000000..aa18ae9b7
Binary files /dev/null and b/staticdata/icons/ships/23913.png differ
diff --git a/staticdata/icons/ships/23915.png b/staticdata/icons/ships/23915.png
new file mode 100644
index 000000000..960c4d2aa
Binary files /dev/null and b/staticdata/icons/ships/23915.png differ
diff --git a/staticdata/icons/ships/23917.png b/staticdata/icons/ships/23917.png
new file mode 100644
index 000000000..8c5f41c2e
Binary files /dev/null and b/staticdata/icons/ships/23917.png differ
diff --git a/staticdata/icons/ships/23919.png b/staticdata/icons/ships/23919.png
new file mode 100644
index 000000000..09b56093a
Binary files /dev/null and b/staticdata/icons/ships/23919.png differ
diff --git a/staticdata/icons/ships/24448.png b/staticdata/icons/ships/24448.png
new file mode 100644
index 000000000..604d6b3ac
Binary files /dev/null and b/staticdata/icons/ships/24448.png differ
diff --git a/staticdata/icons/ships/24483.png b/staticdata/icons/ships/24483.png
new file mode 100644
index 000000000..2aa2c632b
Binary files /dev/null and b/staticdata/icons/ships/24483.png differ
diff --git a/staticdata/icons/ships/24688.png b/staticdata/icons/ships/24688.png
new file mode 100644
index 000000000..f2df4652d
Binary files /dev/null and b/staticdata/icons/ships/24688.png differ
diff --git a/staticdata/icons/ships/24690.png b/staticdata/icons/ships/24690.png
new file mode 100644
index 000000000..4dba61a38
Binary files /dev/null and b/staticdata/icons/ships/24690.png differ
diff --git a/staticdata/icons/ships/24692.png b/staticdata/icons/ships/24692.png
new file mode 100644
index 000000000..1cf5b3648
Binary files /dev/null and b/staticdata/icons/ships/24692.png differ
diff --git a/staticdata/icons/ships/24694.png b/staticdata/icons/ships/24694.png
new file mode 100644
index 000000000..94dae79d6
Binary files /dev/null and b/staticdata/icons/ships/24694.png differ
diff --git a/staticdata/icons/ships/24696.png b/staticdata/icons/ships/24696.png
new file mode 100644
index 000000000..f18e8beed
Binary files /dev/null and b/staticdata/icons/ships/24696.png differ
diff --git a/staticdata/icons/ships/24698.png b/staticdata/icons/ships/24698.png
new file mode 100644
index 000000000..9eaa6c62f
Binary files /dev/null and b/staticdata/icons/ships/24698.png differ
diff --git a/staticdata/icons/ships/24700.png b/staticdata/icons/ships/24700.png
new file mode 100644
index 000000000..404d15e77
Binary files /dev/null and b/staticdata/icons/ships/24700.png differ
diff --git a/staticdata/icons/ships/24702.png b/staticdata/icons/ships/24702.png
new file mode 100644
index 000000000..5f12f88c5
Binary files /dev/null and b/staticdata/icons/ships/24702.png differ
diff --git a/staticdata/icons/ships/25426.png b/staticdata/icons/ships/25426.png
new file mode 100644
index 000000000..8ed617b3b
Binary files /dev/null and b/staticdata/icons/ships/25426.png differ
diff --git a/staticdata/icons/ships/25560.png b/staticdata/icons/ships/25560.png
new file mode 100644
index 000000000..1768c7781
Binary files /dev/null and b/staticdata/icons/ships/25560.png differ
diff --git a/staticdata/icons/ships/26840.png b/staticdata/icons/ships/26840.png
new file mode 100644
index 000000000..8f200c78a
Binary files /dev/null and b/staticdata/icons/ships/26840.png differ
diff --git a/staticdata/icons/ships/26842.png b/staticdata/icons/ships/26842.png
new file mode 100644
index 000000000..92445ff68
Binary files /dev/null and b/staticdata/icons/ships/26842.png differ
diff --git a/staticdata/icons/ships/26872.png b/staticdata/icons/ships/26872.png
new file mode 100644
index 000000000..ce613c1a0
Binary files /dev/null and b/staticdata/icons/ships/26872.png differ
diff --git a/staticdata/icons/ships/26874.png b/staticdata/icons/ships/26874.png
new file mode 100644
index 000000000..db3fd9964
Binary files /dev/null and b/staticdata/icons/ships/26874.png differ
diff --git a/staticdata/icons/ships/26876.png b/staticdata/icons/ships/26876.png
new file mode 100644
index 000000000..7965c1d59
Binary files /dev/null and b/staticdata/icons/ships/26876.png differ
diff --git a/staticdata/icons/ships/27299.png b/staticdata/icons/ships/27299.png
new file mode 100644
index 000000000..2f93535a1
Binary files /dev/null and b/staticdata/icons/ships/27299.png differ
diff --git a/staticdata/icons/ships/27301.png b/staticdata/icons/ships/27301.png
new file mode 100644
index 000000000..084e241e9
Binary files /dev/null and b/staticdata/icons/ships/27301.png differ
diff --git a/staticdata/icons/ships/27303.png b/staticdata/icons/ships/27303.png
new file mode 100644
index 000000000..ae2388de0
Binary files /dev/null and b/staticdata/icons/ships/27303.png differ
diff --git a/staticdata/icons/ships/27305.png b/staticdata/icons/ships/27305.png
new file mode 100644
index 000000000..8a1d09b75
Binary files /dev/null and b/staticdata/icons/ships/27305.png differ
diff --git a/staticdata/icons/ships/28310.png b/staticdata/icons/ships/28310.png
new file mode 100644
index 000000000..4151dfee5
Binary files /dev/null and b/staticdata/icons/ships/28310.png differ
diff --git a/staticdata/icons/ships/2834.png b/staticdata/icons/ships/2834.png
new file mode 100644
index 000000000..9bb9e43fe
Binary files /dev/null and b/staticdata/icons/ships/2834.png differ
diff --git a/staticdata/icons/ships/28352.png b/staticdata/icons/ships/28352.png
new file mode 100644
index 000000000..5f108a580
Binary files /dev/null and b/staticdata/icons/ships/28352.png differ
diff --git a/staticdata/icons/ships/2836.png b/staticdata/icons/ships/2836.png
new file mode 100644
index 000000000..ee260655e
Binary files /dev/null and b/staticdata/icons/ships/2836.png differ
diff --git a/staticdata/icons/ships/28606.png b/staticdata/icons/ships/28606.png
new file mode 100644
index 000000000..a5cddb1c4
Binary files /dev/null and b/staticdata/icons/ships/28606.png differ
diff --git a/staticdata/icons/ships/2863.png b/staticdata/icons/ships/2863.png
new file mode 100644
index 000000000..a7d04e4c6
Binary files /dev/null and b/staticdata/icons/ships/2863.png differ
diff --git a/staticdata/icons/ships/28659.png b/staticdata/icons/ships/28659.png
new file mode 100644
index 000000000..70b56d9ab
Binary files /dev/null and b/staticdata/icons/ships/28659.png differ
diff --git a/staticdata/icons/ships/28661.png b/staticdata/icons/ships/28661.png
new file mode 100644
index 000000000..938224376
Binary files /dev/null and b/staticdata/icons/ships/28661.png differ
diff --git a/staticdata/icons/ships/28665.png b/staticdata/icons/ships/28665.png
new file mode 100644
index 000000000..95710fa90
Binary files /dev/null and b/staticdata/icons/ships/28665.png differ
diff --git a/staticdata/icons/ships/28710.png b/staticdata/icons/ships/28710.png
new file mode 100644
index 000000000..3115488c6
Binary files /dev/null and b/staticdata/icons/ships/28710.png differ
diff --git a/staticdata/icons/ships/28824.png b/staticdata/icons/ships/28824.png
new file mode 100644
index 000000000..93cf95954
Binary files /dev/null and b/staticdata/icons/ships/28824.png differ
diff --git a/staticdata/icons/ships/28844.png b/staticdata/icons/ships/28844.png
new file mode 100644
index 000000000..5c2aefe51
Binary files /dev/null and b/staticdata/icons/ships/28844.png differ
diff --git a/staticdata/icons/ships/28846.png b/staticdata/icons/ships/28846.png
new file mode 100644
index 000000000..244120381
Binary files /dev/null and b/staticdata/icons/ships/28846.png differ
diff --git a/staticdata/icons/ships/28848.png b/staticdata/icons/ships/28848.png
new file mode 100644
index 000000000..d3f8e3505
Binary files /dev/null and b/staticdata/icons/ships/28848.png differ
diff --git a/staticdata/icons/ships/28850.png b/staticdata/icons/ships/28850.png
new file mode 100644
index 000000000..debdfa223
Binary files /dev/null and b/staticdata/icons/ships/28850.png differ
diff --git a/staticdata/icons/ships/29248.png b/staticdata/icons/ships/29248.png
new file mode 100644
index 000000000..78c7f6990
Binary files /dev/null and b/staticdata/icons/ships/29248.png differ
diff --git a/staticdata/icons/ships/29266.png b/staticdata/icons/ships/29266.png
new file mode 100644
index 000000000..451cd2312
Binary files /dev/null and b/staticdata/icons/ships/29266.png differ
diff --git a/staticdata/icons/ships/29328.png b/staticdata/icons/ships/29328.png
new file mode 100644
index 000000000..2f93535a1
Binary files /dev/null and b/staticdata/icons/ships/29328.png differ
diff --git a/staticdata/icons/ships/29330.png b/staticdata/icons/ships/29330.png
new file mode 100644
index 000000000..084e241e9
Binary files /dev/null and b/staticdata/icons/ships/29330.png differ
diff --git a/staticdata/icons/ships/29332.png b/staticdata/icons/ships/29332.png
new file mode 100644
index 000000000..ae2388de0
Binary files /dev/null and b/staticdata/icons/ships/29332.png differ
diff --git a/staticdata/icons/ships/29334.png b/staticdata/icons/ships/29334.png
new file mode 100644
index 000000000..8a1d09b75
Binary files /dev/null and b/staticdata/icons/ships/29334.png differ
diff --git a/staticdata/icons/ships/29336.png b/staticdata/icons/ships/29336.png
new file mode 100644
index 000000000..7b9371619
Binary files /dev/null and b/staticdata/icons/ships/29336.png differ
diff --git a/staticdata/icons/ships/29337.png b/staticdata/icons/ships/29337.png
new file mode 100644
index 000000000..00349e1ad
Binary files /dev/null and b/staticdata/icons/ships/29337.png differ
diff --git a/staticdata/icons/ships/29340.png b/staticdata/icons/ships/29340.png
new file mode 100644
index 000000000..f0381d1bf
Binary files /dev/null and b/staticdata/icons/ships/29340.png differ
diff --git a/staticdata/icons/ships/29344.png b/staticdata/icons/ships/29344.png
new file mode 100644
index 000000000..8822abc52
Binary files /dev/null and b/staticdata/icons/ships/29344.png differ
diff --git a/staticdata/icons/ships/2998.png b/staticdata/icons/ships/2998.png
new file mode 100644
index 000000000..e91c6d893
Binary files /dev/null and b/staticdata/icons/ships/2998.png differ
diff --git a/staticdata/icons/ships/29984.png b/staticdata/icons/ships/29984.png
new file mode 100644
index 000000000..7e3c529ce
Binary files /dev/null and b/staticdata/icons/ships/29984.png differ
diff --git a/staticdata/icons/ships/29986.png b/staticdata/icons/ships/29986.png
new file mode 100644
index 000000000..2c99ca0fe
Binary files /dev/null and b/staticdata/icons/ships/29986.png differ
diff --git a/staticdata/icons/ships/29988.png b/staticdata/icons/ships/29988.png
new file mode 100644
index 000000000..9678a31a8
Binary files /dev/null and b/staticdata/icons/ships/29988.png differ
diff --git a/staticdata/icons/ships/29990.png b/staticdata/icons/ships/29990.png
new file mode 100644
index 000000000..0bd28a2a2
Binary files /dev/null and b/staticdata/icons/ships/29990.png differ
diff --git a/staticdata/icons/ships/30842.png b/staticdata/icons/ships/30842.png
new file mode 100644
index 000000000..ee8f75832
Binary files /dev/null and b/staticdata/icons/ships/30842.png differ
diff --git a/staticdata/icons/ships/32207.png b/staticdata/icons/ships/32207.png
new file mode 100644
index 000000000..a2a7ef8c1
Binary files /dev/null and b/staticdata/icons/ships/32207.png differ
diff --git a/staticdata/icons/ships/32209.png b/staticdata/icons/ships/32209.png
new file mode 100644
index 000000000..6bd5e0251
Binary files /dev/null and b/staticdata/icons/ships/32209.png differ
diff --git a/staticdata/icons/ships/32305.png b/staticdata/icons/ships/32305.png
new file mode 100644
index 000000000..41d934ad7
Binary files /dev/null and b/staticdata/icons/ships/32305.png differ
diff --git a/staticdata/icons/ships/32307.png b/staticdata/icons/ships/32307.png
new file mode 100644
index 000000000..26328f04d
Binary files /dev/null and b/staticdata/icons/ships/32307.png differ
diff --git a/staticdata/icons/ships/32309.png b/staticdata/icons/ships/32309.png
new file mode 100644
index 000000000..710dea9ad
Binary files /dev/null and b/staticdata/icons/ships/32309.png differ
diff --git a/staticdata/icons/ships/32311.png b/staticdata/icons/ships/32311.png
new file mode 100644
index 000000000..f5599d02a
Binary files /dev/null and b/staticdata/icons/ships/32311.png differ
diff --git a/staticdata/icons/ships/32788.png b/staticdata/icons/ships/32788.png
new file mode 100644
index 000000000..82965a984
Binary files /dev/null and b/staticdata/icons/ships/32788.png differ
diff --git a/staticdata/icons/ships/32790.png b/staticdata/icons/ships/32790.png
new file mode 100644
index 000000000..e17b41755
Binary files /dev/null and b/staticdata/icons/ships/32790.png differ
diff --git a/staticdata/icons/ships/32840.png b/staticdata/icons/ships/32840.png
new file mode 100644
index 000000000..0db52c753
Binary files /dev/null and b/staticdata/icons/ships/32840.png differ
diff --git a/staticdata/icons/ships/32842.png b/staticdata/icons/ships/32842.png
new file mode 100644
index 000000000..ee1427573
Binary files /dev/null and b/staticdata/icons/ships/32842.png differ
diff --git a/staticdata/icons/ships/32844.png b/staticdata/icons/ships/32844.png
new file mode 100644
index 000000000..c57de8475
Binary files /dev/null and b/staticdata/icons/ships/32844.png differ
diff --git a/staticdata/icons/ships/32846.png b/staticdata/icons/ships/32846.png
new file mode 100644
index 000000000..042bb5405
Binary files /dev/null and b/staticdata/icons/ships/32846.png differ
diff --git a/staticdata/icons/ships/32848.png b/staticdata/icons/ships/32848.png
new file mode 100644
index 000000000..297a4e531
Binary files /dev/null and b/staticdata/icons/ships/32848.png differ
diff --git a/staticdata/icons/ships/32872.png b/staticdata/icons/ships/32872.png
new file mode 100644
index 000000000..cef205f50
Binary files /dev/null and b/staticdata/icons/ships/32872.png differ
diff --git a/staticdata/icons/ships/32874.png b/staticdata/icons/ships/32874.png
new file mode 100644
index 000000000..e372c1781
Binary files /dev/null and b/staticdata/icons/ships/32874.png differ
diff --git a/staticdata/icons/ships/32876.png b/staticdata/icons/ships/32876.png
new file mode 100644
index 000000000..3ae8524a2
Binary files /dev/null and b/staticdata/icons/ships/32876.png differ
diff --git a/staticdata/icons/ships/32878.png b/staticdata/icons/ships/32878.png
new file mode 100644
index 000000000..a2d43c85b
Binary files /dev/null and b/staticdata/icons/ships/32878.png differ
diff --git a/staticdata/icons/ships/32880.png b/staticdata/icons/ships/32880.png
new file mode 100644
index 000000000..b3c56b562
Binary files /dev/null and b/staticdata/icons/ships/32880.png differ
diff --git a/staticdata/icons/ships/32983.png b/staticdata/icons/ships/32983.png
new file mode 100644
index 000000000..b390dda38
Binary files /dev/null and b/staticdata/icons/ships/32983.png differ
diff --git a/staticdata/icons/ships/32985.png b/staticdata/icons/ships/32985.png
new file mode 100644
index 000000000..a0c8139d5
Binary files /dev/null and b/staticdata/icons/ships/32985.png differ
diff --git a/staticdata/icons/ships/32987.png b/staticdata/icons/ships/32987.png
new file mode 100644
index 000000000..589860ecd
Binary files /dev/null and b/staticdata/icons/ships/32987.png differ
diff --git a/staticdata/icons/ships/32989.png b/staticdata/icons/ships/32989.png
new file mode 100644
index 000000000..64c318366
Binary files /dev/null and b/staticdata/icons/ships/32989.png differ
diff --git a/staticdata/icons/ships/33079.png b/staticdata/icons/ships/33079.png
new file mode 100644
index 000000000..6e484c865
Binary files /dev/null and b/staticdata/icons/ships/33079.png differ
diff --git a/staticdata/icons/ships/33081.png b/staticdata/icons/ships/33081.png
new file mode 100644
index 000000000..d90417f1a
Binary files /dev/null and b/staticdata/icons/ships/33081.png differ
diff --git a/staticdata/icons/ships/33083.png b/staticdata/icons/ships/33083.png
new file mode 100644
index 000000000..87844c4a4
Binary files /dev/null and b/staticdata/icons/ships/33083.png differ
diff --git a/staticdata/icons/ships/33151.png b/staticdata/icons/ships/33151.png
new file mode 100644
index 000000000..c796c6fa0
Binary files /dev/null and b/staticdata/icons/ships/33151.png differ
diff --git a/staticdata/icons/ships/33153.png b/staticdata/icons/ships/33153.png
new file mode 100644
index 000000000..3dd2db02d
Binary files /dev/null and b/staticdata/icons/ships/33153.png differ
diff --git a/staticdata/icons/ships/33155.png b/staticdata/icons/ships/33155.png
new file mode 100644
index 000000000..16108ef51
Binary files /dev/null and b/staticdata/icons/ships/33155.png differ
diff --git a/staticdata/icons/ships/33157.png b/staticdata/icons/ships/33157.png
new file mode 100644
index 000000000..b83f8b7d1
Binary files /dev/null and b/staticdata/icons/ships/33157.png differ
diff --git a/staticdata/icons/ships/3514.png b/staticdata/icons/ships/3514.png
new file mode 100644
index 000000000..61694d58f
Binary files /dev/null and b/staticdata/icons/ships/3514.png differ
diff --git a/staticdata/icons/ships/3516.png b/staticdata/icons/ships/3516.png
new file mode 100644
index 000000000..78e36d5a7
Binary files /dev/null and b/staticdata/icons/ships/3516.png differ
diff --git a/staticdata/icons/ships/3518.png b/staticdata/icons/ships/3518.png
new file mode 100644
index 000000000..30f7b3cff
Binary files /dev/null and b/staticdata/icons/ships/3518.png differ
diff --git a/staticdata/icons/ships/3532.png b/staticdata/icons/ships/3532.png
new file mode 100644
index 000000000..ceea3de83
Binary files /dev/null and b/staticdata/icons/ships/3532.png differ
diff --git a/staticdata/icons/ships/3628.png b/staticdata/icons/ships/3628.png
new file mode 100644
index 000000000..61694d58f
Binary files /dev/null and b/staticdata/icons/ships/3628.png differ
diff --git a/staticdata/icons/ships/3751.png b/staticdata/icons/ships/3751.png
new file mode 100644
index 000000000..451cd2312
Binary files /dev/null and b/staticdata/icons/ships/3751.png differ
diff --git a/staticdata/icons/ships/3753.png b/staticdata/icons/ships/3753.png
new file mode 100644
index 000000000..a0d4eef7c
Binary files /dev/null and b/staticdata/icons/ships/3753.png differ
diff --git a/staticdata/icons/ships/3756.png b/staticdata/icons/ships/3756.png
new file mode 100644
index 000000000..66e372438
Binary files /dev/null and b/staticdata/icons/ships/3756.png differ
diff --git a/staticdata/icons/ships/3764.png b/staticdata/icons/ships/3764.png
new file mode 100644
index 000000000..75ca258f8
Binary files /dev/null and b/staticdata/icons/ships/3764.png differ
diff --git a/staticdata/icons/ships/3766.png b/staticdata/icons/ships/3766.png
new file mode 100644
index 000000000..959984eac
Binary files /dev/null and b/staticdata/icons/ships/3766.png differ
diff --git a/staticdata/icons/ships/3768.png b/staticdata/icons/ships/3768.png
new file mode 100644
index 000000000..7ab522487
Binary files /dev/null and b/staticdata/icons/ships/3768.png differ
diff --git a/staticdata/icons/ships/3878.png b/staticdata/icons/ships/3878.png
new file mode 100644
index 000000000..b51863a8c
Binary files /dev/null and b/staticdata/icons/ships/3878.png differ
diff --git a/staticdata/icons/ships/4005.png b/staticdata/icons/ships/4005.png
new file mode 100644
index 000000000..69d4bbd0b
Binary files /dev/null and b/staticdata/icons/ships/4005.png differ
diff --git a/staticdata/icons/ships/4302.png b/staticdata/icons/ships/4302.png
new file mode 100644
index 000000000..6a2460081
Binary files /dev/null and b/staticdata/icons/ships/4302.png differ
diff --git a/staticdata/icons/ships/4306.png b/staticdata/icons/ships/4306.png
new file mode 100644
index 000000000..79cd94abb
Binary files /dev/null and b/staticdata/icons/ships/4306.png differ
diff --git a/staticdata/icons/ships/4308.png b/staticdata/icons/ships/4308.png
new file mode 100644
index 000000000..f1928e6a4
Binary files /dev/null and b/staticdata/icons/ships/4308.png differ
diff --git a/staticdata/icons/ships/4310.png b/staticdata/icons/ships/4310.png
new file mode 100644
index 000000000..f152177df
Binary files /dev/null and b/staticdata/icons/ships/4310.png differ
diff --git a/staticdata/icons/ships/4363.png b/staticdata/icons/ships/4363.png
new file mode 100644
index 000000000..66f877fef
Binary files /dev/null and b/staticdata/icons/ships/4363.png differ
diff --git a/staticdata/icons/ships/4388.png b/staticdata/icons/ships/4388.png
new file mode 100644
index 000000000..f974725f6
Binary files /dev/null and b/staticdata/icons/ships/4388.png differ
diff --git a/staticdata/icons/ships/582.png b/staticdata/icons/ships/582.png
new file mode 100644
index 000000000..6d1d0cb30
Binary files /dev/null and b/staticdata/icons/ships/582.png differ
diff --git a/staticdata/icons/ships/583.png b/staticdata/icons/ships/583.png
new file mode 100644
index 000000000..c3fa0a452
Binary files /dev/null and b/staticdata/icons/ships/583.png differ
diff --git a/staticdata/icons/ships/584.png b/staticdata/icons/ships/584.png
new file mode 100644
index 000000000..61c652f77
Binary files /dev/null and b/staticdata/icons/ships/584.png differ
diff --git a/staticdata/icons/ships/585.png b/staticdata/icons/ships/585.png
new file mode 100644
index 000000000..3e19f9f63
Binary files /dev/null and b/staticdata/icons/ships/585.png differ
diff --git a/staticdata/icons/ships/586.png b/staticdata/icons/ships/586.png
new file mode 100644
index 000000000..1da9beeed
Binary files /dev/null and b/staticdata/icons/ships/586.png differ
diff --git a/staticdata/icons/ships/587.png b/staticdata/icons/ships/587.png
new file mode 100644
index 000000000..d8690360a
Binary files /dev/null and b/staticdata/icons/ships/587.png differ
diff --git a/staticdata/icons/ships/588.png b/staticdata/icons/ships/588.png
new file mode 100644
index 000000000..3e826073d
Binary files /dev/null and b/staticdata/icons/ships/588.png differ
diff --git a/staticdata/icons/ships/589.png b/staticdata/icons/ships/589.png
new file mode 100644
index 000000000..915f1fee0
Binary files /dev/null and b/staticdata/icons/ships/589.png differ
diff --git a/staticdata/icons/ships/590.png b/staticdata/icons/ships/590.png
new file mode 100644
index 000000000..5a41cef12
Binary files /dev/null and b/staticdata/icons/ships/590.png differ
diff --git a/staticdata/icons/ships/591.png b/staticdata/icons/ships/591.png
new file mode 100644
index 000000000..a99578aa0
Binary files /dev/null and b/staticdata/icons/ships/591.png differ
diff --git a/staticdata/icons/ships/592.png b/staticdata/icons/ships/592.png
new file mode 100644
index 000000000..dc0ace527
Binary files /dev/null and b/staticdata/icons/ships/592.png differ
diff --git a/staticdata/icons/ships/593.png b/staticdata/icons/ships/593.png
new file mode 100644
index 000000000..eee9cc72b
Binary files /dev/null and b/staticdata/icons/ships/593.png differ
diff --git a/staticdata/icons/ships/594.png b/staticdata/icons/ships/594.png
new file mode 100644
index 000000000..d94f86906
Binary files /dev/null and b/staticdata/icons/ships/594.png differ
diff --git a/staticdata/icons/ships/595.png b/staticdata/icons/ships/595.png
new file mode 100644
index 000000000..bd86b7d8b
Binary files /dev/null and b/staticdata/icons/ships/595.png differ
diff --git a/staticdata/icons/ships/596.png b/staticdata/icons/ships/596.png
new file mode 100644
index 000000000..6c42b338b
Binary files /dev/null and b/staticdata/icons/ships/596.png differ
diff --git a/staticdata/icons/ships/597.png b/staticdata/icons/ships/597.png
new file mode 100644
index 000000000..1d2384cb9
Binary files /dev/null and b/staticdata/icons/ships/597.png differ
diff --git a/staticdata/icons/ships/598.png b/staticdata/icons/ships/598.png
new file mode 100644
index 000000000..4433223cb
Binary files /dev/null and b/staticdata/icons/ships/598.png differ
diff --git a/staticdata/icons/ships/599.png b/staticdata/icons/ships/599.png
new file mode 100644
index 000000000..7fd1ce78b
Binary files /dev/null and b/staticdata/icons/ships/599.png differ
diff --git a/staticdata/icons/ships/600.png b/staticdata/icons/ships/600.png
new file mode 100644
index 000000000..ab6e5cfcf
Binary files /dev/null and b/staticdata/icons/ships/600.png differ
diff --git a/staticdata/icons/ships/601.png b/staticdata/icons/ships/601.png
new file mode 100644
index 000000000..a0c283dd8
Binary files /dev/null and b/staticdata/icons/ships/601.png differ
diff --git a/staticdata/icons/ships/602.png b/staticdata/icons/ships/602.png
new file mode 100644
index 000000000..ce049645e
Binary files /dev/null and b/staticdata/icons/ships/602.png differ
diff --git a/staticdata/icons/ships/603.png b/staticdata/icons/ships/603.png
new file mode 100644
index 000000000..cd32f06ba
Binary files /dev/null and b/staticdata/icons/ships/603.png differ
diff --git a/staticdata/icons/ships/604.png b/staticdata/icons/ships/604.png
new file mode 100644
index 000000000..6d70adc14
Binary files /dev/null and b/staticdata/icons/ships/604.png differ
diff --git a/staticdata/icons/ships/605.png b/staticdata/icons/ships/605.png
new file mode 100644
index 000000000..c112d7f55
Binary files /dev/null and b/staticdata/icons/ships/605.png differ
diff --git a/staticdata/icons/ships/606.png b/staticdata/icons/ships/606.png
new file mode 100644
index 000000000..92b03749c
Binary files /dev/null and b/staticdata/icons/ships/606.png differ
diff --git a/staticdata/icons/ships/607.png b/staticdata/icons/ships/607.png
new file mode 100644
index 000000000..ca4d7326e
Binary files /dev/null and b/staticdata/icons/ships/607.png differ
diff --git a/staticdata/icons/ships/608.png b/staticdata/icons/ships/608.png
new file mode 100644
index 000000000..0a60d4bfc
Binary files /dev/null and b/staticdata/icons/ships/608.png differ
diff --git a/staticdata/icons/ships/609.png b/staticdata/icons/ships/609.png
new file mode 100644
index 000000000..e6a1ae4c8
Binary files /dev/null and b/staticdata/icons/ships/609.png differ
diff --git a/staticdata/icons/ships/610.png b/staticdata/icons/ships/610.png
new file mode 100644
index 000000000..ce305fd98
Binary files /dev/null and b/staticdata/icons/ships/610.png differ
diff --git a/staticdata/icons/ships/611.png b/staticdata/icons/ships/611.png
new file mode 100644
index 000000000..807afb773
Binary files /dev/null and b/staticdata/icons/ships/611.png differ
diff --git a/staticdata/icons/ships/612.png b/staticdata/icons/ships/612.png
new file mode 100644
index 000000000..24a00ba97
Binary files /dev/null and b/staticdata/icons/ships/612.png differ
diff --git a/staticdata/icons/ships/613.png b/staticdata/icons/ships/613.png
new file mode 100644
index 000000000..4dddb5046
Binary files /dev/null and b/staticdata/icons/ships/613.png differ
diff --git a/staticdata/icons/ships/614.png b/staticdata/icons/ships/614.png
new file mode 100644
index 000000000..bd4ed4b93
Binary files /dev/null and b/staticdata/icons/ships/614.png differ
diff --git a/staticdata/icons/ships/615.png b/staticdata/icons/ships/615.png
new file mode 100644
index 000000000..17e577918
Binary files /dev/null and b/staticdata/icons/ships/615.png differ
diff --git a/staticdata/icons/ships/616.png b/staticdata/icons/ships/616.png
new file mode 100644
index 000000000..26ee624e5
Binary files /dev/null and b/staticdata/icons/ships/616.png differ
diff --git a/staticdata/icons/ships/617.png b/staticdata/icons/ships/617.png
new file mode 100644
index 000000000..f4fdb1d71
Binary files /dev/null and b/staticdata/icons/ships/617.png differ
diff --git a/staticdata/icons/ships/618.png b/staticdata/icons/ships/618.png
new file mode 100644
index 000000000..2b153b71c
Binary files /dev/null and b/staticdata/icons/ships/618.png differ
diff --git a/staticdata/icons/ships/619.png b/staticdata/icons/ships/619.png
new file mode 100644
index 000000000..9e18e82d7
Binary files /dev/null and b/staticdata/icons/ships/619.png differ
diff --git a/staticdata/icons/ships/620.png b/staticdata/icons/ships/620.png
new file mode 100644
index 000000000..1f7b68606
Binary files /dev/null and b/staticdata/icons/ships/620.png differ
diff --git a/staticdata/icons/ships/621.png b/staticdata/icons/ships/621.png
new file mode 100644
index 000000000..85933daa7
Binary files /dev/null and b/staticdata/icons/ships/621.png differ
diff --git a/staticdata/icons/ships/622.png b/staticdata/icons/ships/622.png
new file mode 100644
index 000000000..860133e6e
Binary files /dev/null and b/staticdata/icons/ships/622.png differ
diff --git a/staticdata/icons/ships/623.png b/staticdata/icons/ships/623.png
new file mode 100644
index 000000000..13c138767
Binary files /dev/null and b/staticdata/icons/ships/623.png differ
diff --git a/staticdata/icons/ships/624.png b/staticdata/icons/ships/624.png
new file mode 100644
index 000000000..e54f81172
Binary files /dev/null and b/staticdata/icons/ships/624.png differ
diff --git a/staticdata/icons/ships/625.png b/staticdata/icons/ships/625.png
new file mode 100644
index 000000000..567e6e26b
Binary files /dev/null and b/staticdata/icons/ships/625.png differ
diff --git a/staticdata/icons/ships/626.png b/staticdata/icons/ships/626.png
new file mode 100644
index 000000000..649d86f2c
Binary files /dev/null and b/staticdata/icons/ships/626.png differ
diff --git a/staticdata/icons/ships/627.png b/staticdata/icons/ships/627.png
new file mode 100644
index 000000000..53f092bb3
Binary files /dev/null and b/staticdata/icons/ships/627.png differ
diff --git a/staticdata/icons/ships/628.png b/staticdata/icons/ships/628.png
new file mode 100644
index 000000000..6595b4894
Binary files /dev/null and b/staticdata/icons/ships/628.png differ
diff --git a/staticdata/icons/ships/629.png b/staticdata/icons/ships/629.png
new file mode 100644
index 000000000..e8106c2b1
Binary files /dev/null and b/staticdata/icons/ships/629.png differ
diff --git a/staticdata/icons/ships/630.png b/staticdata/icons/ships/630.png
new file mode 100644
index 000000000..f2be151b5
Binary files /dev/null and b/staticdata/icons/ships/630.png differ
diff --git a/staticdata/icons/ships/631.png b/staticdata/icons/ships/631.png
new file mode 100644
index 000000000..b2b83be7c
Binary files /dev/null and b/staticdata/icons/ships/631.png differ
diff --git a/staticdata/icons/ships/632.png b/staticdata/icons/ships/632.png
new file mode 100644
index 000000000..a46ae5eaa
Binary files /dev/null and b/staticdata/icons/ships/632.png differ
diff --git a/staticdata/icons/ships/633.png b/staticdata/icons/ships/633.png
new file mode 100644
index 000000000..ef37c79d6
Binary files /dev/null and b/staticdata/icons/ships/633.png differ
diff --git a/staticdata/icons/ships/634.png b/staticdata/icons/ships/634.png
new file mode 100644
index 000000000..b9483846a
Binary files /dev/null and b/staticdata/icons/ships/634.png differ
diff --git a/staticdata/icons/ships/635.png b/staticdata/icons/ships/635.png
new file mode 100644
index 000000000..1768c7781
Binary files /dev/null and b/staticdata/icons/ships/635.png differ
diff --git a/staticdata/icons/ships/636.png b/staticdata/icons/ships/636.png
new file mode 100644
index 000000000..30f4be702
Binary files /dev/null and b/staticdata/icons/ships/636.png differ
diff --git a/staticdata/icons/ships/637.png b/staticdata/icons/ships/637.png
new file mode 100644
index 000000000..231480938
Binary files /dev/null and b/staticdata/icons/ships/637.png differ
diff --git a/staticdata/icons/ships/638.png b/staticdata/icons/ships/638.png
new file mode 100644
index 000000000..9ed499813
Binary files /dev/null and b/staticdata/icons/ships/638.png differ
diff --git a/staticdata/icons/ships/639.png b/staticdata/icons/ships/639.png
new file mode 100644
index 000000000..5f7c47433
Binary files /dev/null and b/staticdata/icons/ships/639.png differ
diff --git a/staticdata/icons/ships/640.png b/staticdata/icons/ships/640.png
new file mode 100644
index 000000000..97c6d2dcd
Binary files /dev/null and b/staticdata/icons/ships/640.png differ
diff --git a/staticdata/icons/ships/641.png b/staticdata/icons/ships/641.png
new file mode 100644
index 000000000..43a68362a
Binary files /dev/null and b/staticdata/icons/ships/641.png differ
diff --git a/staticdata/icons/ships/642.png b/staticdata/icons/ships/642.png
new file mode 100644
index 000000000..a13648939
Binary files /dev/null and b/staticdata/icons/ships/642.png differ
diff --git a/staticdata/icons/ships/643.png b/staticdata/icons/ships/643.png
new file mode 100644
index 000000000..45d53eb4b
Binary files /dev/null and b/staticdata/icons/ships/643.png differ
diff --git a/staticdata/icons/ships/644.png b/staticdata/icons/ships/644.png
new file mode 100644
index 000000000..cfadb3190
Binary files /dev/null and b/staticdata/icons/ships/644.png differ
diff --git a/staticdata/icons/ships/645.png b/staticdata/icons/ships/645.png
new file mode 100644
index 000000000..1485c3bad
Binary files /dev/null and b/staticdata/icons/ships/645.png differ
diff --git a/staticdata/icons/ships/647.png b/staticdata/icons/ships/647.png
new file mode 100644
index 000000000..f70d1f125
Binary files /dev/null and b/staticdata/icons/ships/647.png differ
diff --git a/staticdata/icons/ships/648.png b/staticdata/icons/ships/648.png
new file mode 100644
index 000000000..223638aa4
Binary files /dev/null and b/staticdata/icons/ships/648.png differ
diff --git a/staticdata/icons/ships/649.png b/staticdata/icons/ships/649.png
new file mode 100644
index 000000000..01d9a701b
Binary files /dev/null and b/staticdata/icons/ships/649.png differ
diff --git a/staticdata/icons/ships/650.png b/staticdata/icons/ships/650.png
new file mode 100644
index 000000000..2fbfe7980
Binary files /dev/null and b/staticdata/icons/ships/650.png differ
diff --git a/staticdata/icons/ships/651.png b/staticdata/icons/ships/651.png
new file mode 100644
index 000000000..66633dcb7
Binary files /dev/null and b/staticdata/icons/ships/651.png differ
diff --git a/staticdata/icons/ships/652.png b/staticdata/icons/ships/652.png
new file mode 100644
index 000000000..90e56c352
Binary files /dev/null and b/staticdata/icons/ships/652.png differ
diff --git a/staticdata/icons/ships/653.png b/staticdata/icons/ships/653.png
new file mode 100644
index 000000000..26f12462b
Binary files /dev/null and b/staticdata/icons/ships/653.png differ
diff --git a/staticdata/icons/ships/654.png b/staticdata/icons/ships/654.png
new file mode 100644
index 000000000..a08a0c12c
Binary files /dev/null and b/staticdata/icons/ships/654.png differ
diff --git a/staticdata/icons/ships/655.png b/staticdata/icons/ships/655.png
new file mode 100644
index 000000000..9bdde4d95
Binary files /dev/null and b/staticdata/icons/ships/655.png differ
diff --git a/staticdata/icons/ships/656.png b/staticdata/icons/ships/656.png
new file mode 100644
index 000000000..950ad6475
Binary files /dev/null and b/staticdata/icons/ships/656.png differ
diff --git a/staticdata/icons/ships/657.png b/staticdata/icons/ships/657.png
new file mode 100644
index 000000000..02dadf770
Binary files /dev/null and b/staticdata/icons/ships/657.png differ
diff --git a/staticdata/icons/ships/658.png b/staticdata/icons/ships/658.png
new file mode 100644
index 000000000..05d9e5b7b
Binary files /dev/null and b/staticdata/icons/ships/658.png differ
diff --git a/staticdata/icons/ships/659.png b/staticdata/icons/ships/659.png
new file mode 100644
index 000000000..192b07651
Binary files /dev/null and b/staticdata/icons/ships/659.png differ
diff --git a/staticdata/icons/ships/660.png b/staticdata/icons/ships/660.png
new file mode 100644
index 000000000..192b07651
Binary files /dev/null and b/staticdata/icons/ships/660.png differ
diff --git a/staticdata/icons/ships/661.png b/staticdata/icons/ships/661.png
new file mode 100644
index 000000000..192b07651
Binary files /dev/null and b/staticdata/icons/ships/661.png differ
diff --git a/staticdata/icons/ships/662.png b/staticdata/icons/ships/662.png
new file mode 100644
index 000000000..192b07651
Binary files /dev/null and b/staticdata/icons/ships/662.png differ
diff --git a/staticdata/icons/ships/663.png b/staticdata/icons/ships/663.png
new file mode 100644
index 000000000..192b07651
Binary files /dev/null and b/staticdata/icons/ships/663.png differ
diff --git a/staticdata/icons/ships/664.png b/staticdata/icons/ships/664.png
new file mode 100644
index 000000000..192b07651
Binary files /dev/null and b/staticdata/icons/ships/664.png differ
diff --git a/staticdata/icons/ships/665.png b/staticdata/icons/ships/665.png
new file mode 100644
index 000000000..192b07651
Binary files /dev/null and b/staticdata/icons/ships/665.png differ
diff --git a/staticdata/icons/ships/666.png b/staticdata/icons/ships/666.png
new file mode 100644
index 000000000..192b07651
Binary files /dev/null and b/staticdata/icons/ships/666.png differ
diff --git a/staticdata/icons/ships/667.png b/staticdata/icons/ships/667.png
new file mode 100644
index 000000000..192b07651
Binary files /dev/null and b/staticdata/icons/ships/667.png differ
diff --git a/staticdata/icons/ships/668.png b/staticdata/icons/ships/668.png
new file mode 100644
index 000000000..192b07651
Binary files /dev/null and b/staticdata/icons/ships/668.png differ
diff --git a/staticdata/icons/ships/669.png b/staticdata/icons/ships/669.png
new file mode 100644
index 000000000..192b07651
Binary files /dev/null and b/staticdata/icons/ships/669.png differ
diff --git a/staticdata/icons/ships/670.png b/staticdata/icons/ships/670.png
new file mode 100644
index 000000000..beca9aa2b
Binary files /dev/null and b/staticdata/icons/ships/670.png differ
diff --git a/staticdata/icons/ships/671.png b/staticdata/icons/ships/671.png
new file mode 100644
index 000000000..5cb3cf7b8
Binary files /dev/null and b/staticdata/icons/ships/671.png differ
diff --git a/staticdata/icons/ships/672.png b/staticdata/icons/ships/672.png
new file mode 100644
index 000000000..084e241e9
Binary files /dev/null and b/staticdata/icons/ships/672.png differ
diff --git a/staticdata/icons/ships/9854.png b/staticdata/icons/ships/9854.png
new file mode 100644
index 000000000..154c54401
Binary files /dev/null and b/staticdata/icons/ships/9854.png differ
diff --git a/staticdata/icons/ships/9858.png b/staticdata/icons/ships/9858.png
new file mode 100644
index 000000000..bbd518d25
Binary files /dev/null and b/staticdata/icons/ships/9858.png differ
diff --git a/staticdata/icons/ships/9860.png b/staticdata/icons/ships/9860.png
new file mode 100644
index 000000000..8afb7eb30
Binary files /dev/null and b/staticdata/icons/ships/9860.png differ
diff --git a/staticdata/icons/ships/9862.png b/staticdata/icons/ships/9862.png
new file mode 100644
index 000000000..bbd518d25
Binary files /dev/null and b/staticdata/icons/ships/9862.png differ
diff --git a/staticdata/icons/version.xml b/staticdata/icons/version.xml
new file mode 100644
index 000000000..542abefd8
--- /dev/null
+++ b/staticdata/icons/version.xml
@@ -0,0 +1,11 @@
+
+
+
+ Inferno
+ 1.1
+
+
+ 4
+ Icons for new modules
+
+