Compare commits
92 Commits
singularit
...
v1.1.22-ta
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2903c7e0ca | ||
|
|
e00941b2c5 | ||
|
|
ffaa707ea9 | ||
|
|
7337d54511 | ||
|
|
dd395aff03 | ||
|
|
4a41638472 | ||
|
|
50fbda288a | ||
|
|
7a33aba329 | ||
|
|
ec7a58c592 | ||
|
|
9ac11f9a7c | ||
|
|
63a088631d | ||
|
|
4fa585046f | ||
|
|
f90983b541 | ||
|
|
5095ac4881 | ||
|
|
c01450d1a1 | ||
|
|
3718d20361 | ||
|
|
1d66757b28 | ||
|
|
9e67ad032c | ||
|
|
06bd15079d | ||
|
|
7e59b2d43a | ||
|
|
4430204227 | ||
|
|
652e0738af | ||
|
|
e6bc831305 | ||
|
|
513a02a4d4 | ||
|
|
f355dac322 | ||
|
|
85f632bd20 | ||
|
|
cb0a5ded49 | ||
|
|
bf1df97886 | ||
|
|
b320c6ae77 | ||
|
|
9d2eee3b01 | ||
|
|
9b096524cc | ||
|
|
35a0b0ce4b | ||
|
|
5d75b2bd6d | ||
|
|
83cc3fd28a | ||
|
|
2d69705469 | ||
|
|
2ff6ecdbec | ||
|
|
25c9bfe4d4 | ||
|
|
91b2eff7b4 | ||
|
|
ea3969e1e3 | ||
|
|
cd5d047891 | ||
|
|
34f27f7995 | ||
|
|
752b1fe726 | ||
|
|
281e591984 | ||
|
|
b686aa6d0b | ||
|
|
035e6cea41 | ||
|
|
5aa34caca6 | ||
|
|
4fdd3f177a | ||
|
|
0826aa4bfe | ||
|
|
5869fe6d97 | ||
|
|
e877cef3a9 | ||
|
|
f7fdcfcd4e | ||
|
|
c6ad328e99 | ||
|
|
d8dfafedfa | ||
|
|
65cc0bec1c | ||
|
|
c34215f9e3 | ||
|
|
354b732c2c | ||
|
|
b910982994 | ||
|
|
f2c1002d58 | ||
|
|
50ce4d37aa | ||
|
|
46662d2b72 | ||
|
|
7579f3c3e1 | ||
|
|
3842913fe1 | ||
|
|
aaadcb9b45 | ||
|
|
29fc82b771 | ||
|
|
48963167fe | ||
|
|
4095365518 | ||
|
|
acdc2c496e | ||
|
|
26b078b69f | ||
|
|
9c792fc9a7 | ||
|
|
c7944e91e7 | ||
|
|
9e389f27b0 | ||
|
|
eef34f1dcf | ||
|
|
c1ea161060 | ||
|
|
b4aca7ae90 | ||
|
|
c0b4e73629 | ||
|
|
024637432c | ||
|
|
7ced595cca | ||
|
|
4a7782a713 | ||
|
|
d7dda83314 | ||
|
|
6ee474a8ff | ||
|
|
2e9680191b | ||
|
|
d7b7d127b8 | ||
|
|
2096b7641f | ||
|
|
2b83d17bd2 | ||
|
|
d7e880c42b | ||
|
|
e17c0610fb | ||
|
|
98e9ab461a | ||
|
|
a833b2f5cc | ||
|
|
9076175b0c | ||
|
|
a9843b637a | ||
|
|
b9ffe18775 | ||
|
|
6728121f9f |
4
.gitignore
vendored
4
.gitignore
vendored
@@ -12,3 +12,7 @@
|
||||
#Patch files
|
||||
*.patch
|
||||
#Personal
|
||||
/saveddata
|
||||
|
||||
#Pyfa file
|
||||
pyfaFits.html
|
||||
|
||||
17
config.py
17
config.py
@@ -13,10 +13,10 @@ debug = False
|
||||
saveInRoot = False
|
||||
|
||||
# Version data
|
||||
version = "1.1.18"
|
||||
version = "1.1.23"
|
||||
tag = "git"
|
||||
expansionName = "Singularity"
|
||||
expansionVersion = "703519"
|
||||
expansionName = "Rubicon"
|
||||
expansionVersion = "1.3"
|
||||
evemonMinVersion = "4081"
|
||||
|
||||
pyfaPath = None
|
||||
@@ -34,9 +34,10 @@ def defPaths():
|
||||
global saveInRoot
|
||||
# The main pyfa directory which contains run.py
|
||||
# Python 2.X uses ANSI by default, so we need to convert the character encoding
|
||||
pyfaPath = getattr(configforced, "pyfaPath", None)
|
||||
pyfaPath = getattr(configforced, "pyfaPath", pyfaPath)
|
||||
if pyfaPath is None:
|
||||
pyfaPath = unicode(os.path.dirname(os.path.abspath(sys.modules['__main__'].__file__)), sys.getfilesystemencoding())
|
||||
pyfaPath = unicode(os.path.dirname(os.path.realpath(os.path.abspath(
|
||||
sys.modules['__main__'].__file__))), sys.getfilesystemencoding())
|
||||
|
||||
# Where we store the saved fits etc, default is the current users home directory
|
||||
if saveInRoot is True:
|
||||
@@ -46,7 +47,8 @@ def defPaths():
|
||||
else:
|
||||
savePath = getattr(configforced, "savePath", None)
|
||||
if savePath is None:
|
||||
savePath = unicode(os.path.expanduser(os.path.join("~", ".pyfa")), sys.getfilesystemencoding())
|
||||
savePath = unicode(os.path.expanduser(os.path.join("~", ".pyfa")),
|
||||
sys.getfilesystemencoding())
|
||||
|
||||
# Redirect stderr to file if we're requested to do so
|
||||
stderrToFile = getattr(configforced, "stderrToFile", None)
|
||||
@@ -62,7 +64,8 @@ def defPaths():
|
||||
os.mkdir(savePath)
|
||||
sys.stdout = open(os.path.join(savePath, "output_log.txt"), "w")
|
||||
|
||||
# Static EVE Data from the staticdata repository, should be in the staticdata directory in our pyfa directory
|
||||
# Static EVE Data from the staticdata repository, should be in the staticdata
|
||||
# directory in our pyfa directory
|
||||
staticPath = os.path.join(pyfaPath, "staticdata")
|
||||
|
||||
# The database where we store all the fits etc
|
||||
|
||||
@@ -66,7 +66,7 @@ from eos.db.saveddata.queries import getUser, getCharacter, getFit, getFitsWithS
|
||||
getCharacterList, getPrice, getDamagePatternList, getDamagePattern, \
|
||||
getFitList, getFleetList, getFleet, save, remove, commit, add, \
|
||||
getCharactersForUser, getMiscData, getSquadsIDsWithFitID, getWing, \
|
||||
getSquad
|
||||
getSquad, getBoosterFits
|
||||
|
||||
#If using in memory saveddata, you'll want to reflect it so the data structure is good.
|
||||
if config.saveddata_connectionstring == "sqlite:///:memory:":
|
||||
|
||||
@@ -23,7 +23,7 @@ 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
|
||||
from eos.types import Icon, Attribute, Item, Effect, MetaType, Group, Traits
|
||||
|
||||
items_table = Table("invtypes", gamedata_meta,
|
||||
Column("typeID", Integer, primary_key = True),
|
||||
@@ -38,9 +38,8 @@ items_table = Table("invtypes", gamedata_meta,
|
||||
Column("iconID", Integer, ForeignKey("icons.iconID")),
|
||||
Column("groupID", Integer, ForeignKey("invgroups.groupID"), index=True))
|
||||
|
||||
|
||||
|
||||
from .metaGroup import metatypes_table
|
||||
from .traits import traits_table
|
||||
|
||||
mapper(Item, items_table,
|
||||
properties = {"group" : relation(Group, backref = "items"),
|
||||
@@ -52,6 +51,11 @@ mapper(Item, items_table,
|
||||
uselist = False),
|
||||
"ID" : synonym("typeID"),
|
||||
"name" : synonym("typeName"),
|
||||
"description" : deferred(items_table.c.description)})
|
||||
"description" : deferred(items_table.c.description),
|
||||
"traits" : relation(Traits,
|
||||
primaryjoin = traits_table.c.typeID == items_table.c.typeID,
|
||||
order_by = traits_table.c.typeID,
|
||||
uselist = True)
|
||||
})
|
||||
|
||||
Item.category = association_proxy("group", "category")
|
||||
|
||||
22
eos/db/gamedata/traits.py
Normal file
22
eos/db/gamedata/traits.py
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
from sqlalchemy import Column, Table, Integer, String, ForeignKey, and_, select
|
||||
from sqlalchemy.orm import mapper, column_property
|
||||
from eos.types import Item, Traits
|
||||
from eos.db import gamedata_meta
|
||||
|
||||
traits_table = Table("invtraits", gamedata_meta,
|
||||
Column("typeID", Integer, ForeignKey("invtypes.typeID"), primary_key=True),
|
||||
Column("skillID", Integer, ForeignKey("invtypes.typeID"), primary_key=True),
|
||||
Column("bonusText", String, primary_key=True))
|
||||
|
||||
|
||||
from .item import items_table
|
||||
|
||||
mapper(Traits, traits_table,
|
||||
properties = {"skillName" : column_property(
|
||||
select([items_table.c.typeName],
|
||||
and_(
|
||||
items_table.c.typeID == traits_table.c.skillID,
|
||||
traits_table.c.skillID != -1
|
||||
)))
|
||||
});
|
||||
@@ -3,7 +3,7 @@ import sqlalchemy
|
||||
def update(saveddata_engine):
|
||||
checkPriceFailures(saveddata_engine)
|
||||
checkApiDefaultChar(saveddata_engine)
|
||||
|
||||
checkFitBooster(saveddata_engine)
|
||||
|
||||
def checkPriceFailures(saveddata_engine):
|
||||
# Check if we have 'failed' column
|
||||
@@ -39,3 +39,21 @@ def checkApiDefaultChar(saveddata_engine):
|
||||
except sqlalchemy.exc.DatabaseError:
|
||||
saveddata_engine.execute("ALTER TABLE characters ADD COLUMN defaultChar INTEGER;")
|
||||
saveddata_engine.execute("ALTER TABLE characters ADD COLUMN chars VARCHAR;")
|
||||
|
||||
def checkFitBooster(saveddata_engine):
|
||||
try:
|
||||
saveddata_engine.execute("SELECT * FROM fits LIMIT 1")
|
||||
# If table doesn't exist, it means we're doing everything from scratch
|
||||
# and sqlalchemy will process everything as needed
|
||||
except sqlalchemy.exc.DatabaseError:
|
||||
pass
|
||||
# If not, we're running on top of existing DB
|
||||
else:
|
||||
# Check that we have columns
|
||||
try:
|
||||
saveddata_engine.execute("SELECT booster FROM fits LIMIT 1")
|
||||
# If we don't, create them
|
||||
except sqlalchemy.exc.DatabaseError:
|
||||
saveddata_engine.execute("ALTER TABLE fits ADD COLUMN booster BOOLEAN;")
|
||||
# Set NULL data to 0 (needed in case of downgrade, see GH issue #62
|
||||
saveddata_engine.execute("UPDATE fits SET booster = 0 WHERE booster IS NULL;")
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
# along with eos. If not, see <http://www.gnu.org/licenses/>.
|
||||
#===============================================================================
|
||||
|
||||
from sqlalchemy import Table, Column, Integer, ForeignKey, String
|
||||
from sqlalchemy import Table, Column, Integer, ForeignKey, String, Boolean
|
||||
from sqlalchemy.orm import relation, mapper
|
||||
from sqlalchemy.sql import and_
|
||||
|
||||
@@ -36,7 +36,8 @@ fits_table = Table("fits", saveddata_meta,
|
||||
Column("name", String, nullable = False),
|
||||
Column("timestamp", Integer, nullable = False),
|
||||
Column("characterID", ForeignKey("characters.ID"), nullable = True),
|
||||
Column("damagePatternID", ForeignKey("damagePatterns.ID"), nullable=True))
|
||||
Column("damagePatternID", ForeignKey("damagePatterns.ID"), nullable=True),
|
||||
Column("booster", Boolean, nullable = False, index = True, default = 0))
|
||||
|
||||
projectedFits_table = Table("projectedFits", saveddata_meta,
|
||||
Column("sourceID", ForeignKey("fits.ID"), primary_key = True),
|
||||
|
||||
@@ -248,6 +248,24 @@ def getFitsWithShip(shipID, ownerID=None, where=None, eager=None):
|
||||
raise TypeError("ShipID must be integer")
|
||||
return fits
|
||||
|
||||
def getBoosterFits(ownerID=None, where=None, eager=None):
|
||||
"""
|
||||
Get all the fits that are flagged as a boosting ship
|
||||
If no user is passed, do this for all users.
|
||||
"""
|
||||
|
||||
if ownerID is not None and not isinstance(ownerID, int):
|
||||
raise TypeError("OwnerID must be integer")
|
||||
filter = Fit.booster == 1
|
||||
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()
|
||||
return fits
|
||||
|
||||
def countFitsWithShip(shipID, ownerID=None, where=None, eager=None):
|
||||
"""
|
||||
Get all the fits using a certain ship.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Used by:
|
||||
# Modules named like: Valve (8 of 8)
|
||||
# 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",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Used by:
|
||||
# Implants named like: Eifyr Acceleration Control AC (6 of 6)
|
||||
# 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",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Used by:
|
||||
# Modules named like: Algorithm (8 of 8)
|
||||
# Modules named like: Memetic Algorithm Bank (8 of 8)
|
||||
# Implant: Poteque 'Prospector' Hacking HC-905
|
||||
type = "passive"
|
||||
def handler(fit, container, context):
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Used by:
|
||||
# Implants named like: 'Rogue' Afterburner (6 of 6)
|
||||
# Implants named like: Eifyr and Co. 'Rogue' Afterburner AB (6 of 6)
|
||||
# Implant: Zor's Custom Navigation Link
|
||||
# Skill: Afterburner
|
||||
type = "passive"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Used by:
|
||||
# Modules named like: Engine Housing (8 of 8)
|
||||
# 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)
|
||||
|
||||
@@ -1,15 +1,5 @@
|
||||
# Used by:
|
||||
# Charges from group: Advanced Pulse Laser Crystal (6 of 6)
|
||||
# Charges from group: Advanced Railgun Charge (6 of 6)
|
||||
# Charges from group: Capacitor Booster Charge (16 of 16)
|
||||
# Charges from group: Frequency Crystal (185 of 185)
|
||||
# Charges from group: Hybrid Charge (209 of 209)
|
||||
# Charges from group: Mercoxit Mining Crystal (2 of 2)
|
||||
# Charges from group: Mining Crystal (30 of 30)
|
||||
# Charge: Focused Warp Disruption Script
|
||||
# Charge: Void L
|
||||
# Charge: Void M
|
||||
# Charge: Void S
|
||||
# Items from category: Charge (458 of 828)
|
||||
type = "passive"
|
||||
def handler(fit, module, context):
|
||||
# Dirty hack to work around cap charges setting cap booster
|
||||
|
||||
@@ -1,13 +1,5 @@
|
||||
# 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: Frequency Crystal (185 of 185)
|
||||
# Charges from group: Hybrid Charge (209 of 209)
|
||||
# Charges from group: Projectile Ammo (129 of 129)
|
||||
# Items from category: Charge (559 of 828)
|
||||
type = "passive"
|
||||
def handler(fit, module, context):
|
||||
module.multiplyItemAttr("maxRange", module.getModifiedChargeAttr("weaponRangeMultiplier"))
|
||||
@@ -1,8 +1,5 @@
|
||||
# Used by:
|
||||
# Implant: Improved Exile Booster
|
||||
# Implant: Standard Exile Booster
|
||||
# Implant: Strong Exile Booster
|
||||
# Implant: Synth Exile Booster
|
||||
# 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") or mod.item.requiresSkill("Capital Repair Systems"),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Used by:
|
||||
# Modules named like: Auxiliary Nano (8 of 8)
|
||||
# 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"),
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
# Used by:
|
||||
# Modules from group: Armor Coating (202 of 202)
|
||||
# Modules from group: Armor Plating Energized (187 of 187)
|
||||
# Module: QA Multiship Module - 10 Players
|
||||
# Module: QA Multiship Module - 20 Players
|
||||
# Module: QA Multiship Module - 40 Players
|
||||
# Module: QA Multiship Module - 5 Players
|
||||
# Modules named like: QA Multiship Module Players (4 of 4)
|
||||
type = "passive"
|
||||
def handler(fit, module, context):
|
||||
fit.ship.multiplyItemAttr("armorHP", module.getModifiedItemAttr("armorHPMultiplier"))
|
||||
@@ -1,7 +1,5 @@
|
||||
# Used by:
|
||||
# Implant: Inherent Implants 'Highwall' Mining MX-1001
|
||||
# Implant: Inherent Implants 'Highwall' Mining MX-1003
|
||||
# Implant: Inherent Implants 'Highwall' Mining MX-1005
|
||||
# Implants named like: Inherent Implants 'Highwall' Mining MX (3 of 3)
|
||||
# Implant: Michi's Excavation Augmentor
|
||||
# Skill: Astrogeology
|
||||
# Skill: Mining
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
# Used by:
|
||||
# Implant: Poteque 'Prospector' Astrometric Pinpointing AP-602
|
||||
# Implant: Poteque 'Prospector' Astrometric Pinpointing AP-606
|
||||
# Implant: Poteque 'Prospector' Astrometric Pinpointing AP-610
|
||||
# Implants named like: Poteque 'Prospector' Astrometric Pinpointing AP (3 of 3)
|
||||
# Skill: Astrometric Pinpointing
|
||||
# Skill: Astrometrics
|
||||
type = "passive"
|
||||
|
||||
@@ -1,17 +1,8 @@
|
||||
# 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)
|
||||
# Implant: Low-grade Virtue Alpha
|
||||
# Implant: Low-grade Virtue Beta
|
||||
# Implant: Low-grade Virtue Delta
|
||||
# Implant: Low-grade Virtue Epsilon
|
||||
# Implant: Low-grade Virtue Gamma
|
||||
# Implant: Poteque 'Prospector' Astrometric Rangefinding AR-802
|
||||
# Implant: Poteque 'Prospector' Astrometric Rangefinding AR-806
|
||||
# Implant: Poteque 'Prospector' Astrometric Rangefinding AR-810
|
||||
# Module: Core Probe Launcher II
|
||||
# Module: Expanded Probe Launcher II
|
||||
# Module: Sisters Core Probe Launcher
|
||||
# Module: Sisters Expanded Probe Launcher
|
||||
# Skill: Astrometric Rangefinding
|
||||
# Skill: Astrometrics
|
||||
type = "passive"
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# Used by:
|
||||
# Implant: Eifyr and Co. 'Alchemist' Biology BY-805
|
||||
# Implant: Eifyr and Co. 'Alchemist' Biology BY-810
|
||||
# Implants named like: Eifyr and Co. 'Alchemist' Biology BY (2 of 2)
|
||||
# Skill: Biology
|
||||
type = "passive"
|
||||
def handler(fit, container, context):
|
||||
|
||||
@@ -1,16 +1,5 @@
|
||||
# Used by:
|
||||
# Implant: Improved Crash Booster
|
||||
# Implant: Improved Exile Booster
|
||||
# Implant: Improved Frentix Booster
|
||||
# Implant: Improved X-Instinct Booster
|
||||
# Implant: Standard Crash Booster
|
||||
# Implant: Standard Exile Booster
|
||||
# Implant: Standard Frentix Booster
|
||||
# Implant: Standard X-Instinct Booster
|
||||
# Implant: Strong Crash Booster
|
||||
# Implant: Strong Exile Booster
|
||||
# Implant: Strong Frentix Booster
|
||||
# Implant: Strong X-Instinct Booster
|
||||
# Implants from group: Booster (12 of 37)
|
||||
type = "boosterSideEffect"
|
||||
def handler(fit, booster, context):
|
||||
fit.ship.boostItemAttr("armorHP", booster.getModifiedItemAttr("boosterArmorHPPenalty"))
|
||||
|
||||
@@ -1,13 +1,5 @@
|
||||
# Used by:
|
||||
# Implant: Improved Drop Booster
|
||||
# Implant: Improved Mindflood Booster
|
||||
# Implant: Improved Sooth Sayer Booster
|
||||
# Implant: Standard Drop Booster
|
||||
# Implant: Standard Mindflood Booster
|
||||
# Implant: Standard Sooth Sayer Booster
|
||||
# Implant: Strong Drop Booster
|
||||
# Implant: Strong Mindflood Booster
|
||||
# Implant: Strong Sooth Sayer Booster
|
||||
# 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",
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
# Used by:
|
||||
# Implant: Improved Blue Pill Booster
|
||||
# Implant: Improved Exile Booster
|
||||
# Implant: Standard Blue Pill Booster
|
||||
# Implant: Standard Exile Booster
|
||||
# Implant: Strong Blue Pill Booster
|
||||
# Implant: Strong Exile Booster
|
||||
# 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"))
|
||||
|
||||
@@ -1,16 +1,5 @@
|
||||
# Used by:
|
||||
# Implant: Improved Crash Booster
|
||||
# Implant: Improved Drop Booster
|
||||
# Implant: Improved Frentix Booster
|
||||
# Implant: Improved Sooth Sayer Booster
|
||||
# Implant: Standard Crash Booster
|
||||
# Implant: Standard Drop Booster
|
||||
# Implant: Standard Frentix Booster
|
||||
# Implant: Standard Sooth Sayer Booster
|
||||
# Implant: Strong Crash Booster
|
||||
# Implant: Strong Drop Booster
|
||||
# Implant: Strong Frentix Booster
|
||||
# Implant: Strong Sooth Sayer Booster
|
||||
# Implants from group: Booster (12 of 37)
|
||||
type = "boosterSideEffect"
|
||||
def handler(fit, booster, context):
|
||||
fit.ship.boostItemAttr("maxVelocity", booster.getModifiedItemAttr("boosterMaxVelocityPenalty"))
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
# Used by:
|
||||
# Implant: Improved Exile Booster
|
||||
# Implant: Improved Mindflood Booster
|
||||
# Implant: Standard Exile Booster
|
||||
# Implant: Standard Mindflood Booster
|
||||
# Implant: Strong Exile Booster
|
||||
# Implant: Strong Mindflood Booster
|
||||
# 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"),
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
# Used by:
|
||||
# Implant: Improved Blue Pill Booster
|
||||
# Implant: Standard Blue Pill Booster
|
||||
# Implant: Strong Blue Pill Booster
|
||||
# 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"),
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
# Used by:
|
||||
# Implant: Improved Crash Booster
|
||||
# Implant: Improved X-Instinct Booster
|
||||
# Implant: Standard Crash Booster
|
||||
# Implant: Standard X-Instinct Booster
|
||||
# Implant: Strong Crash Booster
|
||||
# Implant: Strong X-Instinct Booster
|
||||
# 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"),
|
||||
|
||||
@@ -1,11 +1,6 @@
|
||||
# Used by:
|
||||
# Implant: Eifyr and Co. 'Alchemist' Nanite Control NC-903
|
||||
# Implant: Eifyr and Co. 'Alchemist' Nanite Control NC-905
|
||||
# Implant: Low-grade Edge Alpha
|
||||
# Implant: Low-grade Edge Beta
|
||||
# Implant: Low-grade Edge Delta
|
||||
# Implant: Low-grade Edge Epsilon
|
||||
# Implant: Low-grade Edge Gamma
|
||||
# Implants named like: Eifyr and Co. 'Alchemist' Nanite Control NC (2 of 2)
|
||||
# Implants named like: Low grade Edge (5 of 6)
|
||||
# Skill: Neurotoxin Control
|
||||
type = "passive"
|
||||
def handler(fit, container, context):
|
||||
|
||||
@@ -1,11 +1,6 @@
|
||||
# Used by:
|
||||
# Implant: Eifyr and Co. 'Alchemist' Nanite Control NC-903
|
||||
# Implant: Eifyr and Co. 'Alchemist' Nanite Control NC-905
|
||||
# Implant: Low-grade Edge Alpha
|
||||
# Implant: Low-grade Edge Beta
|
||||
# Implant: Low-grade Edge Delta
|
||||
# Implant: Low-grade Edge Epsilon
|
||||
# Implant: Low-grade Edge Gamma
|
||||
# Implants named like: Eifyr and Co. 'Alchemist' Nanite Control NC (2 of 2)
|
||||
# Implants named like: Low grade Edge (5 of 6)
|
||||
# Skill: Neurotoxin Control
|
||||
type = "passive"
|
||||
def handler(fit, container, context):
|
||||
|
||||
@@ -1,11 +1,6 @@
|
||||
# Used by:
|
||||
# Implant: Eifyr and Co. 'Alchemist' Nanite Control NC-903
|
||||
# Implant: Eifyr and Co. 'Alchemist' Nanite Control NC-905
|
||||
# Implant: Low-grade Edge Alpha
|
||||
# Implant: Low-grade Edge Beta
|
||||
# Implant: Low-grade Edge Delta
|
||||
# Implant: Low-grade Edge Epsilon
|
||||
# Implant: Low-grade Edge Gamma
|
||||
# Implants named like: Eifyr and Co. 'Alchemist' Nanite Control NC (2 of 2)
|
||||
# Implants named like: Low grade Edge (5 of 6)
|
||||
# Skill: Neurotoxin Control
|
||||
type = "passive"
|
||||
def handler(fit, container, context):
|
||||
|
||||
@@ -1,11 +1,6 @@
|
||||
# Used by:
|
||||
# Implant: Eifyr and Co. 'Alchemist' Nanite Control NC-903
|
||||
# Implant: Eifyr and Co. 'Alchemist' Nanite Control NC-905
|
||||
# Implant: Low-grade Edge Alpha
|
||||
# Implant: Low-grade Edge Beta
|
||||
# Implant: Low-grade Edge Delta
|
||||
# Implant: Low-grade Edge Epsilon
|
||||
# Implant: Low-grade Edge Gamma
|
||||
# Implants named like: Eifyr and Co. 'Alchemist' Nanite Control NC (2 of 2)
|
||||
# Implants named like: Low grade Edge (5 of 6)
|
||||
# Skill: Neurotoxin Control
|
||||
type = "passive"
|
||||
def handler(fit, container, context):
|
||||
|
||||
@@ -1,11 +1,6 @@
|
||||
# Used by:
|
||||
# Implant: Eifyr and Co. 'Alchemist' Nanite Control NC-903
|
||||
# Implant: Eifyr and Co. 'Alchemist' Nanite Control NC-905
|
||||
# Implant: Low-grade Edge Alpha
|
||||
# Implant: Low-grade Edge Beta
|
||||
# Implant: Low-grade Edge Delta
|
||||
# Implant: Low-grade Edge Epsilon
|
||||
# Implant: Low-grade Edge Gamma
|
||||
# Implants named like: Eifyr and Co. 'Alchemist' Nanite Control NC (2 of 2)
|
||||
# Implants named like: Low grade Edge (5 of 6)
|
||||
# Skill: Neurotoxin Control
|
||||
type = "passive"
|
||||
def handler(fit, container, context):
|
||||
|
||||
@@ -1,16 +1,5 @@
|
||||
# Used by:
|
||||
# Implant: Improved Blue Pill Booster
|
||||
# Implant: Improved Drop Booster
|
||||
# Implant: Improved Sooth Sayer Booster
|
||||
# Implant: Improved X-Instinct Booster
|
||||
# Implant: Standard Blue Pill Booster
|
||||
# Implant: Standard Drop Booster
|
||||
# Implant: Standard Sooth Sayer Booster
|
||||
# Implant: Standard X-Instinct Booster
|
||||
# Implant: Strong Blue Pill Booster
|
||||
# Implant: Strong Drop Booster
|
||||
# Implant: Strong Sooth Sayer Booster
|
||||
# Implant: Strong X-Instinct Booster
|
||||
# Implants from group: Booster (12 of 37)
|
||||
type = "boosterSideEffect"
|
||||
def handler(fit, booster, context):
|
||||
fit.ship.boostItemAttr("shieldCapacity", booster.getModifiedItemAttr("boosterShieldCapacityPenalty"))
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
# Used by:
|
||||
# Implant: Improved Drop Booster
|
||||
# Implant: Improved X-Instinct Booster
|
||||
# Implant: Standard Drop Booster
|
||||
# Implant: Standard X-Instinct Booster
|
||||
# Implant: Strong Drop Booster
|
||||
# Implant: Strong X-Instinct Booster
|
||||
# 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"),
|
||||
|
||||
@@ -1,13 +1,5 @@
|
||||
# Used by:
|
||||
# Implant: Improved Blue Pill Booster
|
||||
# Implant: Improved Mindflood Booster
|
||||
# Implant: Improved Sooth Sayer Booster
|
||||
# Implant: Standard Blue Pill Booster
|
||||
# Implant: Standard Mindflood Booster
|
||||
# Implant: Standard Sooth Sayer Booster
|
||||
# Implant: Strong Blue Pill Booster
|
||||
# Implant: Strong Mindflood Booster
|
||||
# Implant: Strong Sooth Sayer Booster
|
||||
# Implants from group: Booster (9 of 37)
|
||||
type = "boosterSideEffect"
|
||||
def handler(fit, booster, context):
|
||||
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
# Used by:
|
||||
# Implant: Improved Exile Booster
|
||||
# Implant: Improved Frentix Booster
|
||||
# Implant: Standard Exile Booster
|
||||
# Implant: Standard Frentix Booster
|
||||
# Implant: Strong Exile Booster
|
||||
# Implant: Strong Frentix Booster
|
||||
# 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"),
|
||||
|
||||
@@ -1,10 +1,5 @@
|
||||
# Used by:
|
||||
# Implant: Talon Alpha
|
||||
# Implant: Talon Beta
|
||||
# Implant: Talon Delta
|
||||
# Implant: Talon Epsilon
|
||||
# Implant: Talon Gamma
|
||||
# Implant: Talon Omega
|
||||
# Implants named like: Talon (6 of 12)
|
||||
runTime = "early"
|
||||
type = "passive"
|
||||
def handler(fit, implant, context):
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Used by:
|
||||
# Implants named like: Inherent Implants Emission Systems ES (6 of 6)
|
||||
# Modules named like: Egress (8 of 8)
|
||||
# Implants named like: Inherent Implants 'Squire' Energy Emission Systems ES (6 of 6)
|
||||
# Modules named like: Egress Port Maximizer (8 of 8)
|
||||
# Skill: Capacitor Emission Systems
|
||||
type = "passive"
|
||||
def handler(fit, container, context):
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Used by:
|
||||
# Implants named like: Hardwiring Zainou 'Sharpshooter' (6 of 6)
|
||||
# Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6)
|
||||
# Skill: Citadel Torpedoes
|
||||
type = "passive"
|
||||
def handler(fit, container, context):
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Used by:
|
||||
# Implants named like: Hardwiring Zainou 'Sharpshooter' (6 of 6)
|
||||
# Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6)
|
||||
# Skill: Citadel Torpedoes
|
||||
type = "passive"
|
||||
def handler(fit, container, context):
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Used by:
|
||||
# Implants named like: Hardwiring Zainou 'Sharpshooter' (6 of 6)
|
||||
# Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6)
|
||||
# Skill: Citadel Torpedoes
|
||||
type = "passive"
|
||||
def handler(fit, container, context):
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Used by:
|
||||
# Implants named like: Hardwiring Zainou 'Sharpshooter' (6 of 6)
|
||||
# Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6)
|
||||
# Skill: Citadel Torpedoes
|
||||
type = "passive"
|
||||
def handler(fit, container, context):
|
||||
|
||||
@@ -2,5 +2,5 @@
|
||||
# Skill: Capital Capacitor Emission Systems
|
||||
type = "passive"
|
||||
def handler(fit, skill, context):
|
||||
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Energy Emission Systems"),
|
||||
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Capacitor Emission Systems"),
|
||||
"capacitorNeed", skill.getModifiedItemAttr("capNeedBonus") * skill.level)
|
||||
@@ -1,5 +1,5 @@
|
||||
# Used by:
|
||||
# Modules named like: Core Safeguard (8 of 8)
|
||||
# Modules named like: Core Defense Capacitor Safeguard (8 of 8)
|
||||
# Skill: Capital Shield Operation
|
||||
type = "passive"
|
||||
def handler(fit, container, context):
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Used by:
|
||||
# Modules named like: Hybrid Discharge (8 of 8)
|
||||
# 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",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Used by:
|
||||
# Modules named like: Energy Discharge (8 of 8)
|
||||
# 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",
|
||||
|
||||
@@ -6,6 +6,6 @@ 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"),
|
||||
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Capacitor Emission Systems"),
|
||||
"powerTransferRange", ship.getModifiedItemAttr("carrierAmarrBonus3") * level)
|
||||
|
||||
@@ -7,5 +7,5 @@ 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"),
|
||||
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Capacitor Emission Systems"),
|
||||
"powerTransferRange", ship.getModifiedItemAttr("carrierCaldariBonus3") * level)
|
||||
|
||||
@@ -1,12 +1,5 @@
|
||||
# Used by:
|
||||
# Modules named like: Modified Cloaking Device (5 of 5)
|
||||
# Module: Caldari Navy Cloaking Device
|
||||
# Module: Dread Guristas Cloaking Device
|
||||
# Module: Improved 'Guise' Cloaking Device II
|
||||
# Module: Improved Cloaking Device II
|
||||
# Module: Prototype 'Poncho' Cloaking Device I
|
||||
# Module: Prototype Cloaking Device I
|
||||
# Module: Syndicate Cloaking Device
|
||||
# Modules from group: Cloaking Device (12 of 14)
|
||||
type = "active"
|
||||
runTime = "early"
|
||||
#TODO: Rewrite this effect
|
||||
|
||||
@@ -1,12 +1,5 @@
|
||||
# Used by:
|
||||
# Modules named like: Modified Cloaking Device (5 of 5)
|
||||
# Module: Caldari Navy Cloaking Device
|
||||
# Module: Dread Guristas Cloaking Device
|
||||
# Module: Improved 'Guise' Cloaking Device II
|
||||
# Module: Improved Cloaking Device II
|
||||
# Module: Prototype 'Poncho' Cloaking Device I
|
||||
# Module: Prototype Cloaking Device I
|
||||
# Module: Syndicate Cloaking Device
|
||||
# Modules from group: Cloaking Device (12 of 14)
|
||||
type = "offline"
|
||||
def handler(fit, module, context):
|
||||
fit.ship.multiplyItemAttr("scanResolution",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Used by:
|
||||
# Modules named like: Systems Stabilizer (8 of 8)
|
||||
# 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"),
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# Used by:
|
||||
# Module: 'Smokescreen' Covert Ops Cloaking Device II
|
||||
# Module: Covert Ops Cloaking Device II
|
||||
# Modules named like: Covert Ops Cloaking Device II (2 of 2)
|
||||
type = "active"
|
||||
runTime = "early"
|
||||
def handler(fit, ship, context):
|
||||
|
||||
@@ -5,6 +5,5 @@ 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)
|
||||
fit.modules.filteredItemBoost(lambda mod: lambda mod: mod.item.requiresSkill("Weapon Disruption"),
|
||||
bonus, module.getModifiedItemAttr("commandBonusTD"))
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Used by:
|
||||
# Implants named like: Implants Bursts (6 of 6)
|
||||
# Implants named like: Inherent Implants 'Lancer' Controlled Bursts CB (6 of 6)
|
||||
# Skill: Controlled Bursts
|
||||
type = "passive"
|
||||
def handler(fit, container, context):
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
# Used by:
|
||||
# Module: 'Smokescreen' Covert Ops Cloaking Device II
|
||||
# Modules named like: Covert Ops Cloaking Device II (2 of 2)
|
||||
# Module: Covert Cynosural Field Generator I
|
||||
# Module: Covert Ops Cloaking Device II
|
||||
type = "passive"
|
||||
def handler(fit, module, context):
|
||||
module.increaseItemAttr("cpu", module.getModifiedItemAttr("covertCloakCPUAdd") or 0)
|
||||
|
||||
@@ -1,16 +1,5 @@
|
||||
# Used by:
|
||||
# Subsystem: Legion Offensive - Assault Optimization
|
||||
# Subsystem: Legion Offensive - Drone Synthesis Projector
|
||||
# Subsystem: Legion Offensive - Liquid Crystal Magnifiers
|
||||
# Subsystem: Loki Offensive - Hardpoint Efficiency Configuration
|
||||
# Subsystem: Loki Offensive - Projectile Scoping Array
|
||||
# Subsystem: Loki Offensive - Turret Concurrence Registry
|
||||
# Subsystem: Proteus Offensive - Dissonic Encoding Platform
|
||||
# Subsystem: Proteus Offensive - Drone Synthesis Projector
|
||||
# Subsystem: Proteus Offensive - Hybrid Propulsion Armature
|
||||
# Subsystem: Tengu Offensive - Accelerated Ejection Bay
|
||||
# Subsystem: Tengu Offensive - Magnetic Infusion Basin
|
||||
# Subsystem: Tengu Offensive - Rifling Launcher Pattern
|
||||
# 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"),
|
||||
|
||||
@@ -4,13 +4,9 @@
|
||||
# Ships from group: Covert Ops (5 of 5)
|
||||
# Ships from group: Force Recon Ship (5 of 5)
|
||||
# Ships from group: Stealth Bomber (4 of 4)
|
||||
# Ships named like: Stratios (2 of 2)
|
||||
# Subsystems named like: Offensive Covert Reconfiguration (4 of 4)
|
||||
# Ship: Astero
|
||||
# Ship: Stratios
|
||||
# Ship: Stratios Emergency Responder
|
||||
# Subsystem: Legion Offensive - Covert Reconfiguration
|
||||
# Subsystem: Loki Offensive - Covert Reconfiguration
|
||||
# Subsystem: Proteus Offensive - Covert Reconfiguration
|
||||
# Subsystem: Tengu Offensive - Covert Reconfiguration
|
||||
type = "passive"
|
||||
def handler(fit, container, context):
|
||||
fit.modules.filteredItemForce(lambda mod: mod.item.group.name == "Cloaking Device",
|
||||
|
||||
@@ -1,16 +1,5 @@
|
||||
# Used by:
|
||||
# Subsystem: Legion Offensive - Assault Optimization
|
||||
# Subsystem: Legion Offensive - Drone Synthesis Projector
|
||||
# Subsystem: Legion Offensive - Liquid Crystal Magnifiers
|
||||
# Subsystem: Loki Offensive - Hardpoint Efficiency Configuration
|
||||
# Subsystem: Loki Offensive - Projectile Scoping Array
|
||||
# Subsystem: Loki Offensive - Turret Concurrence Registry
|
||||
# Subsystem: Proteus Offensive - Dissonic Encoding Platform
|
||||
# Subsystem: Proteus Offensive - Drone Synthesis Projector
|
||||
# Subsystem: Proteus Offensive - Hybrid Propulsion Armature
|
||||
# Subsystem: Tengu Offensive - Accelerated Ejection Bay
|
||||
# Subsystem: Tengu Offensive - Magnetic Infusion Basin
|
||||
# Subsystem: Tengu Offensive - Rifling Launcher Pattern
|
||||
# Subsystems from group: Offensive Systems (12 of 16)
|
||||
type = "passive"
|
||||
def handler(fit, module, context):
|
||||
fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill("Cloaking"),
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
# Used by:
|
||||
# Ships from group: Stealth Bomber (4 of 4)
|
||||
# Subsystem: Legion Offensive - Covert Reconfiguration
|
||||
# Subsystem: Loki Offensive - Covert Reconfiguration
|
||||
# Subsystem: Proteus Offensive - Covert Reconfiguration
|
||||
# Subsystem: Tengu Offensive - Covert Reconfiguration
|
||||
# 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",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Used by:
|
||||
# Modules named like: Hybrid Unit (8 of 8)
|
||||
# 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",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Used by:
|
||||
# Modules named like: Energy Administrations Unit (8 of 8)
|
||||
# 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",
|
||||
|
||||
@@ -1,25 +1,5 @@
|
||||
# Used by:
|
||||
# Subsystems from group: Electronic Systems (16 of 16)
|
||||
# Subsystems named like: Defensive Adaptive (5 of 5)
|
||||
# Subsystem: Legion Defensive - Augmented Plating
|
||||
# Subsystem: Legion Defensive - Nanobot Injector
|
||||
# Subsystem: Legion Offensive - Assault Optimization
|
||||
# Subsystem: Legion Offensive - Drone Synthesis Projector
|
||||
# Subsystem: Legion Offensive - Liquid Crystal Magnifiers
|
||||
# Subsystem: Loki Defensive - Amplification Node
|
||||
# Subsystem: Loki Offensive - Hardpoint Efficiency Configuration
|
||||
# Subsystem: Loki Offensive - Projectile Scoping Array
|
||||
# Subsystem: Loki Offensive - Turret Concurrence Registry
|
||||
# Subsystem: Proteus Defensive - Augmented Plating
|
||||
# Subsystem: Proteus Defensive - Nanobot Injector
|
||||
# Subsystem: Proteus Offensive - Dissonic Encoding Platform
|
||||
# Subsystem: Proteus Offensive - Drone Synthesis Projector
|
||||
# Subsystem: Proteus Offensive - Hybrid Propulsion Armature
|
||||
# Subsystem: Tengu Defensive - Amplification Node
|
||||
# Subsystem: Tengu Defensive - Supplemental Screening
|
||||
# Subsystem: Tengu Offensive - Accelerated Ejection Bay
|
||||
# Subsystem: Tengu Offensive - Magnetic Infusion Basin
|
||||
# Subsystem: Tengu Offensive - Rifling Launcher Pattern
|
||||
# Items from category: Subsystem (40 of 80)
|
||||
type = "passive"
|
||||
def handler(fit, module, context):
|
||||
fit.ship.increaseItemAttr("cpuOutput", module.getModifiedItemAttr("cpuOutput"))
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
# Used by:
|
||||
# Ship: Arazu
|
||||
# Ship: Falcon
|
||||
# Ship: Pilgrim
|
||||
# Ship: Rapier
|
||||
# Ships from group: Force Recon Ship (4 of 5)
|
||||
type = "passive"
|
||||
def handler(fit, ship, context):
|
||||
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Cynosural Field",
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
# Used by:
|
||||
# Ship: Arazu
|
||||
# Ship: Falcon
|
||||
# Ship: Pilgrim
|
||||
# Ship: Rapier
|
||||
# Ships from group: Force Recon Ship (4 of 5)
|
||||
# Skill: Cynosural Field Theory
|
||||
type = "passive"
|
||||
def handler(fit, container, context):
|
||||
|
||||
@@ -7,5 +7,6 @@ def handler(fit, module, context):
|
||||
bonus = "%s%sDamageResonance" % (attrPrefix, damageType)
|
||||
bonus = "%s%s" % (bonus[0].lower(), bonus[1:])
|
||||
booster = "%s%sDamageResonance" % (layer, damageType)
|
||||
penalize = False if layer == 'hull' else True
|
||||
fit.ship.multiplyItemAttr(bonus, module.getModifiedItemAttr(booster),
|
||||
stackingPenalties=True, penaltyGroup="preMul")
|
||||
stackingPenalties=penalize, penaltyGroup="preMul")
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# Used by:
|
||||
# Modules named like: Data Analyzer (11 of 11)
|
||||
# Variations of module: Relic Analyzer I (2 of 2)
|
||||
# Modules from group: Data Miners (13 of 14)
|
||||
# Module: QA Cross Protocol Analyzer
|
||||
type = "active"
|
||||
def handler(fit, module, context):
|
||||
|
||||
@@ -1,10 +1,5 @@
|
||||
# Used by:
|
||||
# Modules named like: Auxiliary Thrusters (8 of 8)
|
||||
# Modules named like: Cargohold Optimization (8 of 8)
|
||||
# Modules named like: Engine I (8 of 8)
|
||||
# Modules named like: Engine II (8 of 8)
|
||||
# Modules named like: Low Nozzle (8 of 8)
|
||||
# Modules named like: Valve (8 of 8)
|
||||
# Modules from group: Rig Navigation (48 of 64)
|
||||
type = "passive"
|
||||
def handler(fit, module, context):
|
||||
fit.ship.boostItemAttr("armorHP", module.getModifiedItemAttr("drawback"))
|
||||
@@ -1,8 +1,6 @@
|
||||
# Used by:
|
||||
# Modules named like: Anti Pump (32 of 32)
|
||||
# Modules named like: Remote Augmentor (8 of 8)
|
||||
# Modules named like: Salvage Tackle (8 of 8)
|
||||
# Modules named like: Trimark Pump (8 of 8)
|
||||
# Modules from group: Rig Armor (48 of 64)
|
||||
# Modules from group: Rig Resource Processing (8 of 10)
|
||||
type = "passive"
|
||||
def handler(fit, module, context):
|
||||
fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("drawback"),
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
# Used by:
|
||||
# Variations of module: Large Auxiliary Nano Pump I (2 of 2)
|
||||
# Variations of module: Large Nanobot Accelerator I (2 of 2)
|
||||
# Variations of module: Medium Auxiliary Nano Pump I (2 of 2)
|
||||
# Variations of module: Medium Nanobot Accelerator I (2 of 2)
|
||||
# Variations of module: Small Auxiliary Nano Pump I (2 of 2)
|
||||
# Variations of module: Small Nanobot Accelerator I (2 of 2)
|
||||
# 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"),
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
# Used by:
|
||||
# Modules from group: Rig Electronic Systems (40 of 48)
|
||||
# Modules from group: Rig Targeting (16 of 16)
|
||||
# Modules named like: Diagnostic Subroutines (8 of 8)
|
||||
# Modules named like: Dispersion (16 of 16)
|
||||
# Modules named like: Inverted Signal Field Projector (8 of 8)
|
||||
# Modules named like: Signal Focusing (8 of 8)
|
||||
# Modules named like: Targeting Systems (8 of 8)
|
||||
# Modules named like: Signal Focusing Kit (8 of 8)
|
||||
type = "passive"
|
||||
def handler(fit, module, context):
|
||||
fit.ship.boostItemAttr("shieldCapacity", module.getModifiedItemAttr("drawback"))
|
||||
|
||||
@@ -1,15 +1,6 @@
|
||||
# Used by:
|
||||
# Subsystems from group: Engineering Systems (13 of 16)
|
||||
# Subsystems from group: Offensive Systems (16 of 16)
|
||||
# Variations of subsystem: Loki Engineering - Power Core Multiplier (4 of 4)
|
||||
# Subsystem: Legion Engineering - Augmented Capacitor Reservoir
|
||||
# Subsystem: Legion Engineering - Capacitor Regeneration Matrix
|
||||
# Subsystem: Legion Engineering - Power Core Multiplier
|
||||
# Subsystem: Proteus Engineering - Augmented Capacitor Reservoir
|
||||
# Subsystem: Proteus Engineering - Capacitor Regeneration Matrix
|
||||
# Subsystem: Proteus Engineering - Power Core Multiplier
|
||||
# Subsystem: Tengu Engineering - Augmented Capacitor Reservoir
|
||||
# Subsystem: Tengu Engineering - Capacitor Regeneration Matrix
|
||||
# Subsystem: Tengu Engineering - Power Core Multiplier
|
||||
type = "passive"
|
||||
def handler(fit, module, context):
|
||||
fit.ship.increaseItemAttr("droneBandwidth", module.getModifiedItemAttr("droneBandwidth"))
|
||||
|
||||
@@ -1,25 +1,5 @@
|
||||
# Used by:
|
||||
# Subsystems from group: Defensive Systems (16 of 16)
|
||||
# Variations of subsystem: Loki Engineering - Power Core Multiplier (4 of 4)
|
||||
# Variations of subsystem: Loki Offensive - Turret Concurrence Registry (4 of 4)
|
||||
# Subsystem: Legion Engineering - Augmented Capacitor Reservoir
|
||||
# Subsystem: Legion Engineering - Capacitor Regeneration Matrix
|
||||
# Subsystem: Legion Engineering - Power Core Multiplier
|
||||
# Subsystem: Legion Offensive - Assault Optimization
|
||||
# Subsystem: Legion Offensive - Drone Synthesis Projector
|
||||
# Subsystem: Legion Offensive - Liquid Crystal Magnifiers
|
||||
# Subsystem: Proteus Engineering - Augmented Capacitor Reservoir
|
||||
# Subsystem: Proteus Engineering - Capacitor Regeneration Matrix
|
||||
# Subsystem: Proteus Engineering - Power Core Multiplier
|
||||
# Subsystem: Proteus Offensive - Dissonic Encoding Platform
|
||||
# Subsystem: Proteus Offensive - Drone Synthesis Projector
|
||||
# Subsystem: Proteus Offensive - Hybrid Propulsion Armature
|
||||
# Subsystem: Tengu Engineering - Augmented Capacitor Reservoir
|
||||
# Subsystem: Tengu Engineering - Capacitor Regeneration Matrix
|
||||
# Subsystem: Tengu Engineering - Power Core Multiplier
|
||||
# Subsystem: Tengu Offensive - Accelerated Ejection Bay
|
||||
# Subsystem: Tengu Offensive - Magnetic Infusion Basin
|
||||
# Subsystem: Tengu Offensive - Rifling Launcher Pattern
|
||||
# Items from category: Subsystem (42 of 80)
|
||||
type = "passive"
|
||||
def handler(fit, module, context):
|
||||
fit.ship.increaseItemAttr("droneCapacity", module.getModifiedItemAttr("droneCapacity"))
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
# Used by:
|
||||
# Skill: Amarr Drone Specialization
|
||||
# Skill: Caldari Drone Specialization
|
||||
# Skill: Gallente Drone Specialization
|
||||
# Skills named like: Drone Specialization (4 of 4)
|
||||
# Skill: Heavy Drone Operation
|
||||
# Skill: Minmatar Drone Specialization
|
||||
# Skill: Sentry Drone Interfacing
|
||||
type = "passive"
|
||||
def handler(fit, skill, context):
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Used by:
|
||||
# Modules named like: Durability Enhancer (8 of 8)
|
||||
# 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"),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Used by:
|
||||
# Modules named like: Durability Enhancer (8 of 8)
|
||||
# Modules named like: Drone Durability Enhancer (8 of 8)
|
||||
# Skill: Drone Durability
|
||||
type = "passive"
|
||||
def handler(fit, container, context):
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Used by:
|
||||
# Modules named like: Durability Enhancer (8 of 8)
|
||||
# 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"),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Used by:
|
||||
# Modules named like: Drone Scope (8 of 8)
|
||||
# Modules named like: Drone Scope Chip (8 of 8)
|
||||
# Skill: Drone Sharpshooting
|
||||
type = "passive"
|
||||
def handler(fit, container, context):
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Used by:
|
||||
# Modules named like: Speed Augmentor (8 of 8)
|
||||
# Modules named like: Drone Speed Augmentor (8 of 8)
|
||||
# Skill: Drone Navigation
|
||||
type = "passive"
|
||||
def handler(fit, container, context):
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Used by:
|
||||
# Modules named like: Stasis Augmentor (8 of 8)
|
||||
# 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",
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
# Used by:
|
||||
# Ship: Basilisk
|
||||
# Ship: Etana
|
||||
# Ships from group: Logistics (3 of 5)
|
||||
# Ship: Exequror
|
||||
# Ship: Scimitar
|
||||
# Ship: Scythe
|
||||
type = "passive"
|
||||
def handler(fit, ship, context):
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Used by:
|
||||
# Modules named like: Thermal Shielding (8 of 8)
|
||||
# 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",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Used by:
|
||||
# Implants named like: Zainou 'Gypsy' Electronics EE (6 of 6)
|
||||
# Modules named like: Overclocking (8 of 8)
|
||||
# Modules named like: Processor Overclocking Unit (8 of 8)
|
||||
# Implant: Genolution Core Augmentation CA-2
|
||||
# Skill: CPU Management
|
||||
type = "passive"
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
# Used by:
|
||||
# Ship: Absolution
|
||||
# Ship: Astarte
|
||||
# Ship: Damnation
|
||||
# Ship: Eos
|
||||
# Ships from group: Command Ship (4 of 8)
|
||||
type = "passive"
|
||||
def handler(fit, ship, context):
|
||||
level = fit.character.getSkill("Command Ships").level
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
# Used by:
|
||||
# Ship: Absolution
|
||||
# Ship: Damnation
|
||||
# Ship: Nighthawk
|
||||
# Ship: Vulture
|
||||
# Ships from group: Command Ship (4 of 8)
|
||||
type = "passive"
|
||||
def handler(fit, module, context):
|
||||
level = fit.character.getSkill("Command Ships").level
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
# Used by:
|
||||
# Ship: Absolution
|
||||
# Ship: Damnation
|
||||
# Ship: Nighthawk
|
||||
# Ship: Vulture
|
||||
# Ships from group: Command Ship (4 of 8)
|
||||
type = "passive"
|
||||
def handler(fit, module, context):
|
||||
level = fit.character.getSkill("Command Ships").level
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
# Used by:
|
||||
# Ship: Claymore
|
||||
# Ship: Nighthawk
|
||||
# Ship: Sleipnir
|
||||
# Ship: Vulture
|
||||
# Ships from group: Command Ship (4 of 8)
|
||||
type = "passive"
|
||||
def handler(fit, ship, context):
|
||||
level = fit.character.getSkill("Command Ships").level
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
# Used by:
|
||||
# Ship: Astarte
|
||||
# Ship: Claymore
|
||||
# Ship: Eos
|
||||
# Ship: Sleipnir
|
||||
# Ships from group: Command Ship (4 of 8)
|
||||
type = "passive"
|
||||
def handler(fit, ship, context):
|
||||
level = fit.character.getSkill("Command Ships").level
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Used by:
|
||||
# Implants named like: 'Squire' Upgrades EU (6 of 6)
|
||||
# Modules named like: Powergrid Subroutine (8 of 8)
|
||||
# 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):
|
||||
|
||||
@@ -1,11 +1,8 @@
|
||||
# Used by:
|
||||
# Modules named like: Semiconductor Cell (8 of 8)
|
||||
# Items from market group: Implants & Boosters > Implants > Skill Hardwiring > Engineering Implants > Implant Slot 08 (6 of 6)
|
||||
# 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
|
||||
# Implant: Improved Mindflood Booster
|
||||
# Implant: Standard Mindflood Booster
|
||||
# Implant: Strong Mindflood Booster
|
||||
# Implant: Synth Mindflood Booster
|
||||
# Skill: Capacitor Management
|
||||
type = "passive"
|
||||
def handler(fit, container, context):
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Used by:
|
||||
# Implants named like: Weapons EP (6 of 6)
|
||||
# Implants named like: Inherent Implants 'Squire' Energy Pulse Weapons EP (6 of 6)
|
||||
# Skill: Energy Pulse Weapons
|
||||
type = "passive"
|
||||
def handler(fit, container, context):
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Used by:
|
||||
# Implants named like: Implants 'Squire' Energy Systems Operation (6 of 6)
|
||||
# Modules named like: Capacitor Circuit (8 of 8)
|
||||
# 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: Capacitor Systems Operation
|
||||
type = "passive"
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
# Used by:
|
||||
# Ship: Basilisk
|
||||
# Ship: Etana
|
||||
# Ship: Guardian
|
||||
# Ships from group: Logistics (3 of 5)
|
||||
type = "passive"
|
||||
def handler(fit, ship, context):
|
||||
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Capacitor Transmitter",
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
# Used by:
|
||||
# Modules from group: Heat Sink (25 of 25)
|
||||
# Modules named like: QA Multiship Module Players (4 of 4)
|
||||
# Module: QA Damage Module
|
||||
# Module: QA Multiship Module - 10 Players
|
||||
# Module: QA Multiship Module - 20 Players
|
||||
# Module: QA Multiship Module - 40 Players
|
||||
# Module: QA Multiship Module - 5 Players
|
||||
type = "passive"
|
||||
def handler(fit, module, context):
|
||||
fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Energy Weapon",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Used by:
|
||||
# Modules named like: Energy Accelerator (8 of 8)
|
||||
# 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",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Used by:
|
||||
# Implants named like: 'Squire' EG (6 of 6)
|
||||
# Modules named like: Ancillary Router (8 of 8)
|
||||
# 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: Power Grid Management
|
||||
type = "passive"
|
||||
|
||||
@@ -1,12 +1,8 @@
|
||||
# Used by:
|
||||
# Implants named like: and 'Rogue' EM (6 of 6)
|
||||
# Modules named like: Low Nozzle Joints (8 of 8)
|
||||
# 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)
|
||||
# Implant: Genolution Core Augmentation CA-4
|
||||
# Implant: Low-grade Nomad Alpha
|
||||
# Implant: Low-grade Nomad Beta
|
||||
# Implant: Low-grade Nomad Delta
|
||||
# Implant: Low-grade Nomad Epsilon
|
||||
# Implant: Low-grade Nomad Gamma
|
||||
# Skill: Evasive Maneuvering
|
||||
# Skill: Spaceship Command
|
||||
type = "passive"
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
# Used by:
|
||||
# Implant: Low-grade Centurion Alpha
|
||||
# Implant: Low-grade Centurion Beta
|
||||
# Implant: Low-grade Centurion Delta
|
||||
# Implant: Low-grade Centurion Epsilon
|
||||
# Implant: Low-grade Centurion Gamma
|
||||
# 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",
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
# Used by:
|
||||
# Implant: Low-grade Centurion Alpha
|
||||
# Implant: Low-grade Centurion Beta
|
||||
# Implant: Low-grade Centurion Delta
|
||||
# Implant: Low-grade Centurion Epsilon
|
||||
# Implant: Low-grade Centurion Gamma
|
||||
# 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",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user