Compare commits

..

155 Commits

Author SHA1 Message Date
blitzmann
9c67e7dd93 Fix database for icons (using old data), bump for release 2016-02-10 20:07:56 -05:00
blitzmann
df81a146d2 Bump dev 2016-02-10 15:08:42 -05:00
blitzmann
9bfb697f1e Bump version 2016-02-10 13:22:39 -05:00
blitzmann
2e227cdbd5 Update to TQ 1006189 2016-02-10 11:49:58 -05:00
blitzmann
fb7c227a10 Add a few market conversions and change cap drone group name (Feb '16 release) 2016-02-10 01:24:21 -05:00
blitzmann
e3742c0420 Fix double calculations on projected fits that double as boosters (#496) 2016-02-10 00:04:19 -05:00
blitzmann
373ccbcee5 Fix runtime for all ganglink module effects 2016-02-07 23:46:20 -05:00
blitzmann
785060f12b Merge branch 'test' 2016-02-06 16:07:44 -05:00
blitzmann
4e509bbaee Fix character editor crash on Windows by disallowing resizing. (#441) 2016-02-06 16:04:29 -05:00
blitzmann
7e305aab67 Revert "Tentative fix for character editor issues."
This reverts commit 253ebdc4e1.
2016-01-31 10:52:00 -05:00
blitzmann
55eed0d029 Revert "Fix Character Editor Dialog for osx"
This reverts commit 9fc31d6a55.
2016-01-31 10:51:45 -05:00
blitzmann
c7d5f2533a Merge pull request #514 from gitter-badger/gitter-badge
Add a Gitter chat badge to README.md
2016-01-29 14:49:08 -05:00
The Gitter Badger
a6cfbcb331 Add Gitter badge 2016-01-29 19:41:11 +00:00
blitzmann
45074952fd Merge pull request #504 from resinneublem/export-charges-optional
Make exporting charges a preference
2016-01-26 15:34:23 -05:00
blitzmann
a73d9abc60 Fix stacking for leadership, skirmish, and Information skill effects 2016-01-26 05:12:46 -05:00
blitzmann
9fc31d6a55 Fix Character Editor Dialog for osx 2016-01-25 22:47:27 -05:00
blitzmann
9cb99a1170 Update README.md 2016-01-25 21:36:50 -05:00
blitzmann
f3f1d022ef Updated to new repo location and forum thread 2016-01-25 21:14:45 -05:00
blitzmann
253ebdc4e1 Tentative fix for character editor issues. 2016-01-25 21:10:20 -05:00
blitzmann
5d45f1d3f3 Update README.md 2016-01-25 20:37:35 -05:00
blitzmann
e253af9763 Added links to distro-specific packages 2016-01-25 20:37:17 -05:00
blitzmann
a355a82f8a Merge pull request #503 from resinneublem/osx-preferences-shortcut
Use idiomatic osx preferences shortcut
2016-01-16 23:31:05 -05:00
Resin Neublem
ceb7eb15c3 Make exporting charges a preference
Some users don't want to export equiped charges because it might
conflict with their cargo hold (don't need 2x of the same type of script)

They just be equipping the items to see the different stats
2016-01-16 13:45:13 -05:00
Resin Neublem
115b154f0b Use idiomatic osx preferences shortcut
OSX uses "Command-," for application preferences
2016-01-16 13:09:13 -05:00
blitzmann
2d1344b785 Fix issue with accidental whitespace in CREST user-defined settings 2016-01-13 19:41:58 -05:00
blitzmann
bdf793072c Fix for t2 cloaks on prospect 2016-01-12 17:38:00 -05:00
blitzmann
2f879d39f3 Bump dev 2016-01-12 17:34:53 -05:00
blitzmann
36ab224853 Update to 996005 and bump stable 2016-01-12 00:28:19 -05:00
blitzmann
52d19b8de4 Remove debug prints 2016-01-09 14:48:13 -05:00
blitzmann
7be5ec844f Update README.md 2016-01-09 14:13:20 -05:00
blitzmann
3d26a31ee2 Add option to disable gauge animations (primarily for osx 10.11 users, see #438) 2016-01-09 12:36:55 -05:00
blitzmann
343d605a84 Fitting file import improvements:
- Blank files don't cause crash
- If error happens during processing, notify user
2016-01-03 21:45:19 -05:00
blitzmann
ef1228eb32 Ensure that utf-8 is tested when importing fits 2016-01-03 13:24:05 -05:00
blitzmann
ad738f7e7c Fix exporting fit to XML when name is unicode 2016-01-03 00:06:53 -05:00
blitzmann
4a66fa0138 Revert "Fix Command Destroyer MWD sig radius issue"
This reverts commit 331338e7b9.
2015-12-30 23:17:42 -05:00
blitzmann
331338e7b9 Fix Command Destroyer MWD sig radius issue 2015-12-30 23:02:27 -05:00
blitzmann
8e28925336 Add civilian weapons 2015-12-20 21:10:18 -05:00
blitzmann
df0e829dbe Merge pull request #478 from Neugeniko/master
Handle Crest Import and Export of Drone Bay and Cargo Bay contents.
2015-12-20 18:35:36 -05:00
Neugeniko
0c278b668c Handle Crest Import and Export of Drone Bay and Cargo Bay contents. 2015-12-16 12:56:28 +11:00
blitzmann
6e7ba714a8 Bump Dev, and fix import errors (#474) 2015-12-13 22:26:36 -05:00
blitzmann
d8e2e3ace1 Fix triage effects on weapon disrupters, update DB, and bump release 2015-12-10 20:18:02 -05:00
blitzmann
69c3dd188e Merge pull request #472 from wendazhou/FixNeutNosDisruptor
Fixed display of neut and nos amount, and guidance disruptors
2015-12-10 19:50:58 -05:00
Wenda Zhou
57da36f1cf Fixed category names for neut, nos and tracking disruptor.
With the implementation of falloff for energy neutralizer
and nosferatus, their names has changed so had to update
for correct display.

Also added some display for the new guidance disruptors
(i.e. missile disruptors). This also fixes the category
change for weapon disruptor (both are now called weapon
disruptor).
2015-12-09 22:50:30 -05:00
blitzmann
753ba00ac0 Update icons and EVE data 2015-12-09 21:56:22 -05:00
blitzmann
290f7d116f Fix some RR shield effects, and bump dev because I forgot 2015-12-09 21:09:50 -05:00
blitzmann
81fa88a36d Remove previously mentioned old item 2015-12-09 20:55:34 -05:00
blitzmann
0dd98330aa Fix issue with old item in market service causing error due to being non-existent. 2015-12-09 20:54:29 -05:00
blitzmann
ae55a2c1d2 Fix Nestor RR falloff effect 2015-12-08 12:21:21 -05:00
blitzmann
43ae593568 Bump to Stable 2015-12-07 20:12:19 -05:00
blitzmann
81963a6a7d Update effect files 2015-12-07 20:10:44 -05:00
blitzmann
fbf67c134b Merge remote-tracking branch 'origin/singularity' 2015-12-07 19:39:45 -05:00
blitzmann
a0cfe05eb5 Update to 988883, fix market conversion and add the converted modules, and improve on rename/conversion helper script 2015-12-07 19:38:54 -05:00
blitzmann
ba6e8d7ad1 Add renamed items 2015-12-06 14:28:35 -05:00
blitzmann
cbd2ed603f Possible fix for character editor crash 2015-12-06 11:16:54 -05:00
blitzmann
a2f1623b00 Fix icon script (no longer use icon prefix) and update icons 2015-12-06 10:22:25 -05:00
blitzmann
87ebcf0818 Update renders 2015-12-06 01:42:12 -05:00
blitzmann
f329c9956e Fix for icon conversion 2015-12-06 01:30:21 -05:00
blitzmann
2ac62ece06 Remove erroneous command causing a break in ship booster menu 2015-12-05 22:53:51 -05:00
blitzmann
f9db5eb201 Update to 988638 2015-12-05 22:35:03 -05:00
blitzmann
0a10f2d72a If running under OSX and wx3, override wx.ID_COPY and wx.ID_PASTE. See GH Issue #456 2015-12-04 01:06:35 -05:00
blitzmann
4325ccab8a Different fix for #397 and fix #458 2015-12-03 22:04:59 -05:00
blitzmann
04c6fad531 Change user agent of CREST calls 2015-12-03 20:50:01 -05:00
blitzmann
ca92285ff3 Fix some Weapon Disruption effects 2015-12-03 20:40:23 -05:00
blitzmann
96eee3a173 Fix Nos/Neut effects 2015-12-03 20:21:57 -05:00
blitzmann
a74c3c9b3d Fix #461 2015-12-02 20:38:45 -05:00
blitzmann
b4373cb0c5 Fix #451 2015-11-29 17:56:39 -05:00
blitzmann
9029c04ce6 Merge branch 'master' into singularity 2015-11-27 22:45:28 -05:00
blitzmann
c7c0c49218 Fix #434 2015-11-27 20:12:02 -05:00
blitzmann
191dd1c71b Add new mining frigate effects 2015-11-27 16:15:16 -05:00
blitzmann
3b64373393 Add more missing effects 2015-11-27 15:58:53 -05:00
blitzmann
0f6c67e852 Add missing effect for Oneiros 2015-11-27 15:03:41 -05:00
blitzmann
209297769f Missed an effect 2015-11-27 01:20:08 -05:00
blitzmann
2d4e3a6ddf Rename Logi skill to Logistic Cruiser 2015-11-27 01:18:32 -05:00
blitzmann
350f4c9f89 Add new effects. This commit uses a new helper script that automatically writes the effect file for the more straightforward effects. 2015-11-27 01:14:59 -05:00
blitzmann
9c9a6b69fe Revert "Add new nos/neut effect files, and change module/drone files to account for new attributes. This does not add the database"
This reverts commit 7dbe6dbe2d.
2015-11-27 00:07:24 -05:00
blitzmann
2b9d85a4bc Update setup-osx.py 2015-11-26 19:10:06 -05:00
blitzmann
f053e45671 Create setup-osx.py 2015-11-26 19:09:23 -05:00
blitzmann
4d701f561e fix booster menu causing crashes (#424) 2015-11-26 18:56:20 -05:00
blitzmann
3cb6d03487 Fix issue with OSX passing an unknown argument 2015-11-25 19:23:59 -05:00
blitzmann
7dbe6dbe2d Add new nos/neut effect files, and change module/drone files to account for new attributes. This does not add the database 2015-11-22 23:03:46 -05:00
blitzmann
81f122467a Fix #432 2015-11-20 01:29:46 -05:00
blitzmann
20759d205c Merge pull request #429 from Neugeniko/master
Added detection of Unicode BOM (Byte Order Mark) ...
2015-11-15 17:27:51 -05:00
blitzmann
b37aea40a7 fix exception when setting a unicode fit as booster (should hopefully fix all timer-related unicode errors) 2015-11-15 17:18:44 -05:00
blitzmann
f95e864119 Fix mindlink effects 2015-11-15 17:18:33 -05:00
blitzmann
7a9de8cd99 Bump dev version 2015-11-15 17:18:25 -05:00
Neugeniko
dde8b1f802 Added detection of Unicode BOM (Byte Order Mark) to determine the encoding used in imported files. 2015-11-14 01:00:32 +11:00
blitzmann
89b756d760 Bump release 2015-11-08 20:23:12 -05:00
blitzmann
3b1edd3283 Add error handling to CREST functions when no connection can be made. 2015-11-08 20:07:30 -05:00
blitzmann
5369b17ebf Update 977931 2015-11-08 19:55:34 -05:00
blitzmann
2fadaa890b fix save character as on os x 2015-11-08 13:52:53 -05:00
blitzmann
31bdb75c51 Added confirmation dialog when deleting character 2015-11-08 12:49:00 -05:00
blitzmann
0124f63d9a Fix amount change dialog for os x 2015-11-08 12:44:32 -05:00
blitzmann
95dba166eb Remove some debugging prints 2015-11-08 12:37:31 -05:00
blitzmann
83adadd71f Convert pubsub to wx events 2015-11-08 12:33:56 -05:00
blitzmann
4baf65c0c7 Merge pull request #414 from andrewd18/master
Add "requests" to README.md
2015-11-07 10:16:44 -05:00
Andrew Dorney
72cdd3e104 Add "requests" to README.md
CREST support requires the requests module which may not be included by default in all users' distributions.
2015-11-07 06:57:34 -06:00
blitzmann
febc2eee09 Add some conditionals to disable Attribute Editor for wxPython 2.8 2015-11-06 20:23:09 -05:00
blitzmann
b302a0a6e5 Weak ciphers aren't needed to CREST it seems (probably was at one point) 2015-11-06 20:06:08 -05:00
blitzmann
1f6a14ee36 Fallback to wx2.8 if 3.0 is not found 2015-11-06 16:04:20 -05:00
blitzmann
99a15af26e Merge pull request #408 from fj/patch-1
Fix typo in README.md
2015-11-06 14:40:43 -05:00
John Feminella
dff7a4d6ac Fix typo in README.md
"liscense" ⇒ "license"
2015-11-06 11:32:28 -05:00
blitzmann
3c8e6a61f2 Fix #406 2015-11-05 20:30:11 -05:00
blitzmann
fb997ab16d bump stable 1.16.1 2015-11-03 22:44:52 -05:00
blitzmann
8fe5f43875 fix some stuff 2015-11-03 22:44:01 -05:00
blitzmann
c8cfee3511 More mac fixes 2015-11-03 22:12:35 -05:00
blitzmann
bf0b89f3b5 Old mac client shouldn't even know about CREST / override. Disable all instances of them for this build. 2015-11-03 21:25:52 -05:00
blitzmann
1d295c04e3 Fix for missing attributes 2015-11-03 20:43:49 -05:00
blitzmann
11ebde87c9 Change attr override window from ctrl+a to ctrl+b 2015-11-03 19:38:03 -05:00
blitzmann
88c4de9820 reintroduce mac-wx3. Split platform build are likely needed right now 2015-11-03 19:28:08 -05:00
blitzmann
09e0a0576c MainFrame pointer was accidentally deleted from characterEditor.py, causing issues. 2015-11-03 19:21:45 -05:00
blitzmann
fc84c5dc94 Whoops 2015-11-03 13:24:49 -05:00
blitzmann
687ebbc41b Bump Stable 2015-11-03 06:21:29 -05:00
blitzmann
0abe953a70 Update dist script to replace mac skel 2015-11-02 21:34:55 -05:00
blitzmann
2a8f3e4855 Merge branch 'singularity' 2015-11-02 21:28:26 -05:00
blitzmann
8cd36f3cbf Add item renames 2015-11-02 21:06:54 -05:00
blitzmann
5577e1976b Update to SISI w/ effects 2015-11-02 20:55:23 -05:00
blitzmann
4b27becb5f Merge branch 'overrides' into singularity
Conflicts:
	eos/db/__init__.py
	eos/db/saveddata/__init__.py
	eos/db/saveddata/queries.py
	gui/mainFrame.py
	gui/mainMenuBar.py
2015-11-02 19:01:12 -05:00
blitzmann
3c055b78d3 Fix clearing of all overrides 2015-11-02 18:55:21 -05:00
blitzmann
eb5ce91cb2 Fix gitignore 2015-11-02 18:47:06 -05:00
blitzmann
ef36dc5ba3 Import/export/clear overrides, add missing files due to bad gitignore entry 2015-11-02 18:45:56 -05:00
blitzmann
d9c710c5a1 Minor improvements 2015-11-01 21:36:04 -05:00
blitzmann
c436e0e669 Create a proper menu item toggle for overrides 2015-11-01 21:19:49 -05:00
blitzmann
e80917e3d1 Things are saved now via GUI 2015-11-01 20:52:22 -05:00
blitzmann
0d0ec42daf Initial GUI commit. Still need to actually handle the attribute change 2015-11-01 19:49:22 -05:00
blitzmann
0e4cca6138 Load overrides from database 2015-11-01 15:00:09 -05:00
blitzmann
b701acb275 Overrides work properly now. Currently toggled on/off by opening character editor, this will be taken over by a menu option 2015-11-01 13:02:29 -05:00
blitzmann
4eb61051c6 Add overrides to the modifiedAttributeDict. Still need to figure out how to switch between the original and the override 2015-11-01 12:04:02 -05:00
blitzmann
56aba37758 Fix PoC so that it actually works, and add a working test case for Web II (changing speedfactor to -80%) 2015-11-01 09:43:34 -05:00
blitzmann
f432b08149 Proof of concept. Need to save overrides in user database and create GUI for it. May be difficult to collect and apply considering the Item container is attached to the eve db and not the user. 2015-10-31 16:53:20 -04:00
blitzmann
3e0b2fd09c Add debug info 2015-10-31 16:52:10 -04:00
blitzmann
c7b8d94e4f Merge branch 'crest_fitting' into singularity 2015-10-31 15:02:24 -04:00
blitzmann
31a9b03436 Merge pull request #390 from OISumeko/weaponStagger
Added option for disabling capacitor simulation staggering for certain modules
2015-10-31 14:55:22 -04:00
blitzmann
f33f558006 Fix prep_data.py 2015-10-31 14:27:43 -04:00
blitzmann
bb4fe63a7c Add CREST preference icon (basic EVE icon), and fix menus when changing modes and whatnot 2015-10-31 14:10:41 -04:00
blitzmann
ccb9e085b2 Setting to change server for CREST, and some other improvements. 2015-10-31 13:20:13 -04:00
Cameron Grout
702d249bad Updated turret detection as advised 2015-10-31 16:15:35 +13:00
Cameron Grout
cc2835a341 Turrets of the same type now do not stagger
Playing with the cap simulator, I noticed that turrets of the same type
stack and have staggering applied when running through the cap
simulator. This is not realistic behaviour as most (all?) pilots will
have grouped their turrets in-game, meaning they will all activate
simultaneously rather than activating individually, offset from
each other.

This change introduces a 'disable stagger' field to the drain tuple that
is passed through to the cap simulator, allowing us to disable
staggering on certain modules. This will enable us to add GUI options in the
future to allow users to choose whether to stagger certain modules (eg,
cap boosters, neuts) or have them all fire simultaneously. Currently
this defaults to False (existing behavior) for all modules except for
turrets, which will now behave more like in-game turrets for cap
simulation purposes.
2015-10-31 15:30:20 +13:00
blitzmann
d73c53cb10 Merge pull request #389 from OISumeko/issue300
Fix for issue #300
2015-10-30 21:26:39 -04:00
OISumeko
73409a3324 Fix for issue 300
Modified capsim so that for non-capstable fits, the capacitor time will
indicate the time at which the first module failed to activate due to
insufficient capacitor rather than the time of the last successful
activation.
2015-10-31 14:14:44 +13:00
blitzmann
24f770aa7b Use + instead of space (fixes an Iceweasel browser issue) 2015-10-30 21:09:06 -04:00
blitzmann
649b99d7bd Another possible fix for server issues. 2015-10-30 21:07:56 -04:00
blitzmann
a8b50032c4 Merge pull request #388 from OISumeko/master
Fix for 387
2015-10-30 12:41:40 -04:00
Cameron Grout
d1d276ae68 Fix for 387
Modified capsim to deal with reload/clipSize logic before grouping
modules for staggering. This prevents loaded AARs from being sent
through as seperate cap drain elements to other repairers of the same
size.
2015-10-30 16:18:33 +13:00
blitzmann
6eafbb0a25 Possible fix for server issues. Instead of using a timer, use the socket timeout, and ensure that we stop server before spawning a new one. 2015-10-28 21:25:01 -04:00
blitzmann
aedd7ce2de Add support to delete fit from EVE 2015-10-26 21:27:54 -04:00
blitzmann
b0511ed856 Delete crest chars when changing client settings 2015-10-26 23:54:42 -04:00
blitzmann
d60b288e0e Merge pull request #381 from OISumeko/master
Fix for issue 347
2015-10-26 19:32:05 -04:00
blitzmann
f7d5287087 Merge pull request #385 from minlexx/patch-1
Check that python-dateutil is installed at startup
2015-10-26 19:31:20 -04:00
Alexey Min
6ed81e9bae Check that python-dateutil is installed at startup
Check that python-dateutil is installed at startup in pyfa.py, same way as for wxPython and SQLAlchemy (except for version check).
2015-10-20 11:01:00 +05:00
blitzmann
1415de9573 Merge pull request #382 from Will-W/master
Add a simple usage note to projected view
2015-10-13 20:19:40 -04:00
Will Wykeham
73de795082 Fix click on dummy item 2015-10-13 16:13:35 +01:00
Will Wykeham
bb9760f79c Add a usage hint to the Projected tab 2015-10-13 16:01:13 +01:00
Will Wykeham
53b8ca3940 Fix some indentation inconsistency 2015-10-13 15:59:06 +01:00
Will Wykeham
8a9107c798 Fix a double handle of the delete event
On GTK, the handler will get called twice if you call skip(),
and a ValueError exception is thrown on cmdline
We're handling the event so skip not necessary.
2015-10-13 15:56:58 +01:00
OISumeko
52f06bbd43 Fix for issue 347 2015-10-14 01:06:19 +13:00
1204 changed files with 2944 additions and 736 deletions

View File

@@ -1,5 +1,7 @@
# pyfa
[![Join the chat at https://gitter.im/pyfa-org/Pyfa](https://badges.gitter.im/pyfa-org/Pyfa.svg)](https://gitter.im/pyfa-org/Pyfa?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
![pyfa](https://cloud.githubusercontent.com/assets/3904767/10271512/af385ef2-6ade-11e5-8f67-52b8b1e4c797.PNG)
## What is it?
@@ -12,19 +14,28 @@ The latest version along with release notes can always be found on the projects
## Installing
Windows and OS X users are supplied self-contained builds of pyfa that can be run without additional software. An `.exe` installer is also available for the Windows builds. There is no self-contained package for Linux users, which are expected to run pyfa through their distributions Python interpreter. However, there are a number of third-party packages available that handle the dependencies and updates for pyfa (for example, [pyfa for Arch Linux](https://aur.archlinux.org/packages/pyfa/)). Please check your distributions repositories.
## Requirements
### Requirements
If you wish to help with development or simply need to run pyfa through a Python interpreter, the following software is required:
* Python >= 2.6
* Python 2.7
* `wxPython` 2.8/3.0
* `sqlalchemy` >= 0.6
* `dateutil`
* `matplotlib` (for some Linux distributions, you may need to install separate wxPython bindings, such as `python-matplotlib-wx`)
* `requests`
### Linux Distro-specific Packages
The following is a list of pyfa packages available for certain distros. Please note that these packages are maintained by third-parties and are not evaluated by the pyfa developers.
* Debian/Ubuntu/derivitives: https://github.com/AdamMajer/Pyfa/releases
* Arch: https://aur.archlinux.org/packages/pyfa/
* openSUSE: https://build.opensuse.org/package/show/home:rmk2/pyfa
* FreeBSD: http://www.freshports.org/games/pyfa/ (see #484 for instructions)
## Bug Reporting
The preferred method of reporting bugs is through the projects GitHub Issues interface. Alternatively, posting a report in the pyfa thread on the official EVE Online forums is acceptable. Guidelines for bug reporting can be found on [this wiki page](https://github.com/DarkFenX/Pyfa/wiki/Bug-Reporting).
## Liscense
## License
pyfa is licensed under the GNU GPL v3.0, see LICENSE
## Resources

View File

@@ -18,14 +18,12 @@ debug = False
saveInRoot = False
# Version data
version = "1.15.1"
tag = "git"
expansionName = "Vanguard"
expansionVersion = "1.0"
version = "1.19.1"
tag = "Stable"
expansionName = "February 2016"
expansionVersion = "1.1"
evemonMinVersion = "4081"
clientID = 'af87365240d644f7950af563b8418bad'
pyfaPath = None
savePath = None
saveDB = None
@@ -96,6 +94,7 @@ def defPaths():
if isFrozen():
os.environ["REQUESTS_CA_BUNDLE"] = os.path.join(pyfaPath, "cacert.pem")
os.environ["SSL_CERT_FILE"] = os.path.join(pyfaPath, "cacert.pem")
format = '%(asctime)s %(name)-24s %(levelname)-8s %(message)s'
logging.basicConfig(format=format, level=logLevel)

View File

@@ -59,26 +59,20 @@ class CapSimulator(object):
return duration, capNeed
def init(self, modules):
"""prepare modules. a list of (duration, capNeed, clipSize) tuples is
"""prepare modules. a list of (duration, capNeed, clipSize, disableStagger) 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
self.modules = modules
def reset(self):
"""Reset the simulator state"""
self.state = []
mods = {}
period = 1
disable_period = False
for (duration, capNeed, clipSize), amount in self.modules.iteritems():
# Loop over modules, clearing clipSize if applicable, and group modules based on attributes
for (duration, capNeed, clipSize, disableStagger) in self.modules:
if self.scale:
duration, capNeed = self.scale_activation(duration, capNeed)
@@ -87,7 +81,15 @@ class CapSimulator(object):
if not self.reload and capNeed > 0:
clipSize = 0
if self.stagger:
# Group modules based on their properties
if (duration, capNeed, clipSize, disableStagger) in mods:
mods[(duration, capNeed, clipSize, disableStagger)] += 1
else:
mods[(duration, capNeed, clipSize, disableStagger)] = 1
# Loop over grouped modules, configure staggering and push to the simulation state
for (duration, capNeed, clipSize, disableStagger), amount in mods.iteritems():
if self.stagger and not disableStagger:
if clipSize == 0:
duration = int(duration/amount)
else:
@@ -167,13 +169,13 @@ class CapSimulator(object):
iterations += 1
t_last = t_now
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

View File

@@ -68,14 +68,8 @@ 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, getBoosterFits, getProjectedFits, getTargetResistsList, getTargetResists,\
clearPrices, countAllFits, getCrestCharacters, getCrestCharacter
from eos.db.gamedata.queries import *
from eos.db.saveddata.queries import *
#If using in memory saveddata, you'll want to reflect it so the data structure is good.
if config.saveddata_connectionstring == "sqlite:///:memory:":

View File

@@ -0,0 +1,116 @@
"""
Migration 11
- Converts modules based on December Release 2015 Tiericide
Some modules have been unpublished (and unpublished module attributes are removed
from database), which causes pyfa to crash. We therefore replace these
modules with their new replacements
"""
CONVERSIONS = {
16467: ( # Medium Gremlin Compact Energy Neutralizer
16471, # Medium Unstable Power Fluctuator I
),
22947: ( # 'Beatnik' Small Remote Armor Repairer
23414, # 'Brotherhood' Small Remote Armor Repairer
),
8295: ( # Type-D Restrained Shield Flux Coil
8293, # Beta Reactor Control: Shield Flux I
),
16499: ( # Heavy Knave Scoped Energy Nosferatu
16501, # E500 Prototype Energy Vampire
),
16477: ( # Heavy Infectious Scoped Energy Neutralizer
16473, # Heavy Rudimentary Energy Destabilizer I
),
16475: ( # Heavy Gremlin Compact Energy Neutralizer
16479, # Heavy Unstable Power Fluctuator I
),
16447: ( # Medium Solace Scoped Remote Armor Repairer
16445, # Medium 'Arup' Remote Armor Repairer
),
508: ( # 'Basic' Shield Flux Coil
8325, # Alpha Reactor Shield Flux
8329, # Marked Generator Refitting: Shield Flux
8323, # Partial Power Plant Manager: Shield Flux
8327, # Type-E Power Core Modification: Shield Flux
),
1419: ( # 'Basic' Shield Power Relay
8341, # Alpha Reactor Shield Power Relay
8345, # Marked Generator Refitting: Shield Power Relay
8339, # Partial Power Plant Manager: Shield Power Relay
8343, # Type-E Power Core Modification: Shield Power Relay
),
16439: ( # Small Solace Scoped Remote Armor Repairer
16437, # Small 'Arup' Remote Armor Repairer
),
16505: ( # Medium Ghoul Compact Energy Nosferatu
16511, # Medium Diminishing Power System Drain I
),
8297: ( # Mark I Compact Shield Flux Coil
8291, # Local Power Plant Manager: Reaction Shield Flux I
),
16455: ( # Large Solace Scoped Remote Armor Repairer
16453, # Large 'Arup' Remote Armor Repairer
),
6485: ( # M51 Benefactor Compact Shield Recharger
6491, # Passive Barrier Compensator I
6489, # 'Benefactor' Ward Reconstructor
6487, # Supplemental Screen Generator I
),
5137: ( # Small Knave Scoped Energy Nosferatu
5135, # E5 Prototype Energy Vampire
),
8579: ( # Medium Murky Compact Remote Shield Booster
8581, # Medium 'Atonement' Remote Shield Booster
),
8531: ( # Small Murky Compact Remote Shield Booster
8533, # Small 'Atonement' Remote Shield Booster
),
16497: ( # Heavy Ghoul Compact Energy Nosferatu
16503, # Heavy Diminishing Power System Drain I
),
4477: ( # Small Gremlin Compact Energy Neutralizer
4475, # Small Unstable Power Fluctuator I
),
8337: ( # Mark I Compact Shield Power Relay
8331, # Local Power Plant Manager: Reaction Shield Power Relay I
),
23416: ( # 'Peace' Large Remote Armor Repairer
22951, # 'Pacifier' Large Remote Armor Repairer
),
5141: ( # Small Ghoul Compact Energy Nosferatu
5139, # Small Diminishing Power System Drain I
),
4471: ( # Small Infectious Scoped Energy Neutralizer
4473, # Small Rudimentary Energy Destabilizer I
),
16469: ( # Medium Infectious Scoped Energy Neutralizer
16465, # Medium Rudimentary Energy Destabilizer I
),
8335: ( # Type-D Restrained Shield Power Relay
8333, # Beta Reactor Control: Shield Power Relay I
),
405: ( # 'Micro' Remote Shield Booster
8631, # Micro Asymmetric Remote Shield Booster
8627, # Micro Murky Remote Shield Booster
8629, # Micro 'Atonement' Remote Shield Booster
8633, # Micro S95a Remote Shield Booster
),
8635: ( # Large Murky Compact Remote Shield Booster
8637, # Large 'Atonement' Remote Shield Booster
),
16507: ( # Medium Knave Scoped Energy Nosferatu
16509, # E50 Prototype Energy Vampire
),
}
def upgrade(saveddata_engine):
# Convert modules
for replacement_item, list in CONVERSIONS.iteritems():
for retired_item in list:
saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item))
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item))

View File

@@ -1,3 +1,18 @@
__all__ = ["character", "fit", "module", "user", "crest", "skill", "price",
"booster", "drone", "implant", "fleet", "damagePattern",
"miscData", "targetResists"]
__all__ = [
"character",
"fit",
"module",
"user",
"skill",
"price",
"booster",
"drone",
"implant",
"fleet",
"damagePattern",
"miscData",
"targetResists",
"override",
"crest"
]

View File

@@ -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 <http://www.gnu.org/licenses/>.
#===============================================================================
from sqlalchemy import Table, Column, Integer, Float
from sqlalchemy.orm import mapper
from eos.db import saveddata_meta
from eos.types import Override
overrides_table = Table("overrides", saveddata_meta,
Column("itemID", Integer, primary_key=True, index = True),
Column("attrID", Integer, primary_key=True, index = True),
Column("value", Float, nullable = False))
mapper(Override, overrides_table)

View File

@@ -19,7 +19,8 @@
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, TargetResists, CrestChar
from eos.types import User, Character, Fit, Price, DamagePattern, Fleet, MiscData, Wing, Squad, TargetResists, Override, CrestChar
from eos.db.saveddata.fleet import squadmembers_table
from eos.db.saveddata.fit import projectedFits_table
from sqlalchemy.sql import and_
@@ -182,7 +183,7 @@ def getFit(lookfor, eager=None):
else:
eager = processEager(eager)
with sd_lock:
fit = saveddata_session.query(Fit).options(*eager).filter(Fit.ID == fitID).first()
fit = saveddata_session.query(Fit).options(*eager).filter(Fit.ID == lookfor).first()
else:
raise TypeError("Need integer as argument")
@@ -440,6 +441,21 @@ def getCrestCharacter(lookfor, eager=None):
raise TypeError("Need integer or string as argument")
return character
def getOverrides(itemID, eager=None):
if isinstance(itemID, int):
return saveddata_session.query(Override).filter(Override.itemID == itemID).all()
else:
raise TypeError("Need integer as argument")
def clearOverrides():
with sd_lock:
deleted_rows = saveddata_session.query(Override).delete()
commit()
return deleted_rows
def getAllOverrides(eager=None):
return saveddata_session.query(Override).all()
def removeInvalid(fits):
invalids = [f for f in fits if f.isInvalid]

View File

@@ -1,7 +1,7 @@
# ammoInfluenceCapNeed
#
# Used by:
# Items from category: Charge (458 of 831)
# Items from category: Charge (458 of 833)
type = "passive"
def handler(fit, module, context):
# Dirty hack to work around cap charges setting cap booster

View File

@@ -1,7 +1,7 @@
# ammoInfluenceRange
#
# Used by:
# Items from category: Charge (559 of 831)
# Items from category: Charge (559 of 833)
type = "passive"
def handler(fit, module, context):
module.multiplyItemAttr("maxRange", module.getModifiedChargeAttr("weaponRangeMultiplier"))

View File

@@ -0,0 +1,11 @@
# armorRepairProjectorFalloffBonus
#
# Used by:
# Variations of ship: Navitas (2 of 2)
# Ship: Augoror
# Ship: Deacon
# Ship: Exequror
# Ship: Inquisitor
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Armor Repairer", "falloffEffectiveness", src.getModifiedItemAttr("falloffBonus"))

View File

@@ -1,10 +1,11 @@
# armorRepairProjectorMaxRangeBonus
#
# Used by:
# Variations of ship: Navitas (2 of 2)
# Ship: Augoror
# Ship: Deacon
# Ship: Exequror
# Ship: Inquisitor
# Ship: Navitas
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Armor Repairer",

View File

@@ -1,4 +1,4 @@
# armorTankingGang2
# armorWarfareArmorHpReplacer
#
# Used by:
# Implant: Armored Warfare Mindlink

View File

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

View File

@@ -1,7 +1,7 @@
# boosterArmorRepairAmountPenalty
#
# Used by:
# Implants from group: Booster (9 of 39)
# 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",

View File

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

View File

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

View File

@@ -1,7 +1,7 @@
# boosterTurretOptimalRangePenalty
#
# Used by:
# Implants from group: Booster (9 of 39)
# Implants from group: Booster (9 of 37)
type = "boosterSideEffect"
def handler(fit, booster, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),

View File

@@ -1,7 +1,8 @@
# caldariShipEwCapacitorNeedCF2
#
# Used by:
# Variations of ship: Griffin (2 of 2)
# Ship: Griffin
# Ship: Kitsune
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",

View File

@@ -6,8 +6,6 @@
# Modules from group: Power Diagnostic System (23 of 23)
# Modules from group: Propulsion Module (114 of 114)
# Modules from group: Reactor Control Unit (22 of 22)
# Modules from group: Shield Flux Coil (11 of 11)
# Modules from group: Shield Power Relay (11 of 11)
type = "passive"
def handler(fit, module, context):
fit.ship.multiplyItemAttr("capacitorCapacity", module.getModifiedItemAttr("capacitorCapacityMultiplier"))

View File

@@ -0,0 +1,8 @@
# carrierAmarrArmorTransferFalloff3
#
# Used by:
# Ship: Aeon
# Ship: Archon
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Armor Repair Systems"), "falloffEffectiveness", src.getModifiedItemAttr("carrierAmarrBonus3"), skill="Amarr Carrier")

View File

@@ -7,6 +7,6 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"),
"shieldTransferRange", ship.getModifiedItemAttr("carrierCaldariBonus3"), skill="Caldari Carrier")
"maxRange", ship.getModifiedItemAttr("carrierCaldariBonus3"), skill="Caldari Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Capacitor Emission Systems"),
"powerTransferRange", ship.getModifiedItemAttr("carrierCaldariBonus3"), skill="Caldari Carrier")

View File

@@ -0,0 +1,9 @@
# carrierCaldariShieldTransferFalloff3
#
# Used by:
# Ship: Chimera
# Ship: Revenant
# Ship: Wyvern
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"), "falloffEffectiveness", src.getModifiedItemAttr("carrierCaldariBonus3"), skill="Caldari Carrier")

View File

@@ -0,0 +1,8 @@
# carrierGallenteArmor&ShieldTransferFalloff3
#
# Used by:
# Ship: Nyx
# Ship: Thanatos
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems") or mod.item.requiresSkill("Capital Remote Armor Repair Systems"), "falloffEffectiveness", src.getModifiedItemAttr("carrierGallenteBonus3"), skill="Gallente Carrier")

View File

@@ -6,6 +6,6 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"),
"shieldTransferRange", ship.getModifiedItemAttr("carrierGallenteBonus3"), skill="Gallente Carrier")
"maxRange", ship.getModifiedItemAttr("carrierGallenteBonus3"), skill="Gallente Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Armor Repair Systems"),
"maxRange", ship.getModifiedItemAttr("carrierGallenteBonus3"), skill="Gallente Carrier")

View File

@@ -0,0 +1,8 @@
# carrierMinmatarArmor&ShieldTransferFalloff3
#
# Used by:
# Ship: Hel
# Ship: Nidhoggur
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems") or mod.item.requiresSkill("Capital Remote Armor Repair Systems"), "falloffEffectiveness", src.getModifiedItemAttr("carrierMinmatarBonus3"), skill="Minmatar Carrier")

View File

@@ -6,6 +6,6 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"),
"shieldTransferRange", ship.getModifiedItemAttr("carrierMinmatarBonus3"), skill="Minmatar Carrier")
"maxRange", ship.getModifiedItemAttr("carrierMinmatarBonus3"), skill="Minmatar Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Armor Repair Systems"),
"maxRange", ship.getModifiedItemAttr("carrierMinmatarBonus3"), skill="Minmatar Carrier")

View File

@@ -5,6 +5,8 @@
gangBonus = "commandBonusECM"
gangBoost = "ewarStrECM"
type = "active", "gang"
runTime = "late"
def handler(fit, module, context):
if "gang" not in context: return
for scanType in ("Magnetometric", "Radar", "Ladar", "Gravimetric"):

View File

@@ -5,6 +5,8 @@
gangBonus = "commandBonusRSD"
gangBoost = "ewarStrRSD"
type = "active", "gang"
runTime = "late"
def handler(fit, module, context):
if "gang" not in context: return
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Sensor Linking"),

View File

@@ -5,8 +5,18 @@
gangBonus = "commandBonusTD"
gangBoost = "ewarStrTD"
type = "active", "gang"
runTime = "late"
def handler(fit, module, context):
if "gang" not in context: return
for bonus in ("maxRangeBonus", "falloffBonus", "trackingSpeedBonus"):
for bonus in (
"missileVelocityBonus",
"explosionDelayBonus",
"aoeVelocityBonus",
"falloffBonus",
"maxRangeBonus",
"aoeCloudSizeBonus",
"trackingSpeedBonus"
):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"),
bonus, module.getModifiedItemAttr("commandBonusTD"))

View File

@@ -5,8 +5,10 @@
gangBonus = "commandBonusTP"
gangBoost = "ewarStrTP"
type = "active", "gang"
runTime = "late"
def handler(fit, module, context):
if "gang" not in context: return
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Target Painter",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Target Painting"),
"signatureRadiusBonus", module.getModifiedItemAttr("commandBonusTP"),
stackingPenalties = True)

View File

@@ -4,12 +4,12 @@
# Ships from group: Black Ops (4 of 4)
# Ships from group: Blockade Runner (4 of 4)
# Ships from group: Covert Ops (5 of 5)
# Ships from group: Expedition Frigate (2 of 2)
# Ships from group: Force Recon Ship (6 of 6)
# Ships from group: Stealth Bomber (4 of 4)
# Ships named like: Stratios (2 of 2)
# Subsystems named like: Offensive Covert Reconfiguration (4 of 4)
# Ship: Astero
# Ship: Prospect
type = "passive"
def handler(fit, container, context):
fit.modules.filteredItemForce(lambda mod: mod.item.requiresSkill("Cloaking"),

View File

@@ -5,5 +5,5 @@
type = "passive"
runTime = "early"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Cloaking Device",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Cloaking"),
"cpu", ship.getModifiedItemAttr("eliteBonusCoverOps1"), skill="Covert Ops")

View File

@@ -1,8 +1,8 @@
# covertOpsCloakCPUPercentBonusPirateFaction
#
# Used by:
# Ships from group: Expedition Frigate (2 of 2)
# Ship: Astero
# Ship: Prospect
# Ship: Victorieux Luxury Yacht
type = "passive"
runTime = "early"

View File

@@ -4,6 +4,7 @@
# Ships from group: Black Ops (4 of 4)
# Ships from group: Stealth Bomber (4 of 4)
# Ship: Chremoas
# Ship: Endurance
# Ship: Etana
type = "passive"
def handler(fit, ship, context):

View File

@@ -1,9 +1,8 @@
# droneArmorDamageBonusEffect
#
# Used by:
# Ships from group: Logistics (5 of 5)
# Ship: Exequror
# Ship: Guardian
# Ship: Oneiros
# Ship: Scythe
type = "passive"
def handler(fit, ship, context):

View File

@@ -1,7 +1,7 @@
# droneDmgBonus
#
# Used by:
# Skills from group: Drones (8 of 21)
# Skills from group: Drones (8 of 23)
# Skills named like: Drone Specialization (4 of 4)
type = "passive"
def handler(fit, skill, context):

View File

@@ -0,0 +1,9 @@
# droneHullRepairBonusEffect
#
# Used by:
# Ships from group: Logistics (5 of 5)
# Ship: Exequror
# Ship: Scythe
type = "passive"
def handler(fit, src, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.group.name == "Logistic Drone", "structureDamageAmount", src.getModifiedItemAttr("droneArmorDamageAmountBonus"))

View File

@@ -1,7 +1,7 @@
# droneShieldBonusBonusEffect
#
# Used by:
# Ships from group: Logistics (3 of 5)
# Ships from group: Logistics (5 of 5)
# Ship: Exequror
# Ship: Scythe
type = "passive"

View File

@@ -0,0 +1,8 @@
# eliteBonusCommandDestroyerArmored1
#
# Used by:
# Ship: Magus
# Ship: Pontifex
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Warfare Specialist"), "commandBonus", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")

View File

@@ -0,0 +1,8 @@
# eliteBonusCommandDestroyerInfo1
#
# Used by:
# Ship: Pontifex
# Ship: Stork
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Warfare Specialist"), "commandBonus", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")

View File

@@ -0,0 +1,8 @@
# eliteBonusCommandDestroyerInfoHidden1
#
# Used by:
# Ship: Pontifex
# Ship: Stork
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Warfare Specialist"), "commandBonusHidden", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")

View File

@@ -0,0 +1,7 @@
# eliteBonusCommandDestroyerMJFGspool2
#
# Used by:
# Ships from group: Command Destroyers (4 of 4)
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Micro Jump Drive Operation"), "duration", src.getModifiedItemAttr("eliteBonusCommandDestroyer2"), skill="Command Destroyers")

View File

@@ -0,0 +1,7 @@
# eliteBonusCommandDestroyerMWDSigRadius3
#
# Used by:
# Ships from group: Command Destroyers (4 of 4)
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("High Speed Maneuvering"), "signatureRadiusBonus", src.getModifiedItemAttr("eliteBonusCommandDestroyer3"), skill="Command Destroyers")

View File

@@ -0,0 +1,8 @@
# eliteBonusCommandDestroyerSiege1
#
# Used by:
# Ship: Bifrost
# Ship: Stork
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Siege Warfare Specialist"), "commandBonus", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")

View File

@@ -0,0 +1,8 @@
# eliteBonusCommandDestroyerSkirmish1
#
# Used by:
# Ship: Bifrost
# Ship: Magus
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Warfare Specialist"), "commandBonus", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")

View File

@@ -1,8 +0,0 @@
# eliteBonusElectronicAttackShipEnergyNeutRange1
#
# Used by:
# Ship: Sentinel
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer",
"energyDestabilizationRange", ship.getModifiedItemAttr("eliteBonusElectronicAttackShip1"), skill="Electronic Attack Ships")

View File

@@ -1,8 +0,0 @@
# eliteBonusElectronicAttackShipEnergyVampireRange1
#
# Used by:
# Ship: Sentinel
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire",
"powerTransferRange", ship.getModifiedItemAttr("eliteBonusElectronicAttackShip1"), skill="Electronic Attack Ships")

View File

@@ -0,0 +1,7 @@
# eliteBonusLogiFrigArmorHP2
#
# Used by:
# Ship: Deacon
type = "passive"
def handler(fit, src, context):
fit.ship.boostItemAttr("armorHP", src.getModifiedItemAttr("eliteBonusLogiFrig2"), skill="Logistics Frigates")

View File

@@ -0,0 +1,9 @@
# eliteBonusLogiFrigArmorRepSpeedCap1
#
# Used by:
# Ship: Deacon
# Ship: Thalia
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "capacitorNeed", src.getModifiedItemAttr("eliteBonusLogiFrig1"), skill="Logistics Frigates")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "duration", src.getModifiedItemAttr("eliteBonusLogiFrig1"), skill="Logistics Frigates")

View File

@@ -0,0 +1,7 @@
# eliteBonusLogiFrigShieldHP2
#
# Used by:
# Ship: Kirin
type = "passive"
def handler(fit, src, context):
fit.ship.boostItemAttr("shieldCapacity", src.getModifiedItemAttr("eliteBonusLogiFrig2"), skill="Logistics Frigates")

View File

@@ -0,0 +1,9 @@
# eliteBonusLogiFrigShieldRepSpeedCap1
#
# Used by:
# Ship: Kirin
# Ship: Scalpel
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"), "duration", src.getModifiedItemAttr("eliteBonusLogiFrig1"), skill="Logistics Frigates")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"), "capacitorNeed", src.getModifiedItemAttr("eliteBonusLogiFrig1"), skill="Logistics Frigates")

View File

@@ -0,0 +1,8 @@
# eliteBonusLogiFrigSignature2
#
# Used by:
# Ship: Scalpel
# Ship: Thalia
type = "passive"
def handler(fit, src, context):
fit.ship.boostItemAttr("signatureRadius", src.getModifiedItemAttr("eliteBonusLogiFrig2"), skill="Logistics Frigates")

View File

@@ -5,4 +5,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Capacitor Transmitter",
"capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics")
"capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics Cruisers")

View File

@@ -6,4 +6,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Capacitor Transmitter",
"capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics")
"capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics Cruisers")

View File

@@ -5,4 +5,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Armor Repairer",
"capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics")
"capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics Cruisers")

View File

@@ -5,4 +5,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Armor Repairer",
"capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics")
"capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics Cruisers")

View File

@@ -6,4 +6,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Shield Booster",
"capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics")
"capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics Cruisers")

View File

@@ -5,4 +5,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Shield Booster",
"capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics")
"capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics Cruisers")

View File

@@ -5,4 +5,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Tracking Computer",
"falloffBonus", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics")
"falloffBonus", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics Cruisers")

View File

@@ -5,4 +5,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Tracking Computer",
"falloffBonus", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics")
"falloffBonus", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics Cruisers")

View File

@@ -5,4 +5,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Tracking Computer",
"maxRangeBonus", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics")
"maxRangeBonus", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics Cruisers")

View File

@@ -5,4 +5,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Tracking Computer",
"maxRangeBonus", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics")
"maxRangeBonus", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics Cruisers")

View File

@@ -5,4 +5,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Tracking Computer",
"trackingSpeedBonus", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics")
"trackingSpeedBonus", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics Cruisers")

View File

@@ -5,4 +5,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Tracking Computer",
"trackingSpeedBonus", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics")
"trackingSpeedBonus", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics Cruisers")

View File

@@ -5,5 +5,5 @@
# Ship: Pilgrim
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire",
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu",
"powerTransferAmount", ship.getModifiedItemAttr("eliteBonusReconShip2"), skill="Recon Ships")

View File

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

View File

@@ -1,8 +0,0 @@
# eliteReconBonusEnergyNeutRange1
#
# Used by:
# Ship: Curse
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer",
"energyDestabilizationRange", ship.getModifiedItemAttr("eliteBonusReconShip1"), skill="Recon Ships")

View File

@@ -1,8 +0,0 @@
# eliteReconBonusNeutRange3
#
# Used by:
# Ship: Pilgrim
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer",
"energyDestabilizationRange", ship.getModifiedItemAttr("eliteBonusReconShip3"), skill="Recon Ships")

View File

@@ -1,8 +0,0 @@
# eliteReconBonusVampRange3
#
# Used by:
# Ship: Pilgrim
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire",
"powerTransferRange", ship.getModifiedItemAttr("eliteBonusReconShip3"), skill="Recon Ships")

View File

@@ -1,8 +0,0 @@
# eliteReconEnergyVampireRangeBonus1
#
# Used by:
# Ship: Curse
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire",
"powerTransferRange", ship.getModifiedItemAttr("eliteBonusReconShip1"), skill="Recon Ships")

View File

@@ -1,8 +1,7 @@
# energyDestabilizationNew
#
# Used by:
# Drones from group: Cap Drain Drone (3 of 3)
# Modules from group: Energy Destabilizer (41 of 41)
# Drones from group: Energy Neutralizer Drone (3 of 3)
from eos.types import State
type = "active", "projected"
def handler(fit, container, context):

View File

@@ -0,0 +1,13 @@
# energyNeutralizerFalloff
#
# Used by:
# Modules from group: Energy Neutralizer (45 of 45)
from eos.types import State
type = "active", "projected"
def handler(fit, container, context):
if "projected" in context and ((hasattr(container, "state") \
and container.state >= State.ACTIVE) or hasattr(container, "amountActive")):
multiplier = container.amountActive if hasattr(container, "amountActive") else 1
amount = container.getModifiedItemAttr("energyDestabilizationAmount")
time = container.getModifiedItemAttr("duration")
fit.addDrain(time, amount * multiplier, 0)

View File

@@ -1,7 +1,7 @@
# leech
# energyNosferatuFalloff
#
# Used by:
# Modules from group: Energy Vampire (52 of 52)
# Modules from group: Energy Nosferatu (45 of 45)
type = "active", "projected"
runTime = "late"
def handler(fit, module, context):
@@ -10,4 +10,4 @@ def handler(fit, module, context):
if "projected" in context:
fit.addDrain(time, amount, 0)
elif "module" in context:
module.itemModifiedAttributes.force("capacitorNeed", -amount)
module.itemModifiedAttributes.force("capacitorNeed", -amount)

View File

@@ -6,4 +6,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Capacitor Transmitter",
"powerTransferRange", ship.getModifiedItemAttr("maxRangeBonus"))
"powerTransferRange", ship.getModifiedItemAttr("maxRangeBonus2"))

View File

@@ -1,7 +1,7 @@
# entosisCPUAddition
#
# Used by:
# Modules from group: Entosis Link (2 of 2)
# Modules from group: Entosis Link (6 of 6)
type = "passive"
def handler(fit, module, context):
module.increaseItemAttr("cpu", module.getModifiedItemAttr("entosisCPUAdd"))

View File

@@ -1,7 +1,7 @@
# entosisLink
#
# Used by:
# Modules from group: Entosis Link (2 of 2)
# Modules from group: Entosis Link (6 of 6)
type = "active"
def handler(fit, module, context):
fit.ship.forceItemAttr("disallowAssistance", module.getModifiedItemAttr("disallowAssistance"))

View File

@@ -4,5 +4,5 @@
# Implants named like: grade Centurion (10 of 12)
type = "passive"
def handler(fit, implant, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Disruptor",
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Weapon Disruptor",
"maxRange", implant.getModifiedItemAttr("rangeSkillBonus"))

View File

@@ -0,0 +1,16 @@
# ewSkillGuidanceDisruptionBonus
#
# Used by:
# Modules named like: Tracking Diagnostic Subroutines (8 of 8)
# Skill: Weapon Destabilization
type = "passive"
def handler(fit, src, context):
level = src.level if "skill" in context else 1
for attr in (
"explosionDelayBonus",
"aoeVelocityBonus",
"aoeCloudSizeBonus",
"missileVelocityBonus"
):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"),
attr, src.getModifiedItemAttr("scanSkillEwStrengthBonus") * level)

View File

@@ -4,5 +4,5 @@
# Skill: Frequency Modulation
type = "passive"
def handler(fit, skill, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Disruptor",
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Weapon Disruptor",
"falloff", skill.getModifiedItemAttr("falloffBonus") * skill.level)

View File

@@ -6,6 +6,6 @@
type = "passive"
def handler(fit, container, context):
level = container.level if "skill" in context else 1
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Disruptor",
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Weapon Disruptor",
"maxRange", container.getModifiedItemAttr("rangeSkillBonus") * level,
stackingPenalties = "skill" not in context)

View File

@@ -2,7 +2,7 @@
#
# Used by:
# Modules named like: Tracking Diagnostic Subroutines (8 of 8)
# Skill: Turret Destabilization
# Skill: Weapon Destabilization
type = "passive"
def handler(fit, container, context):
level = container.level if "skill" in context else 1

View File

@@ -2,9 +2,9 @@
#
# Used by:
# Modules named like: Tracking Diagnostic Subroutines (8 of 8)
# Skill: Turret Destabilization
# Skill: Weapon Destabilization
type = "passive"
def handler(fit, container, context):
level = container.level if "skill" in context else 1
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Disruptor",
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Weapon Disruptor",
"trackingSpeedBonus", container.getModifiedItemAttr("scanSkillEwStrengthBonus") * level)

View File

@@ -0,0 +1,7 @@
# expeditionFrigateBonusIceHarvestingCycleTime2
#
# Used by:
# Ship: Endurance
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Ice Harvesting"), "duration", src.getModifiedItemAttr("eliteBonusExpedition2"), skill="Expedition Frigates")

View File

@@ -0,0 +1,10 @@
# expeditionFrigateShieldResistance1
#
# Used by:
# Ship: Endurance
type = "passive"
def handler(fit, src, context):
fit.ship.boostItemAttr("shieldThermalDamageResonance", src.getModifiedItemAttr("eliteBonusExpedition1"), skill="Expedition Frigates")
fit.ship.boostItemAttr("shieldKineticDamageResonance", src.getModifiedItemAttr("eliteBonusExpedition1"), skill="Expedition Frigates")
fit.ship.boostItemAttr("shieldExplosiveDamageResonance", src.getModifiedItemAttr("eliteBonusExpedition1"), skill="Expedition Frigates")
fit.ship.boostItemAttr("shieldEmDamageResonance", src.getModifiedItemAttr("eliteBonusExpedition1"), skill="Expedition Frigates")

View File

@@ -4,6 +4,8 @@
# Variations of module: Skirmish Warfare Link - Rapid Deployment I (2 of 2)
type = "gang", "active"
gangBoost = "speedFactor"
runTime = "late"
def handler(fit, module, context):
if "gang" not in context: return
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Propulsion Module",

View File

@@ -4,6 +4,8 @@
# Variations of module: Armored Warfare Link - Passive Defense I (2 of 2)
type = "gang", "active"
gangBoost = "armorResistance"
runTime = "late"
def handler(fit, module, context):
if "gang" not in context: return
for damageType in ("Em", "Thermal", "Explosive", "Kinetic"):

View File

@@ -4,6 +4,8 @@
# Variations of module: Armored Warfare Link - Damage Control I (2 of 2)
type = "gang", "active"
gangBoost = "armorRepairCapacitorNeed"
runTime = "late"
def handler(fit, module, context):
if "gang" not in context: return
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Repair Systems") or mod.item.requiresSkill("Remote Armor Repair Systems"),

View File

@@ -4,6 +4,8 @@
# Variations of module: Armored Warfare Link - Rapid Repair I (2 of 2)
type = "gang", "active"
gangBoost = "armorRepairDuration"
runTime = "late"
def handler(fit, module, context):
if "gang" not in context: return
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Repair Systems") or mod.item.requiresSkill("Remote Armor Repair Systems"),

View File

@@ -4,6 +4,8 @@
# Variations of module: Skirmish Warfare Link - Evasive Maneuvers I (2 of 2)
type = "gang", "active"
gangBoost = "signatureRadius"
runTime = "late"
def handler(fit, module, context):
if "gang" not in context: return
fit.ship.boostItemAttr("signatureRadius", module.getModifiedItemAttr("commandBonus"),

View File

@@ -4,9 +4,11 @@
# Variations of module: Information Warfare Link - Recon Operation I (2 of 2)
type = "gang", "active"
gangBoost = "electronicMaxRange"
runTime = "late"
def handler(fit, module, context):
if "gang" not in context: return
groups = ("Target Painter", "Tracking Disruptor", "Remote Sensor Damper", "ECM", "ECM Burst")
groups = ("Target Painter", "Weapon Disruptor", "Remote Sensor Damper", "ECM", "ECM Burst")
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
"maxRange", module.getModifiedItemAttr("commandBonus"),
stackingPenalties = True)

View File

@@ -1,8 +1,9 @@
# gangInformationWarfareSuperiorityAll
# gangInformationWarfareSuperiorityAll2
#
# Used by:
# Variations of module: Information Warfare Link - Electronic Superiority I (2 of 2)
type = "active"
def handler(fit, module, context):
module.multiplyItemAttr("commandBonusTD", module.getModifiedItemAttr("commandBonusHidden"))
module.multiplyItemAttr("commandBonusECM", module.getModifiedItemAttr("commandBonusHidden"))

View File

@@ -4,9 +4,11 @@
# Variations of module: Skirmish Warfare Link - Interdiction Maneuvers I (2 of 2)
type = "gang", "active"
gangBoost = "interdictionMaxRange"
runTime = "late"
def handler(fit, module, context):
if "gang" not in context: return
groups = ("Stasis Web","Warp Scrambler")
groups = ("Stasis Web", "Warp Scrambler")
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
"maxRange", module.getModifiedItemAttr("commandBonus"),
stackingPenalties = True)

View File

@@ -5,6 +5,8 @@
type = "gang", "active"
gangBoost = "maxTargetRange"
gangBonus = "commandBonus"
runTime = "late"
def handler(fit, module, context):
if "gang" not in context: return
fit.ship.boostItemAttr("maxTargetRange", module.getModifiedItemAttr("commandBonus"),

View File

@@ -4,6 +4,8 @@
# Variations of module: Siege Warfare Link - Shield Efficiency I (2 of 2)
type = "gang", "active"
gangBoost = "shieldRepairCapacitorNeed"
runTime = "late"
def handler(fit, module, context):
if "gang" not in context: return
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Operation") or mod.item.requiresSkill("Shield Emission Systems"),

View File

@@ -4,6 +4,8 @@
# Variations of module: Siege Warfare Link - Active Shielding I (2 of 2)
type = "gang", "active"
gangBoost = "shieldRepairDuration"
runTime = "late"
def handler(fit, module, context):
if "gang" not in context: return
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Operation") or mod.item.requiresSkill("Shield Emission Systems"),

View File

@@ -4,6 +4,8 @@
# Variations of module: Siege Warfare Link - Shield Harmonizing I (2 of 2)
type = "gang", "active"
gangBoost = "shieldResistance"
runTime = "late"
def handler(fit, module, context):
if "gang" not in context: return
for damageType in ("Em", "Explosive", "Thermal", "Kinetic"):

View File

@@ -1,7 +1,8 @@
# GCHYieldMultiplyPassive
#
# Used by:
# Variations of ship: Venture (2 of 2)
# Ship: Prospect
# Ship: Venture
type = "passive"
def handler(fit, module, context):
fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Gas Cloud Harvester",

View File

@@ -2,6 +2,7 @@
#
# Used by:
# Modules from group: Tracking Enhancer (17 of 17)
# Module: QA Damage Module
type = "passive"
def handler(fit, module, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),

View File

@@ -2,6 +2,7 @@
#
# Used by:
# Modules from group: Tracking Enhancer (17 of 17)
# Module: QA Damage Module
type = "passive"
def handler(fit, module, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),

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