Compare commits

...

233 Commits

Author SHA1 Message Date
blitzmann
02736ac92d Bump version 2016-07-01 22:07:56 -04:00
blitzmann
2df01c7157 Merge branch 'singularity' 2016-07-01 22:04:25 -04:00
blitzmann
01a0745b9b Update database and fix some icon related bugs 2016-07-01 22:03:51 -04:00
blitzmann
c7573ad4c3 Update icons / fix script 2016-07-01 00:44:17 -04:00
blitzmann
06f402bb9d Add sde icon script 2016-06-28 23:34:39 -04:00
blitzmann
b9f0812b38 Fix issue with entity editor and wxPython 2.8 2016-06-28 23:24:01 -04:00
blitzmann
cdca8fe236 New effects 2016-06-28 22:00:18 -04:00
blitzmann
c8175d1191 Only compare attributes with display names (ones that don't have display names are normally internal attributes) 2016-06-23 23:19:08 -04:00
blitzmann
7a7a0f1eff Merge branch 'feature/item-compare' into singularity 2016-06-23 22:57:09 -04:00
blitzmann
5176fe0366 Sort by meta level 2016-06-23 22:56:40 -04:00
blitzmann
b4bd6e7acd Ensure we have an active fit when exporting to crest 2016-06-23 22:44:24 -04:00
blitzmann
bd4dbf45af Beautify pyfa's CREST login message 2016-06-23 22:16:08 -04:00
blitzmann
d9fc3d436b Allow EHP toggle to persist between fits (#641) 2016-06-19 23:50:42 -04:00
blitzmann
67143cbc0e Fix for siege stacking penalty (#653) 2016-06-19 23:18:59 -04:00
blitzmann
ed3b2eb1bf Fix energy warfare 2016-06-19 23:04:52 -04:00
blitzmann
7a5e4291a5 Handle renamed groups 2016-06-19 12:40:49 -04:00
blitzmann
d1c6810e1e Update to SISI 1050133 2016-06-19 12:39:09 -04:00
blitzmann
faa9c0a2b9 Fix my merge fail 2016-06-18 23:29:53 -04:00
Ryan Holmes
0456973093 Merge pull request #639 from Ebag333/default-database-profiles
Default database profiles
2016-06-18 23:25:07 -04:00
blitzmann
4a79a4e4d9 Merge remote-tracking branch 'origin/master'
Conflicts:
	gui/mainMenuBar.py
2016-06-18 23:14:23 -04:00
blitzmann
ac46d33a60 Fix CREST export (#655) 2016-06-18 23:10:01 -04:00
Ebag333
0f958bef81 Removed _init_ definition as it's redundant 2016-06-16 19:08:29 -07:00
Ebag333
b79009517e Updated po-ta-toe to po-tah-toh 2016-06-16 14:46:22 -07:00
Ebag333
12ccc96f46 Updated as per Blitzmanns feedback
https://github.com/pyfa-org/Pyfa/pull/639#issuecomment-225749245
2016-06-15 23:42:38 -07:00
Ebag333
47828c38d2 Merged differences from master (more catching up) 2016-06-15 19:40:45 -07:00
blitzmann
afdae6a3d6 Added first iteration of item comparisons. 2016-06-15 22:26:48 -04:00
Ebag333
03d1d8f5a4 Merged changes from pyfa-org/master into branch
Merged changes to see if we can clear up the merge conflict warning
2016-06-15 18:24:40 -07:00
Ryan Holmes
cc4e4c0f13 Merge pull request #649 from Ebag333/ECM-Misc-Column-Improvements
Updated ECM to be more descriptive
2016-06-13 21:21:29 -04:00
Ebag333
2f6f14fef2 Update misc.py 2016-06-13 18:14:41 -07:00
Ryan Holmes
fb590ddfdd Merge pull request #644 from Ebag333/Item-Attributes--Show-Base-Value
Added base column to item window
2016-06-13 20:44:15 -04:00
Ryan Holmes
a5e674cdc4 Merge pull request #650 from Ebag333/Group-Attribute-Overrides-Menu
Grouped Attributes override
2016-06-13 20:37:56 -04:00
blitzmann
e28883dd47 Merge branch 'default-database-profiles' of git://github.com/Ebag333/Pyfa 2016-06-13 20:01:35 -04:00
Ebag333
b4694dcf03 Implemented menu option to import default database values
Allows for existing databases to be updated with the current default
profiles.  Can also be used to inject other defaults (maybe 0 and V
chars?)
2016-06-13 14:13:38 -07:00
Ebag333
4c05d9a687 Grouped Attributes override
Users are confused because they find the menu to edit attribute
overrides, change values, then do not see their values reflected.  There
is an option that needs to be enabled under the edit menu to show the
users overrides.

Moved this option from the edit menu to the window menu (next to the
existing attributes override editor), and grouped them together.
Functionality is not changed, merely placement of the overrides toggle.
2016-06-13 13:54:15 -07:00
Ebag333
53da2f9bb2 Many updates
Redid all the values, especially updated target resist profiles.
Re-implemented the _init_ on service\damagePattern.py to check for
default values.
2016-06-13 13:49:56 -07:00
Ebag333
ea106b6064 Updated to round values that are floats to int
Only ints are handled currently, if you throw a float at it, you'll get
a stacktrace.  This is just a little safety to convert it to an int, so
if we somehow get a float (like via database injection/modification), we
quietly convert it to the expected format
2016-06-12 17:24:49 -07:00
Ebag333
32f671b4f2 No longer show "base" column when looking at a market item
Since they are identical.
2016-06-12 17:07:37 -07:00
Ebag333
25e298ff69 Updated ECM to be more descriptive
Gave it the RAH treatment. Now shows min/max values if it's a racial,
and only one for multispectral.  Tooltip shows all four broken out.
2016-06-12 16:46:18 -07:00
Ebag333
45006fe043 reverted back to original 2016-06-12 12:30:29 -07:00
blitzmann
3e1c561752 Implement reload time in fighter dps logic (#627) 2016-06-12 14:15:25 -04:00
blitzmann
be4b78ee1c Module replacement when dropping market module onto fitting view (#528) 2016-06-12 12:38:25 -04:00
Ryan Holmes
5a2989cae4 Update README
Yes, I originally copied it from Osmium, because :effort:
2016-06-12 03:22:21 -04:00
Ryan Holmes
15519fd783 Update misc.py 2016-06-12 02:18:18 -04:00
Ryan Holmes
a357a5b845 Merge pull request #643 from Ebag333/SeBo-Misc-Column-Improvements
Added sensor strength to handle scripting the SeBo
2016-06-12 02:16:13 -04:00
Ryan Holmes
806b8f135b Merge pull request #634 from Ebag333/master
RAH follows damage profile
2016-06-12 02:13:03 -04:00
Ebag333
f2b636bd44 Rewrote function 2016-06-11 00:50:40 -07:00
Ebag333
0d25eca6e5 Added base column 2016-06-10 21:10:04 -07:00
Ebag333
e5dcac43dc Added sensor strength to handle scripting the SeBo 2016-06-10 20:36:20 -07:00
Ebag333
8629710223 Add RAH misc column and tooltip 2016-06-10 19:33:13 -07:00
Ebag333
111e2cc0de Loads default database values on DB creation
Loads defaults for target resists and damage profiles....for now.

Can be extended to add anything we want on DB creation.  Can be extended to add a "load default value to database" button somewhere down the line, to support people who have existing databases and don't want to recreate them.
2016-06-06 16:25:20 -07:00
Ebag333
8eb0b942c8 Remove _init_ hack to import the default pattern
Removed the kludgey method of using _init_ to check to see if the Uniform 25/25/25/25 damage pattern exists, and if missing create it.

Moved creation of it to prefetch.py.
2016-06-06 16:22:08 -07:00
Ebag333
4c55827aa4 call function to import defaults to database 2016-06-06 16:18:16 -07:00
Ebag333
0a1be7d966 Update adaptivearmorhardener.py 2016-06-06 16:16:56 -07:00
Ebag333
8f3370307a Merge branch 'master' of https://github.com/Ebag333/Pyfa 2016-06-05 00:13:22 -07:00
Ebag333
dd1545c7e1 Merge remote-tracking branch 'refs/remotes/pyfa-org/master' 2016-06-05 00:13:09 -07:00
Ebag333
8ea9bee810 Update adaptivearmorhardener.py 2016-06-04 23:58:34 -07:00
blitzmann
6141356754 Add Ice Products to search results (#600) 2016-05-30 22:43:31 -04:00
blitzmann
e70ea67fec Proper fix to attribute caps 2016-05-30 12:29:06 -04:00
blitzmann
62be4c5bce Merge branch 'master' of git://github.com/Timmeey/Pyfa into Timmeey-master 2016-05-28 17:01:58 -04:00
blitzmann
394a9540b0 Bump dev 2016-05-28 17:01:52 -04:00
Ryan Holmes
62d22f0e74 Merge pull request #629 from wolfwood/aar-amount-display 2016-05-28 16:57:51 -04:00
wolfwood
1cd7b9a250 correct '(E)HP restored over duration' calculation to reflect removal of AAR multiplier from armorDamageAmount 2016-05-27 20:19:24 -07:00
TimmeeY
7044534765 Added Shiptype to fitting name in minimal html export
On minimalistic HTMLExport, the shiptype (name) will be added infront of
the fitting name to all fits on export
2016-05-26 15:03:34 +02:00
blitzmann
9c3b50d622 Bump stable 2016-05-23 23:23:27 -04:00
blitzmann
fd62c254a4 Update to Citadel 1.14 and update effect headers0 2016-05-23 23:22:44 -04:00
blitzmann
90e54c6334 Fix Minokawa and Apostle remote effects (#623) 2016-05-23 23:05:50 -04:00
blitzmann
f423c67979 Fix remote ancillary bonus effects (#626) 2016-05-23 20:19:30 -04:00
blitzmann
4607dd788c Implement ewar resists (#597) 2016-05-22 15:15:21 -04:00
Ryan Holmes
f9c595473f Merge pull request #621 from blitzmann/context-menu-ids
Context menu ids
2016-05-22 14:43:27 -04:00
blitzmann
de6c843e1c Remove cap from target range (#620) 2016-05-22 14:24:43 -04:00
blitzmann
b45924aa52 Fix cycle time bonuses for Lif and Ninazu (#591) 2016-05-22 13:54:58 -04:00
blitzmann
d04ea5b061 Fix EV drones (#619) 2016-05-22 13:33:25 -04:00
blitzmann
7406210c4a Fix remote AAR 2016-05-22 01:38:40 -04:00
blitzmann
c24986fba3 Add missing effect for ancil shield boosts 2016-05-18 00:01:49 -04:00
blitzmann
30c1c00b9b Bump dev 2016-05-18 00:01:48 -04:00
Ebag333
a089c4cbc2 Merge remote-tracking branch 'refs/remotes/pyfa-org/master' 2016-05-16 07:55:15 -07:00
Ryan Holmes
fd700f73e5 Update README.md 2016-05-15 12:53:37 -04:00
blitzmann
d71b05095d Clean up 2016-05-15 12:43:24 -04:00
blitzmann
d061a13b58 Move ID pool to context menu class rather than individual menu items 2016-05-15 12:18:56 -04:00
blitzmann
5176cc3b06 Testing a new way of generating context menu id's 2016-05-15 02:35:35 -04:00
blitzmann
1e364913cd Bump version 2016-05-14 23:23:04 -04:00
blitzmann
1adc7c77ac Update to Citadel 1.11 2016-05-14 22:54:53 -04:00
blitzmann
51fbcce803 Add middle click to close fit (#608) 2016-05-14 22:47:44 -04:00
blitzmann
80dab63119 Add missing effect for remote ancil reppers 2016-05-14 22:26:07 -04:00
blitzmann
8c769f152b Fix capacitor need bonus for Stasis Grapplers (#615) 2016-05-14 02:00:50 -04:00
blitzmann
3673391f5a Moved DPS calc from fighter to fighter ability, and fixed fighters in the graph to consider target values. 2016-05-14 01:48:22 -04:00
blitzmann
f96a2e72f7 Merge branch 'master' of https://github.com/pyfa-org/Pyfa 2016-05-11 21:35:25 -04:00
blitzmann
19929ef3ba Increment/decrement cargo instead of adding/removing (#610) 2016-05-11 21:29:17 -04:00
blitzmann
e3a3d287bf Strip leading/trailing whitespace from strings when converting data to json (#607) 2016-05-11 21:07:22 -04:00
blitzmann
b2b92b00f3 Update to Citadel 1.10 and fix gang effects (#592) 2016-05-11 21:04:25 -04:00
Ryan Holmes
6bd2c19b21 Merge pull request #595 from evrial/patch-1
Update README.md
2016-05-10 14:28:21 -04:00
TimmeeY
eb8e5c5135 Added an option for HTML Export, to produce a minimal html version
Added an Opton in the HTMLExport menu to set the HTML export to produce
a minimal HTML version, without any styles or Javscript dependencies.
This can be useful if you are not javascript capable, or if you just
want to copy'n'pase the exported HTML into some web-editor (wordpress).
2016-05-08 23:50:41 +02:00
blitzmann
5a07be40f1 Update to 1037828 (Citadel 1.9) 2016-05-07 20:02:24 -04:00
blitzmann
13a15a38c5 Fix line break in some descriptions (#596) 2016-05-06 20:50:34 -04:00
blitzmann
caa10614d9 Bump dev, and fix flex hardeners (#601) 2016-05-06 20:42:46 -04:00
Alex Grigoryev
0943b4b097 Update README.md
Added Homebrew formula 0ed8244441
2016-05-03 17:43:07 +03:00
blitzmann
8823baaef4 Bump stable 2016-05-02 21:11:29 -04:00
blitzmann
5a5e77414a Remove rigs from prereq checking 2016-05-02 21:10:29 -04:00
blitzmann
f524591327 Fix prereq skill checking for fighters 2016-05-02 20:58:35 -04:00
blitzmann
55ae7c39a4 Fix Shield Harmonizing / Shield Efficiency warfare links 2016-05-02 20:19:47 -04:00
blitzmann
d4e5f8d165 Fix damage profile / target resists editor (#587) 2016-05-02 20:06:53 -04:00
blitzmann
b9dad60b61 Fix icon logic / add some missing icons 2016-05-01 22:21:14 -04:00
blitzmann
57b9b916ed Take care of empty market groups 2016-05-01 19:06:34 -04:00
blitzmann
854476db76 Revert "Fix runtime for all ganglink module effects" (#582)
This reverts commit 373ccbcee5.
2016-05-01 17:50:56 -04:00
blitzmann
941c57b4a8 Fix titan fleet bonii (#577) 2016-05-01 16:45:19 -04:00
blitzmann
fb1c5a760f Fix projected remote cap transfers (#585) 2016-05-01 16:18:27 -04:00
blitzmann
e5367127ea Adds migration path from pre-release database to stable (previously unsupported) (#586) 2016-05-01 14:46:51 -04:00
blitzmann
ffebd3f311 Fix charges for small ancillary shield boosters (#581) 2016-05-01 14:15:44 -04:00
blitzmann
d8fcbd4032 Fix market group sourcing when generating database. 2016-05-01 11:54:39 -04:00
blitzmann
583f416373 Fix FSUs 2016-04-30 23:18:52 -04:00
blitzmann
f605b37a1e Fix OTLs (#579) 2016-04-30 22:48:33 -04:00
Ryan Holmes
a1d64acff4 Merge pull request #578 from lunedis/dda_stacking_fix
Fixing Drone Damage Amplifier fighter stacking issue #576
2016-04-30 22:43:27 -04:00
blitzmann
1fe42f6a79 Bump dev 2016-04-30 22:43:12 -04:00
Kalu
3ce5f69225 Fixing Drone Damage Amplifier fighter stacking issue #576 2016-05-01 03:31:19 +02:00
blitzmann
985107c601 Bump version =D 2016-04-30 19:56:49 -04:00
blitzmann
d416124081 Implemented projected fighters, and various fighter bugfixes / improvements 2016-04-30 19:52:13 -04:00
blitzmann
3a62a6c40d Add fighters to DPS graph 2016-04-30 18:37:00 -04:00
blitzmann
8f6f55b001 Merge branch 'singularity' 2016-04-30 18:23:32 -04:00
blitzmann
6d1ae39bc6 Merge branch 'master' of https://github.com/pyfa-org/Pyfa 2016-04-30 18:21:30 -04:00
Ryan Holmes
850197faa1 Merge pull request #572 from Tandrial/master
Import DNA fittings from ingame urls
2016-04-30 18:16:35 -04:00
blitzmann
1aa206bc82 Merge branch 'master' of https://github.com/pyfa-org/Pyfa 2016-04-30 18:10:06 -04:00
Ryan Holmes
5a9cdb67f9 Merge pull request #568 from mmaucher/fix-for-511
fix separation of moving/non-moving drones
2016-04-30 18:07:58 -04:00
blitzmann
c9810cd019 Fix bug when importing fit 2016-04-30 18:03:03 -04:00
blitzmann
8bf75e38ad Add loaded charges export to CREST (#569) 2016-04-29 23:42:47 -04:00
blitzmann
fe9139ae93 Fix issue with adding multiples of the same skill to character via character import (#563) 2016-04-29 23:32:22 -04:00
blitzmann
87a354a314 Add SerializableUriCharacter to EVEMon import check (#557) 2016-04-29 23:15:30 -04:00
blitzmann
270ac99a1e update effects 2016-04-29 22:59:09 -04:00
blitzmann
dc5d6a4ef8 Add conversion pack 2016-04-29 22:54:44 -04:00
blitzmann
4cdb36de09 update icons 2016-04-29 22:42:15 -04:00
blitzmann
7fce1d00d7 Update to TQ again 2016-04-29 22:37:29 -04:00
blitzmann
26c27153f0 Fix FAUX role bonus 2016-04-29 19:11:13 -04:00
blitzmann
b5420e9c6a Add fighter bomb launcher logic 2016-04-29 19:10:51 -04:00
blitzmann
cfd82a6ad4 Add titan gang bonuses, along with other things 2016-04-29 18:47:53 -04:00
Ryan Holmes
7a352b49a0 Merge pull request #534 from Wozbo/EWAR-fix-532
Fixed ewar on damage graphs,
2016-04-29 09:44:26 -04:00
Michael Krane
8a4f3b7642 Code clean Up 2016-04-28 22:59:47 +02:00
Michael Krane
a09d4139d5 Removes everything before and after the DNA 2016-04-28 19:06:53 +02:00
Michael Krane
a257ac87f7 Allows to import DNA fittings via ingame urls 2016-04-28 18:30:41 +02:00
blitzmann
1669a5434c Removing debugging 2016-04-28 00:42:09 -04:00
blitzmann
2fc83aa61c Update to TQ 2016-04-28 00:38:49 -04:00
blitzmann
ed6f00a893 Added column for fighter abilities, fixed some fighter bugs, added some context menus to them 2016-04-28 00:29:25 -04:00
blitzmann
b15f9766c1 * Show fighter bay resources in fighter pane
* Give fighters a state
* Include some toggled stats on the resources pane
* Add some decent icons for fighter stuff
2016-04-28 00:10:01 -04:00
blitzmann
0ad4f07591 Add drone DPS/Volley to stats pane 2016-04-26 22:18:00 -04:00
blitzmann
4704c5a1b0 Limit fighters to fit's available slots. We hijack the module slot bit to do the dirty work >_> 2016-04-25 23:45:01 -04:00
blitzmann
034a9bc3c3 Publish fighter bombs in jsonToSql.py script 2016-04-25 22:49:52 -04:00
Markus Maucher
e7dc9db75a fix separation of moving/non-moving drones 2016-04-25 12:10:00 +02:00
blitzmann
4a2d1b7997 Fix subsystem slots (#553) 2016-04-22 20:49:16 -04:00
blitzmann
a5e2a32fb8 Merge remote-tracking branch 'origin/master' into singularity 2016-04-22 20:38:33 -04:00
blitzmann
43f69bb184 Only show fighter abilites which have been implemented. 2016-04-21 22:20:53 -04:00
blitzmann
71482c2359 Fix network sensor array effect 2016-04-21 22:14:45 -04:00
blitzmann
84a27a60a5 Fix Seige torp bonus 2016-04-19 21:39:56 -04:00
Ryan Holmes
87f865ce1f Merge pull request #562 from DuLLSoN/master
Added website selection for HTML Export
2016-04-17 23:53:36 -04:00
Ryan Holmes
12c78b41af Merge pull request #560 from aacn500/aacn500-t3c-import
Fix importing T3 cruisers #556
2016-04-17 23:52:36 -04:00
blitzmann
c3db808b7c Update 1030624 2016-04-17 23:42:31 -04:00
blitzmann
af9a9c5698 More fighter work. Basic abilities now work correctly. 2016-04-17 13:28:12 -04:00
Dullson
a7e6d3e969 Feature: Ability to select between different online fitting tools while using HTML Export. 2016-04-17 17:32:51 +03:00
blitzmann
708425c67a Toggle fighter abilities in fighter context menu 2016-04-17 02:16:58 -04:00
blitzmann
021de1af80 Get fighter abilities saved into database 2016-04-17 00:37:52 -04:00
blitzmann
b66e98f697 Fix Leviathan effect 2016-04-17 00:10:16 -04:00
blitzmann
28ad32aad5 Fix Character Editor 2016-04-16 23:55:28 -04:00
aacn500
94dc3117bc Fix importing T3 cruisers #556 2016-04-15 22:14:29 +01:00
blitzmann
803ada4b27 Fix siege, bastion, and triage effects. 2016-04-13 20:05:39 -04:00
blitzmann
e7118f637c Merge branch 'charImplants' into singularity
# Conflicts:
#	eos/db/saveddata/fit.py
#	gui/builtinContextMenus/itemStats.py
2016-04-12 20:16:53 -04:00
blitzmann
e11e368c4b Bump dev version 2016-04-12 20:02:30 -04:00
blitzmann
27a9051822 Update 1027729 2016-04-11 22:53:02 -04:00
blitzmann
54caece5b3 Update to 1027624, commit changes to itemDiff, and remove icon fetching from prep_data (need to use old dump info for now) (as well as other misc stuff) 2016-04-10 23:46:37 -04:00
blitzmann
b1fade5d3b Update bastion, siege, triage effects; add networked sensor array effect 2016-04-10 12:55:43 -04:00
blitzmann
8ed485df0e Group renames 2016-04-06 00:22:19 -04:00
blitzmann
9c33947a45 Update effect headers 2016-04-06 00:12:44 -04:00
blitzmann
33dc06055c Fix some more effects 2016-04-06 00:10:51 -04:00
blitzmann
8ff4a99cf3 Add missing Force Aux effects 2016-04-05 22:57:44 -04:00
blitzmann
d38abec819 Add some missing drone module effects 2016-04-05 22:47:20 -04:00
blitzmann
0ba48aa230 Fix energy effects 2016-04-05 22:27:41 -04:00
blitzmann
acf47ad7a6 Add missing Titan effects 2016-04-05 22:05:02 -04:00
blitzmann
c948c62cac Add missing Dreadnaught effects 2016-04-05 21:55:10 -04:00
blitzmann
eee4dbf66c Add missing Supercarrier effects 2016-04-05 21:46:57 -04:00
blitzmann
653b995774 Update eve.db and add missing carrier effects 2016-04-05 21:36:47 -04:00
blitzmann
a78151c5aa Add skill effects for Fighters 2016-04-04 23:52:09 -04:00
blitzmann
3177713447 Add preliminary (database/gui) fighter support. No effects / calculations. 2016-04-04 23:32:03 -04:00
blitzmann
0769df1e55 Update eve.db 2016-04-04 22:18:02 -04:00
blitzmann
0cfa7cb28f Ensure we get all ship group and ship type restrictions 2016-04-03 16:51:01 -04:00
blitzmann
1e621ee133 Fix issue when module is loaded with invalid item causing crash due to no item being available (incorrect logic) 2016-04-03 02:04:52 -04:00
blitzmann
a203799bd2 Merge branch 'master' into singularity 2016-03-30 18:48:17 -04:00
blitzmann
8fc9724204 Switch over to HTTPS protocol for jQuery CDN (#549). Also fix an issue that caused page to not load in Chrome 2016-03-30 00:25:11 -04:00
blitzmann
0d41cb96ab Merge branch 'refactor-entityEditor' into charImplants 2016-03-30 00:04:44 -04:00
blitzmann
39b2f87194 Add in logic that required an entity for implant sets and target resists (not needed for character or damage profiles as we have read-only defaults) 2016-03-30 00:03:48 -04:00
blitzmann
1161037092 Migrate implant set editor to new entity editor 2016-03-29 21:51:39 -04:00
blitzmann
a3d9d5cca8 Migrate character editor to use new entity editor. 2016-03-29 21:19:20 -04:00
Ryan Holmes
4b67411ca6 Merge pull request #550 from MarkNBroadhead/master
Update README
2016-03-29 15:24:22 -04:00
Mark N Broadhead
126b807dc7 Add links and make punctuation and stylistic changes
I am making changes here to help the README be consistent in its styling
and gramatically correct. Specifically distro vs distribution and places
where there are no links where they would be useful.

* Add link to GitHub Issues
* Add link to EVE pyfa forum thread
* Rename Installing to Installation
* Change distros to distributions
* Add apostrophe to "projects" where it is posessive
2016-03-29 12:09:22 -06:00
Mark N Broadhead
ca81d2d602 Reword Installing section
* Reword text and include link to latest builds page
* Remove link to Arch repo
2016-03-29 12:04:48 -06:00
Mark N Broadhead
015c195c9f Move Package list closer to installation section and add link
It makes sense for the Linux Distro-specific Packages section to
immediately follow the text about 3rd party repos in the Installing
section

* Move Linux Distro-specific Packages section
* Add link to issue #484 for FreeBSD installation
2016-03-29 11:52:55 -06:00
Mark N Broadhead
5fd170d480 Rename requirements to dependencies 2016-03-29 11:46:08 -06:00
Mark N Broadhead
4b167ba9de Add gitter chat link in contact information section 2016-03-29 11:45:08 -06:00
Mark N Broadhead
38ac41bccb Remove contact info for Kadeshs per blitzmann
Kadeshs is no longer with the projects per a conversation with blitzmann
on 29/3/2016 in gitter. He has requested I remove the contact info.
2016-03-29 11:18:52 -06:00
blitzmann
3315d27d45 Applied entity editor to resist editor.
Fixed issue with checking for same name in validator.
Center dialogs on parents to make it look nicer
2016-03-27 22:12:59 -04:00
blitzmann
c3dcdb0686 Entity = characters, damage profiles... anything with the generic drop down list of entities along with new/rename/etc buttons. This commit starts refactoring how we handle this, hopefully simplifying the process to a series of dialogs rather than trying to manage multiple control in the window. 2016-03-27 21:48:19 -04:00
blitzmann
ca91f6bd92 Remove debugging print 2016-03-22 23:21:39 -04:00
blitzmann
65483309ab Clear character implants during recalculation 2016-03-22 23:17:05 -04:00
blitzmann
71d33f3429 Fit implant effects (now applies to whichever implant source is selected) 2016-03-22 23:16:31 -04:00
blitzmann
9b1c543eb7 Support multi-select 2016-03-21 23:56:00 -04:00
blitzmann
24bb0ff39a Fix issue in which implant editor did not spawn if no implant sets 2016-03-21 23:49:01 -04:00
blitzmann
3ae312db37 Import / export implants sets 2016-03-21 23:43:45 -04:00
blitzmann
94f73241ea Implement implant set application in character implants. 2016-03-20 23:45:42 -04:00
blitzmann
d4632b9059 Add context menu to apply implant set to fit 2016-03-20 22:28:18 -04:00
blitzmann
dd15d52130 Merge pull request #541 from aacn500/missing-charge-skills
Fix "Change charge skills" showing module skills #535
2016-03-20 19:55:16 -04:00
blitzmann
145f252ca6 Add icon for implant set editor 2016-03-20 19:49:53 -04:00
blitzmann
731b54a1f7 Continued work on implant set editor 2016-03-20 18:58:13 -04:00
aacn500
f8d7b68289 Fix "Change charge skills" showing module skills 2016-03-20 22:56:27 +00:00
blitzmann
80e47d5157 Add some functionality to implantSet service, and get editor working correctly with implant editor view 2016-03-20 12:49:29 -04:00
blitzmann
c1653c5f2e Abstract the implant editor to work with different sources 2016-03-20 12:26:37 -04:00
blitzmann
36ad31ab25 Get some initial scaffolding up for implant sets sourced from the resist code. 2016-03-20 02:04:55 -04:00
blitzmann
6f1872fb94 Disable implants for read-only characters 2016-03-19 22:10:09 -04:00
blitzmann
ff56e70b81 Opps, dunno how this happened 2016-03-19 22:09:31 -04:00
blitzmann
201263237f Add migration to update fits tablet for implant source 2016-03-19 21:20:20 -04:00
blitzmann
1ddd37f381 Enable implant searching. 2016-03-19 20:55:29 -04:00
blitzmann
f9d2a78c5e Fix up styling for character implants and fitting window implant view 2016-03-19 19:30:42 -04:00
blitzmann
443c917c6b Get context menus working for character implants 2016-03-19 18:23:34 -04:00
blitzmann
7c787cd13b Recalc fit when changing implant source 2016-03-19 15:42:49 -04:00
blitzmann
dc8aff6b6c Merge branch 'master' into charImplants 2016-03-19 15:33:35 -04:00
blitzmann
397040549f Merge branch 'aacn500-validate-import' 2016-03-18 23:52:11 -04:00
blitzmann
0b858d6e94 Clean up call to checkStates 2016-03-18 23:51:55 -04:00
blitzmann
6c8efcda12 Fix traceback when ship is missing launcher / turret attribute (#539) 2016-03-18 23:31:19 -04:00
blitzmann
3fa0aa9242 Bump dev 2016-03-18 23:30:40 -04:00
aacn500
18775286c0 only check states when first loading a fit from db 2016-03-17 11:56:00 +00:00
aacn500
57433efe80 Check that modules fit on imported fits #512 #522 2016-03-16 20:12:26 +00:00
blitzmann
b5cf835959 Add a toggle between fit-specific implants and character implants. This avoids a lot of the problems of how to mix these two sources of implants. Character implants cannot change stage. 2016-03-13 14:48:43 -04:00
blitzmann
48b45b5f51 Merge branch 'master' into charImplants
# Conflicts:
#	gui/characterEditor.py
2016-03-12 23:20:26 -05:00
cwozniak
7d658c3f3d Fixed ewar on damage graphs, and added a quick formula for module falloff and applied it to Target Painters and Heavy Grapplers. 2016-03-11 16:15:08 -05:00
blitzmann
ca34d7cced Differentiate between character implants and fits 2015-11-10 02:06:44 -05:00
blitzmann
938e2a871d Merge branch 'master' into charImplants
Conflicts:
	gui/characterEditor.py
2015-11-08 21:19:04 -05:00
blitzmann
dc55dbdf36 Polish some events 2015-09-25 14:48:05 -04:00
blitzmann
d0ec17feba Some syntax 2015-09-25 14:13:33 -04:00
blitzmann
5b5fdd97d6 Enable and fix market tree for character implant view 2015-09-25 13:59:37 -04:00
712 changed files with 6070 additions and 1505 deletions

View File

@@ -9,31 +9,42 @@
pyfa, short for **py**thon **f**itting **a**ssistant, allows you to create, experiment with, and save ship fittings without being in game. Open source and written in Python, it is available on any platform where Python 2.x and wxWidgets are available, including Windows, Mac OS X, and Linux.
## Latest Version and Changelogs
The latest version along with release notes can always be found on the projects [Releases](https://github.com/DarkFenX/Pyfa/releases) page. pyfa will notify you if you are running an outdated version.
The latest version along with release notes can always be found on the project's [Releases](https://github.com/DarkFenX/Pyfa/releases) page. pyfa will notify you if you are running an outdated version.
## 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.
## Installation
Windows and OS X users are supplied self-contained builds of pyfa on the [latest releases](https://github.com/pyfa-org/Pyfa/releases/latest) page. An `.exe` installer is also available for Windows builds. Linux users can run pyfa using their distribution's Python interpreter. There is no official self-contained package for Linux, however, there are a number of third-party packages available through distribution-specific repositories.
### Requirements
#### OS X
There are two different distributives for OS X: `-mac` and `-mac-deprecated`.
* `-mac`: based on wxPython 3.0.2.0 and has updated libraries. This is the recommended build.
* `-mac-deprecated`: utilizes older binaries running on wxPython 2.8; because of this, some features are not available (currently CREST support and Attribute Overrides). Additionally, as development happens primarily on wxPython 3.0, a few GUI bugs may pop up as `-mac-deprecated` is not actively tested. However, due to some general issues with wxPython 3.0, especially on some newer OS X versions, `-mac-deprecated` is still offered for those that need it.
There is also a [Homebrew](http://brew.sh) option for installing pyfa on OS X. Please note this is maintained by a third-party and is not tested by pyfa developers. Simply fire up in terminal:
```
$ brew cask install pyfa
```
### Linux Distro-specific Packages
The following is a list of pyfa packages available for certain distributions. 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](https://github.com/pyfa-org/Pyfa/issues/484) for instructions)
### Dependencies
If you wish to help with development or simply need to run pyfa through a Python interpreter, the following software is required:
* 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`)
* `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).
The preferred method of reporting bugs is through the project's [GitHub Issues interface](https://github.com/pyfa-org/Pyfa/issues). Alternatively, posting a report in the [pyfa thread](http://forums.eveonline.com/default.aspx?g=posts&t=247609) 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).
## License
pyfa is licensed under the GNU GPL v3.0, see LICENSE
@@ -46,13 +57,11 @@ pyfa is licensed under the GNU GPL v3.0, see LICENSE
* [EVE Online website](http://www.eveonline.com/)
## Contacts:
* Kadesh Priestess
* GitHub: @DarkFenX
* [TweetFleet Slack](https://www.fuzzwork.co.uk/tweetfleet-slack-invites/): @kadesh
* Sable Blitzmann
* GitHub: @blitzmann
* [TweetFleet Slack](https://www.fuzzwork.co.uk/tweetfleet-slack-invites/): @blitzmann
* [Gitter chat](https://gitter.im/pyfa-org/Pyfa): @ blitzmann
* Email: sable.blitzmann@gmail.com
## CCP Copyright Notice
EVE Online, the EVE logo, EVE and all associated logos and designs are the intellectual property of CCP hf. All artwork, screenshots, characters, vehicles, storylines, world facts or other recognizable features of the intellectual property relating to these trademarks are likewise the intellectual property of CCP hf. EVE Online and the EVE logo are the registered trademarks of CCP hf. All rights are reserved worldwide. All other trademarks are the property of their respective owners. CCP hf. has granted permission to Osmium to use EVE Online and all associated logos and designs for promotional and information purposes on its website but does not endorse, and is not in any way affiliated with, Osmium. CCP is in no way responsible for the content on or functioning of this website, nor can it be liable for any damage arising from the use of this website.
EVE Online, the EVE logo, EVE and all associated logos and designs are the intellectual property of CCP hf. All artwork, screenshots, characters, vehicles, storylines, world facts or other recognizable features of the intellectual property relating to these trademarks are likewise the intellectual property of CCP hf. EVE Online and the EVE logo are the registered trademarks of CCP hf. All rights are reserved worldwide. All other trademarks are the property of their respective owners. CCP hf. has granted permission to pyfa to use EVE Online and all associated logos and designs for promotional and information purposes on its website but does not endorse, and is not in any way affiliated with, pyfa. CCP is in no way responsible for the content on or functioning of this program, nor can it be liable for any damage arising from the use of this program.

View File

@@ -18,10 +18,10 @@ debug = False
saveInRoot = False
# Version data
version = "1.20.1"
version = "1.22.0"
tag = "Stable"
expansionName = "March 2016"
expansionVersion = "1.3"
expansionName = "YC 118.6"
expansionVersion = "1.0"
evemonMinVersion = "4081"
pyfaPath = None

View File

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

View File

@@ -4,6 +4,9 @@ import time
import re
import os
import migrations
import logging
logger = logging.getLogger(__name__)
def getVersion(db):
cursor = db.execute('PRAGMA user_version')
@@ -30,10 +33,9 @@ def update(saveddata_engine):
shutil.copyfile(config.saveDB, toFile)
for version in xrange(dbVersion, appVersion):
func = migrations.updates[version+1]
if func:
print "applying update",version+1
logger.info("Applying database update: %d", version+1)
func(saveddata_engine)
# when all is said and done, set version to current

View File

@@ -0,0 +1,15 @@
"""
Migration 13
- Alters fits table to introduce implant location attribute
"""
import sqlalchemy
def upgrade(saveddata_engine):
# Update fits schema to include implant location attribute
try:
saveddata_engine.execute("SELECT implantLocation FROM fits LIMIT 1")
except sqlalchemy.exc.DatabaseError:
saveddata_engine.execute("ALTER TABLE fits ADD COLUMN implantLocation INTEGER;")
saveddata_engine.execute("UPDATE fits SET implantLocation = 0")

View File

@@ -0,0 +1,19 @@
"""
Migration 14
- This should take care of issue #586.
"""
import sqlalchemy
def upgrade(saveddata_engine):
if saveddata_engine.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='fighters'").scalar() == 'fighters':
# Fighters table exists
try:
saveddata_engine.execute("SELECT active FROM fighters LIMIT 1")
except sqlalchemy.exc.DatabaseError:
# if we don't have the active column, we are on an old pre-release version. Drop the tables and move on
# (they will be recreated)
saveddata_engine.execute("DROP TABLE fighters")
saveddata_engine.execute("DROP TABLE fightersAbilities")

View File

@@ -13,6 +13,8 @@ __all__ = [
"miscData",
"targetResists",
"override",
"crest"
"crest",
"implantSet",
"loadDefaultDatabaseValues"
]

View File

@@ -36,9 +36,23 @@ characters_table = Table("characters", saveddata_meta,
Column("ownerID", ForeignKey("users.ID"), nullable = True))
mapper(Character, characters_table,
properties = {"_Character__owner" : relation(User, backref = "characters"),
"_Character__skills" : relation(Skill, backref="character", cascade = "all,delete-orphan"),
"_Character__implants" : relation(Implant, collection_class = HandledImplantBoosterList, cascade='all,delete-orphan', single_parent=True,
primaryjoin = charImplants_table.c.charID == characters_table.c.ID,
secondaryjoin = charImplants_table.c.implantID == Implant.ID,
secondary = charImplants_table),})
properties = {
"savedName": characters_table.c.name,
"_Character__owner": relation(
User,
backref = "characters"),
"_Character__skills": relation(
Skill,
backref="character",
cascade = "all,delete-orphan"),
"_Character__implants": relation(
Implant,
collection_class = HandledImplantBoosterList,
cascade='all,delete-orphan',
backref='character',
single_parent=True,
primaryjoin = charImplants_table.c.charID == characters_table.c.ID,
secondaryjoin = charImplants_table.c.implantID == Implant.ID,
secondary = charImplants_table),
}
)

View File

@@ -0,0 +1,52 @@
#===============================================================================
# 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, ForeignKey, Boolean
from sqlalchemy.orm import mapper
from eos.db import saveddata_meta
from eos.types import Fighter, Fit
from sqlalchemy.orm import *
from sqlalchemy.sql import and_
from eos.effectHandlerHelpers import *
from eos.types import FighterAbility
fighters_table = Table("fighters", saveddata_meta,
Column("groupID", Integer, primary_key=True),
Column("fitID", Integer, ForeignKey("fits.ID"), nullable = False, index = True),
Column("itemID", Integer, nullable = False),
Column("active", Boolean, nullable=True),
Column("amount", Integer, nullable = False),
Column("projected", Boolean, default = False))
fighter_abilities_table = Table("fightersAbilities", saveddata_meta,
Column("groupID", Integer, ForeignKey("fighters.groupID"), primary_key=True, index = True),
Column("effectID", Integer, nullable = False, primary_key=True),
Column("active", Boolean, default = False))
mapper(Fighter, fighters_table,
properties = {
"owner": relation(Fit),
"_Fighter__abilities": relation(
FighterAbility,
backref="fighter",
cascade='all, delete, delete-orphan'),
})
mapper(FighterAbility, fighter_abilities_table)

View File

@@ -26,9 +26,10 @@ from sqlalchemy.orm.collections import attribute_mapped_collection
from eos.db import saveddata_meta
from eos.db.saveddata.module import modules_table
from eos.db.saveddata.drone import drones_table
from eos.db.saveddata.fighter import fighters_table
from eos.db.saveddata.cargo import cargo_table
from eos.db.saveddata.implant import fitImplants_table
from eos.types import Fit, Module, User, Booster, Drone, Cargo, Implant, Character, DamagePattern, TargetResists
from eos.types import Fit, Module, User, Booster, Drone, Fighter, Cargo, Implant, Character, DamagePattern, TargetResists, ImplantLocation
from eos.effectHandlerHelpers import *
fits_table = Table("fits", saveddata_meta,
@@ -42,6 +43,7 @@ fits_table = Table("fits", saveddata_meta,
Column("booster", Boolean, nullable = False, index = True, default = 0),
Column("targetResistsID", ForeignKey("targetResists.ID"), nullable=True),
Column("modeID", Integer, nullable=True),
Column("implantLocation", Integer, nullable=False, default=ImplantLocation.FIT),
)
projectedFits_table = Table("projectedFits", saveddata_meta,
@@ -117,6 +119,12 @@ mapper(Fit, fits_table,
cascade='all, delete, delete-orphan',
single_parent=True,
primaryjoin=and_(drones_table.c.fitID == fits_table.c.ID, drones_table.c.projected == False)),
"_Fit__fighters": relation(
Fighter,
collection_class=HandledDroneCargoList,
cascade='all, delete, delete-orphan',
single_parent=True,
primaryjoin=and_(fighters_table.c.fitID == fits_table.c.ID, fighters_table.c.projected == False)),
"_Fit__cargo": relation(
Cargo,
collection_class=HandledDroneCargoList,
@@ -129,6 +137,12 @@ mapper(Fit, fits_table,
cascade='all, delete, delete-orphan',
single_parent=True,
primaryjoin=and_(drones_table.c.fitID == fits_table.c.ID, drones_table.c.projected == True)),
"_Fit__projectedFighters": relation(
Fighter,
collection_class=HandledProjectedDroneList,
cascade='all, delete, delete-orphan',
single_parent=True,
primaryjoin=and_(fighters_table.c.fitID == fits_table.c.ID, fighters_table.c.projected == True)),
"_Fit__implants": relation(
Implant,
collection_class=HandledImplantBoosterList,

View File

@@ -36,4 +36,8 @@ charImplants_table = Table("charImplants", saveddata_meta,
Column("charID", ForeignKey("characters.ID"), index = True),
Column("implantID", ForeignKey("implants.ID"), primary_key = True))
implantsSetMap_table = Table("implantSetMap", saveddata_meta,
Column("setID", ForeignKey("implantSets.ID"), index = True),
Column("implantID", ForeignKey("implants.ID"), primary_key = True))
mapper(Implant, implants_table)

View File

@@ -0,0 +1,45 @@
#===============================================================================
# Copyright (C) 2016 Ryan Holmes
#
# 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, ForeignKey, String
from sqlalchemy.orm import relation, mapper
from eos.db import saveddata_meta
from eos.db.saveddata.implant import implantsSetMap_table
from eos.types import Implant, ImplantSet
from eos.effectHandlerHelpers import HandledImplantBoosterList
implant_set_table = Table("implantSets", saveddata_meta,
Column("ID", Integer, primary_key = True),
Column("name", String, nullable = False),
)
mapper(ImplantSet, implant_set_table,
properties = {
"_ImplantSet__implants": relation(
Implant,
collection_class = HandledImplantBoosterList,
cascade='all, delete, delete-orphan',
backref='set',
single_parent=True,
primaryjoin = implantsSetMap_table.c.setID == implant_set_table.c.ID,
secondaryjoin = implantsSetMap_table.c.implantID == Implant.ID,
secondary = implantsSetMap_table),
}
)

View File

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

View File

@@ -20,7 +20,7 @@
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, Override, CrestChar
from eos.types import *
from eos.db.saveddata.fleet import squadmembers_table
from eos.db.saveddata.fit import projectedFits_table
from sqlalchemy.sql import and_
@@ -154,7 +154,7 @@ def getCharacter(lookfor, eager=None):
elif isinstance(lookfor, basestring):
eager = processEager(eager)
with sd_lock:
character = saveddata_session.query(Character).options(*eager).filter(Character.name == lookfor).first()
character = saveddata_session.query(Character).options(*eager).filter(Character.savedName == lookfor).first()
else:
raise TypeError("Need integer or string as argument")
return character
@@ -349,6 +349,12 @@ def getTargetResistsList(eager=None):
patterns = saveddata_session.query(TargetResists).options(*eager).all()
return patterns
def getImplantSetList(eager=None):
eager = processEager(eager)
with sd_lock:
sets = saveddata_session.query(ImplantSet).options(*eager).all()
return sets
@cachedQuery(DamagePattern, 1, "lookfor")
def getDamagePattern(lookfor, eager=None):
if isinstance(lookfor, int):
@@ -385,6 +391,24 @@ def getTargetResists(lookfor, eager=None):
raise TypeError("Need integer or string as argument")
return pattern
@cachedQuery(ImplantSet, 1, "lookfor")
def getImplantSet(lookfor, eager=None):
if isinstance(lookfor, int):
if eager is None:
with sd_lock:
pattern = saveddata_session.query(ImplantSet).get(lookfor)
else:
eager = processEager(eager)
with sd_lock:
pattern = saveddata_session.query(ImplantSet).options(*eager).filter(TargetResists.ID == lookfor).first()
elif isinstance(lookfor, basestring):
eager = processEager(eager)
with sd_lock:
pattern = saveddata_session.query(ImplantSet).options(*eager).filter(TargetResists.name == lookfor).first()
else:
raise TypeError("Improper argument")
return pattern
def searchFits(nameLike, where=None, eager=None):
if not isinstance(nameLike, basestring):
raise TypeError("Need string as argument")

View File

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

View File

@@ -131,14 +131,15 @@ class HandledModuleList(HandledList):
self.remove(mod)
return
# fix for #529, where a module may be in incorrect state after CCP changes mechanics of module
if not mod.isValidState(mod.state):
mod.state = eos.types.State.ONLINE
mod.position = len(self)
HandledList.append(self, mod)
if mod.isInvalid:
self.remove(mod)
return
# fix for #529, where a module may be in incorrect state after CCP changes mechanics of module
if not mod.isValidState(mod.state):
mod.state = eos.types.State.ONLINE
def insert(self, index, mod):
mod.position = index

View File

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

View File

@@ -2,7 +2,7 @@
#
# Used by:
# Modules from group: Missile Launcher Bomb (2 of 2)
# Modules from group: Shield Extender (25 of 25)
# Modules from group: Shield Extender (33 of 33)
type = "passive"
def handler(fit, module, context):
fit.ship.increaseItemAttr("signatureRadius", module.getModifiedItemAttr("signatureRadiusAdd"))

View File

@@ -4,5 +4,5 @@
# Skill: Advanced Drone Interfacing
type = "passive"
def handler(fit, skill, context):
fit.modules.filteredItemIncrease(lambda mod: mod.item.group.name == "Drone Control Unit",
fit.modules.filteredItemIncrease(lambda mod: mod.item.group.name == "Fighter Support Unit",
"maxGroupActive", skill.level)

View File

@@ -1,12 +1,12 @@
# ammoFallofMultiplier
#
# 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: Advanced Artillery Ammo (8 of 8)
# Charges from group: Advanced Autocannon Ammo (8 of 8)
# Charges from group: Advanced Beam Laser Crystal (8 of 8)
# Charges from group: Advanced Blaster Charge (8 of 8)
# Charges from group: Advanced Pulse Laser Crystal (8 of 8)
# Charges from group: Advanced Railgun Charge (8 of 8)
type = "passive"
def handler(fit, module, context):
module.multiplyItemAttr("falloff", module.getModifiedChargeAttr("fallofMultiplier") or 1)

View File

@@ -1,7 +1,7 @@
# ammoInfluenceCapNeed
#
# Used by:
# Items from category: Charge (458 of 851)
# Items from category: Charge (465 of 884)
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 851)
# Items from category: Charge (571 of 884)
type = "passive"
def handler(fit, module, context):
module.multiplyItemAttr("maxRange", module.getModifiedChargeAttr("weaponRangeMultiplier"))

View File

@@ -1,12 +1,12 @@
# ammoTrackingMultiplier
#
# 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: Advanced Artillery Ammo (8 of 8)
# Charges from group: Advanced Autocannon Ammo (8 of 8)
# Charges from group: Advanced Beam Laser Crystal (8 of 8)
# Charges from group: Advanced Blaster Charge (8 of 8)
# Charges from group: Advanced Pulse Laser Crystal (8 of 8)
# Charges from group: Advanced Railgun Charge (8 of 8)
# Charges from group: Projectile Ammo (129 of 129)
type = "passive"
def handler(fit, module, context):

View File

@@ -5,7 +5,7 @@
runTime = "early"
type = "passive"
def handler(fit, implant, context):
fit.implants.filteredItemMultiply(
fit.appliedImplants.filteredItemMultiply(
lambda implant: "signatureRadiusBonus" in implant.itemModifiedAttributes and "implantSetAngel" in implant.itemModifiedAttributes,
"signatureRadiusBonus",
implant.getModifiedItemAttr("implantSetAngel"))

View File

@@ -1,7 +1,7 @@
# armorHPBonusAdd
#
# Used by:
# Modules from group: Armor Reinforcer (41 of 41)
# Modules from group: Armor Reinforcer (48 of 48)
type = "passive"
def handler(fit, module, context):
fit.ship.increaseItemAttr("armorHP", module.getModifiedItemAttr("armorHPBonusAdd"))

View File

@@ -1,7 +1,7 @@
# armorReinforcerMassAdd
#
# Used by:
# Modules from group: Armor Reinforcer (41 of 41)
# Modules from group: Armor Reinforcer (48 of 48)
type = "passive"
def handler(fit, module, context):
fit.ship.increaseItemAttr("mass", module.getModifiedItemAttr("massAddition"))

View File

@@ -1,7 +1,7 @@
# armorRepair
#
# Used by:
# Modules from group: Armor Repair Unit (100 of 100)
# Modules from group: Armor Repair Unit (105 of 105)
runTime = "late"
type = "active"
def handler(fit, module, context):

View File

@@ -5,5 +5,5 @@
runTime = "early"
type = "passive"
def handler(fit, implant, context):
fit.implants.filteredItemMultiply(lambda target: target.item.requiresSkill("Cybernetics"),
fit.appliedImplants.filteredItemMultiply(lambda target: target.item.requiresSkill("Cybernetics"),
"scanGravimetricStrengthPercent", implant.getModifiedItemAttr("implantSetCaldariNavy"))

View File

@@ -5,5 +5,5 @@
runTime = "early"
type = "passive"
def handler(fit, implant, context):
fit.implants.filteredItemMultiply(lambda target: target.item.requiresSkill("Cybernetics"),
fit.appliedImplants.filteredItemMultiply(lambda target: target.item.requiresSkill("Cybernetics"),
"scanGravimetricStrengthModifier", implant.getModifiedItemAttr("implantSetLGCaldariNavy"))

View File

@@ -1,7 +1,7 @@
# capacitorCapacityBonus
#
# Used by:
# Modules from group: Capacitor Battery (22 of 22)
# Modules from group: Capacitor Battery (27 of 27)
type = "passive"
def handler(fit, ship, context):
fit.ship.increaseItemAttr("capacitorCapacity", ship.getModifiedItemAttr("capacitorBonus"))

View File

@@ -4,7 +4,7 @@
# Modules from group: Capacitor Flux Coil (6 of 6)
# Modules from group: Capacitor Power Relay (20 of 20)
# Modules from group: Power Diagnostic System (23 of 23)
# Modules from group: Propulsion Module (114 of 114)
# Modules from group: Propulsion Module (127 of 127)
# Modules from group: Reactor Control Unit (22 of 22)
type = "passive"
def handler(fit, module, context):

View File

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

View File

@@ -8,4 +8,4 @@ def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Armor Repair Systems"),
"maxRange", ship.getModifiedItemAttr("carrierAmarrBonus3"), skill="Amarr Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Capacitor Emission Systems"),
"powerTransferRange", ship.getModifiedItemAttr("carrierAmarrBonus3"), skill="Amarr Carrier")
"maxRange", ship.getModifiedItemAttr("carrierAmarrBonus3"), skill="Amarr Carrier")

View File

@@ -9,4 +9,4 @@ def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"),
"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")
"maxRange", ship.getModifiedItemAttr("carrierCaldariBonus3"), skill="Caldari Carrier")

View File

@@ -5,8 +5,6 @@
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,8 +5,6 @@
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,6 @@
gangBonus = "commandBonusTD"
gangBoost = "ewarStrTD"
type = "active", "gang"
runTime = "late"
def handler(fit, module, context):
if "gang" not in context: return
for bonus in (

View File

@@ -5,8 +5,6 @@
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.requiresSkill("Target Painting"),

View File

@@ -1,7 +1,8 @@
# damageControl
#
# Used by:
# Modules from group: Damage Control (17 of 17)
# Variations of module: Damage Control I (16 of 16)
# Module: Civilian Damage Control
type = "passive"
def handler(fit, module, context):
for layer, attrPrefix in (('shield', 'shield'), ('armor', 'armor'), ('hull', '')):

View File

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

View File

@@ -1,7 +1,7 @@
# drawbackCPUOutput
#
# Used by:
# Modules from group: Rig Drones (64 of 64)
# Modules from group: Rig Drones (58 of 64)
type = "passive"
def handler(fit, module, context):
fit.ship.boostItemAttr("cpuOutput", module.getModifiedItemAttr("drawback"))

View File

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

View File

@@ -1,7 +1,7 @@
# droneDurabilityArmorHPBonus
#
# Used by:
# Modules named like: Drone Durability Enhancer (8 of 8)
# Modules named like: Drone Durability Enhancer (6 of 8)
type = "passive"
def handler(fit, module, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),

View File

@@ -1,8 +1,7 @@
# droneDurabilityHPBonus
#
# Used by:
# Modules named like: Drone Durability Enhancer (8 of 8)
# Skill: Drone Durability
# Modules named like: Drone Durability Enhancer (6 of 8)
type = "passive"
def handler(fit, container, context):
level = container.level if "skill" in context else 1

View File

@@ -1,7 +1,7 @@
# droneDurabilityShieldCapBonus
#
# Used by:
# Modules named like: Drone Durability Enhancer (8 of 8)
# Modules named like: Drone Durability Enhancer (6 of 8)
type = "passive"
def handler(fit, module, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),

View File

@@ -1,8 +1,7 @@
# droneMaxRangeBonus
#
# Used by:
# Modules named like: Drone Scope Chip (8 of 8)
# Skill: Drone Sharpshooting
# Modules named like: Drone Scope Chip (6 of 8)
type = "passive"
def handler(fit, container, context):
level = container.level if "skill" in context else 1

View File

@@ -1,8 +1,7 @@
# droneMaxVelocityBonus
#
# Used by:
# Modules named like: Drone Speed Augmentor (8 of 8)
# Skill: Drone Navigation
# Modules named like: Drone Speed Augmentor (6 of 8)
type = "passive"
def handler(fit, container, context):
level = container.level if "skill" in context else 1

View File

@@ -1,7 +1,7 @@
# eliteBonusCommandDestroyerMJFGspool2
#
# Used by:
# Ships from group: Command Destroyers (4 of 4)
# Ships from group: Command Destroyer (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

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

View File

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

View File

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

View File

@@ -4,6 +4,5 @@
# Ship: Basilisk
# Ship: Etana
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Shield Booster",
"capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics Cruisers")
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"), "capacitorNeed", src.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics Cruisers")

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,12 @@
# energyNeutralizerEntity
#
# Used by:
# Drones from group: Energy Neutralizer Drone (3 of 3)
from eos.types import State
type = "active", "projected"
def handler(fit, container, context):
if "projected" in context and ((hasattr(container, "state") \
and container.state >= State.ACTIVE) or hasattr(container, "amountActive")):
amount = container.getModifiedItemAttr("energyNeutralizerAmount")
time = container.getModifiedItemAttr("duration")
fit.addDrain(time, amount, 0)

View File

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

View File

@@ -1,7 +1,7 @@
# energyNosferatuFalloff
#
# Used by:
# Modules from group: Energy Nosferatu (45 of 45)
# Modules from group: Energy Nosferatu (51 of 51)
type = "active", "projected"
runTime = "late"
def handler(fit, module, context):

View File

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

View File

@@ -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("maxRangeBonus2"))
"maxRange", ship.getModifiedItemAttr("maxRangeBonus2"))

View File

@@ -1,7 +1,7 @@
# energyWeaponDamageMultiply
#
# Used by:
# Modules from group: Heat Sink (18 of 18)
# Modules from group: Heat Sink (17 of 17)
# Modules named like: QA Multiship Module Players (4 of 4)
# Module: QA Damage Module
type = "passive"

View File

@@ -1,7 +1,7 @@
# energyWeaponSpeedMultiply
#
# Used by:
# Modules from group: Heat Sink (18 of 18)
# Modules from group: Heat Sink (17 of 17)
type = "passive"
def handler(fit, module, context):
fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Energy Weapon",

View File

@@ -0,0 +1,7 @@
type = "projected", "active"
def handler(fit, module, context):
if "projected" in context:
# jam formula: 1 - (1- (jammer str/ship str))^(# of jam mods with same str))
strModifier = 1 - module.getModifiedItemAttr("scan{0}StrengthBonus".format(fit.scanType))/fit.scanStrength
fit.ecmProjectedStr *= strModifier

View File

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

View File

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

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 == "Remote ECM Burst",
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Burst Projectors",
"maxRange", implant.getModifiedItemAttr("rangeSkillBonus"))

View File

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

View File

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

View File

@@ -5,5 +5,5 @@
type = "passive"
runTime = "early"
def handler(fit, implant, context):
fit.implants.filteredItemMultiply(lambda target: target.item.requiresSkill("Cybernetics"),
fit.appliedImplants.filteredItemMultiply(lambda target: target.item.requiresSkill("Cybernetics"),
"scanMagnetometricStrengthPercent", implant.getModifiedItemAttr("implantSetFederationNavy"))

View File

@@ -5,5 +5,5 @@
type = "passive"
runTime = "early"
def handler(fit, implant, context):
fit.implants.filteredItemMultiply(lambda target: target.item.requiresSkill("Cybernetics"),
fit.appliedImplants.filteredItemMultiply(lambda target: target.item.requiresSkill("Cybernetics"),
"scanMagnetometricStrengthModifier", implant.getModifiedItemAttr("implantSetLGFederationNavy"))

View File

@@ -0,0 +1,15 @@
# Not used by any item
"""
Since fighter abilities do not have any sort of item entity in the EVE database, we must derive the abilities from the
effects, and thus this effect file contains some custom information useful only to fighters.
"""
# User-friendly name for the ability
displayName = "Turret Attack"
# Attribute prefix that this ability targets
prefix = "fighterAbilityAttackMissile"
type = "active"
def handler(fit, src, context):
pass

View File

@@ -0,0 +1,19 @@
# Not used by any item
"""
Since fighter abilities do not have any sort of item entity in the EVE database, we must derive the abilities from the
effects, and thus this effect file contains some custom information useful only to fighters.
"""
from eos.types import State
# User-friendly name for the ability
displayName = "ECM"
prefix = "fighterAbilityECM"
type = "projected", "active"
def handler(fit, module, context):
if "projected" not in context: return
# jam formula: 1 - (1- (jammer str/ship str))^(# of jam mods with same str))
strModifier = 1 - module.getModifiedItemAttr("{}Strength{}".format(prefix, fit.scanType))/fit.scanStrength
fit.ecmProjectedStr *= strModifier

View File

@@ -0,0 +1,19 @@
# Not used by any item
"""
Since fighter abilities do not have any sort of item entity in the EVE database, we must derive the abilities from the
effects, and thus this effect file contains some custom information useful only to fighters.
"""
from eos.types import State
# User-friendly name for the ability
displayName = "Energy Neutralizer"
prefix = "fighterAbilityEnergyNeutralizer"
type = "active", "projected"
def handler(fit, container, context):
if "projected" in context:
amount = container.getModifiedItemAttr("{}Amount".format(prefix))
time = container.getModifiedItemAttr("{}Duration".format(prefix))
fit.addDrain(time, amount, 0)

View File

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

View File

@@ -0,0 +1,16 @@
# Not used by any item
"""
Since fighter abilities do not have any sort of item entity in the EVE database, we must derive the abilities from the
effects, and thus this effect file contains some custom information useful only to fighters.
"""
# User-friendly name for the ability
displayName = "Microwarpdrive"
# Is ability applied to the fighter squad as a whole, or per fighter?
grouped = True
type = "active"
runTime = "late"
def handler(fit, module, context):
module.boostItemAttr("maxVelocity", module.getModifiedItemAttr("fighterAbilityMicroWarpDriveSpeedBonus"))
module.boostItemAttr("signatureRadius", module.getModifiedItemAttr("fighterAbilityMicroWarpDriveSignatureRadiusBonus"), stackingPenalties = True)

View File

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

View File

@@ -0,0 +1,17 @@
# Not used by any item
"""
Since fighter abilities do not have any sort of item entity in the EVE database, we must derive the abilities from the
effects, and thus this effect file contains some custom information useful only to fighters.
"""
from eos.types import State
# User-friendly name for the ability
displayName = "Stasis Webifier"
prefix = "fighterAbilityStasisWebifier"
type = "active", "projected"
def handler(fit, src, context):
if "projected" not in context: return
fit.ship.boostItemAttr("maxVelocity", src.getModifiedItemAttr("{}SpeedPenalty".format(prefix)))

View File

@@ -0,0 +1,17 @@
# Not used by any item
"""
Since fighter abilities do not have any sort of item entity in the EVE database, we must derive the abilities from the
effects, and thus this effect file contains some custom information useful only to fighters.
"""
from eos.types import State
# User-friendly name for the ability
displayName = "Warp Disruption"
prefix = "fighterAbilityWarpDisruption"
type = "active", "projected"
def handler(fit, src, context):
if "projected" not in context: return
fit.ship.increaseItemAttr("warpScrambleStatus", src.getModifiedItemAttr("{}PointStrength".format(prefix)))

View File

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

View File

@@ -1,7 +1,7 @@
# fueledShieldBoosting
#
# Used by:
# Modules from group: Fueled Shield Booster (4 of 4)
# Modules from group: Ancillary Shield Booster (5 of 5)
runTime = "late"
type = "active"
def handler(fit, module, context):

View File

@@ -4,8 +4,6 @@
# 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,8 +4,6 @@
# 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,8 +4,6 @@
# 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,8 +4,6 @@
# 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,8 +4,6 @@
# 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,8 +4,6 @@
# 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", "Weapon Disruptor", "Sensor Dampener", "ECM", "Burst Jammer")

View File

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

View File

@@ -4,11 +4,9 @@
# 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,8 +5,6 @@
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,8 +4,6 @@
# 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,8 +4,6 @@
# 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,8 +4,6 @@
# 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

@@ -5,5 +5,5 @@
type = "passive"
runTime = "early"
def handler(fit, implant, context):
fit.implants.filteredItemMultiply(lambda target: target.item.requiresSkill("Cybernetics"),
fit.appliedImplants.filteredItemMultiply(lambda target: target.item.requiresSkill("Cybernetics"),
"scanRadarStrengthPercent", implant.getModifiedItemAttr("implantSetImperialNavy"))

View File

@@ -5,5 +5,5 @@
type = "passive"
runTime = "early"
def handler(fit, implant, context):
fit.implants.filteredItemMultiply(lambda target: target.item.requiresSkill("Cybernetics"),
fit.appliedImplants.filteredItemMultiply(lambda target: target.item.requiresSkill("Cybernetics"),
"scanRadarStrengthModifier", implant.getModifiedItemAttr("implantSetLGImperialNavy"))

View File

@@ -5,5 +5,5 @@
runTime = "early"
type = "passive"
def handler(fit, implant, context):
fit.implants.filteredItemMultiply(lambda mod: mod.item.group.name == "Cyberimplant",
fit.appliedImplants.filteredItemMultiply(lambda mod: mod.item.group.name == "Cyberimplant",
"WarpSBonus", implant.getModifiedItemAttr("implantSetWarpSpeed"))

View File

@@ -7,4 +7,4 @@ runTime = "early"
def handler(fit, module, context):
fit.extraAttributes["siege"] = True
fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("speedFactor"))
fit.ship.multiplyItemAttr("mass", module.getModifiedItemAttr("massMultiplier"))
fit.ship.multiplyItemAttr("mass", module.getModifiedItemAttr("siegeMassMultiplier"))

View File

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

View File

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

View File

@@ -2,7 +2,6 @@
#
# Used by:
# Modules named like: Drone Mining Augmentor (8 of 8)
# Skill: Drone Interfacing
# Skill: Mining Drone Operation
type = "passive"
def handler(fit, container, context):

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