Compare commits

...

327 Commits

Author SHA1 Message Date
blitzman
a074199219 Bump stable 2016-09-01 22:20:51 -04:00
blitzman
c1179ddb40 Fix issue with fighter bomber charges causing skill requirement warnings 2016-08-30 23:45:21 -04:00
blitzman
ef06a1ccb1 Merge remote-tracking branch 'origin/master' 2016-08-30 23:16:12 -04:00
Ryan Holmes
e31f3cb46e Update modulebonusomnidirectionaltrackingenhancer.py 2016-08-30 23:14:48 -04:00
Ryan Holmes
9f9cd29a7f Merge pull request #712 from pyfa-org/feature/citadels
Feature/citadels
2016-08-30 09:23:34 -04:00
blitzman
ed24ef2615 Delete projected modules from citadels 2016-08-28 20:22:30 -04:00
blitzman
c5b78c20e5 Do not allow projection to citadels 2016-08-28 20:00:46 -04:00
blitzman
f98f6a120b Bump dev, fix issue with applying fleet boosts 2016-08-28 19:35:55 -04:00
blitzman
6192343add bump stable 2016-08-26 21:55:52 -04:00
blitzman
6728aba0a5 Fix icons 2016-08-26 21:53:47 -04:00
blitzman
64b75303af Quick fix for override window crashing trying to load items that no longer exist (#706) 2016-08-26 21:52:56 -04:00
blitzman
0eef1ee480 Fix for #705 2016-08-26 21:29:12 -04:00
blitzman
fef087ae46 jk 2016-08-26 21:13:03 -04:00
blitzman
0e15adecf2 Bump stable 2016-08-24 22:31:44 -04:00
blitzman
be6addf4d0 update dist (holy shit how long has this not been in master?) 2016-08-24 22:16:05 -04:00
blitzman
052e9b68b5 add missing service slot 2016-08-24 22:01:39 -04:00
blitzman
fd91f56e55 Give citadels their own Upwell logo 2016-08-24 21:46:14 -04:00
Ryan Holmes
a0a35d60ec Merge pull request #700 from PageArkanis/feature/citadels
fixed exception that froze interface
2016-08-24 20:45:01 -04:00
blitzman
639f3d27b4 Fix citadel rig bonuses 2016-08-24 20:41:38 -04:00
blitzman
e3040854d8 Merge remote-tracking branch 'origin/master' 2016-08-24 20:23:22 -04:00
Ryan Holmes
4597fd27da Merge pull request #701 from shagie/master
Update README.md with current brew instructions
2016-08-19 14:36:50 -04:00
shagie
88bceae6b0 Update README.md with current brew instructions
```
Error: No available formula with the name "pyfa" 
==> Searching for similarly named formulae...
Error: No similarly named formulae found.
==> Searching taps...
This formula was found in a tap:
Caskroom/cask/pyfa
To install it, run:
  brew install Caskroom/cask/pyfa
```
2016-08-19 13:00:07 -05:00
PageArkanis
9ace9815b6 fixed exception that froze interface 2016-08-19 15:11:06 +01:00
blitzman
bfda7014db Fix citadels not showing up in ship search 2016-08-14 21:05:30 -04:00
blitzman
5107d383e0 Merge branch 'citadel' 2016-08-14 20:40:32 -04:00
blitzman
32ba3fa516 Fix targeting delay effect running when rig is offline (#696) 2016-08-12 21:08:21 -04:00
blitzman
69723d1bd0 Fix for #695 2016-08-12 21:01:22 -04:00
blitzman
5a5ab846c2 Fix for search 2016-08-12 20:05:22 -04:00
blitzman
d81a51bd8c bump version 2016-07-24 18:29:36 -04:00
blitzman
3ac733a30c Merge branch 'master' into citadel 2016-07-24 01:25:57 -04:00
Ryan Holmes
7a715fc471 Merge pull request #684 from Ebag333/Neuts
Applied size reduction effect to neut/nos
2016-07-24 01:25:15 -04:00
Ryan Holmes
b9b72ebf40 Merge pull request #685 from Ebag333/RAHBug
RAH gets pissy if there is no damage profile
2016-07-18 23:26:00 -04:00
Ebag333
071dfaf656 Removed ship size, as this applies only to NPCs 2016-07-18 06:41:50 -07:00
Ebag333
88384a2fd8 RAH gets pissy if there is no damage profile
If there is no damage profile (likely from one that's deleted, and
somehow the profile doesn't get set back to uniform), then RAH tries to
apply null values.  This skips making the RAH reactive if that scenario
happens.
2016-07-17 14:10:58 -07:00
Ebag333
a2c0049488 Moved neut reduction logic into fit.py 2016-07-17 13:43:52 -07:00
Ebag333
60288204fc switched from using container/module to bag_of_dicks
Also cleaned up some warnings PyCharm was throwing.
2016-07-17 11:24:24 -07:00
Ebag333
7d0f65c1f3 Moved the sig size reduction under projected 2016-07-17 10:52:08 -07:00
Ebag333
a35b9b5d3f Added sig reduction for cap neuts 2016-07-17 10:47:15 -07:00
Ebag333
2a2842100a Applied size reduction effect to neut/nos 2016-07-17 00:01:41 -07:00
blitzmann
faed0ce159 Merge remote-tracking branch 'origin/master' into citadel
Conflicts:
	config.py
2016-07-16 21:45:28 -04:00
blitzmann
23a6849fe3 Bump release 2016-07-07 19:40:21 -04:00
blitzmann
91c6e91023 Fix Cataclysmic Variable effects (#628) 2016-07-07 19:21:41 -04:00
blitzmann
8f64c91677 Update effect headers 2016-07-06 23:52:42 -04:00
blitzmann
842ee3d426 Fix Genolution implant set bonus (#672) 2016-07-06 23:50:31 -04:00
blitzmann
45d338ba3d Add price to item compare (#673) 2016-07-06 22:30:31 -04:00
blitzmann
f141fac3a2 Add fighters to overall fitting price (#674) 2016-07-05 23:34:19 -04:00
blitzmann
7b2a89d66b Add structure rig effects (untested) 2016-07-05 23:26:24 -04:00
blitzmann
4d158d99fd Fix crash related to structure rigs not having meta level, and a traceback that might happen occasionally. 2016-07-05 23:23:55 -04:00
blitzmann
c3983a26c5 Add structure rigs 2016-07-05 00:21:08 -04:00
blitzmann
016854a292 Clean up effects 2016-07-04 23:31:41 -04:00
Ebag333
5d7252cbec fixed referencec 2016-07-04 15:50:00 -07:00
Ebag333
0e0bcf51fc Added Effects Files for Citadel Modules 2016-07-04 14:27:35 -07:00
blitzmann
f396077cd6 Remove stacking penalty from Asklepian implants 2016-07-04 13:52:25 -04:00
blitzmann
1c194b67f3 Restrict projected view after speaking with CCP Larrikin about mechanics 2016-07-04 11:18:47 -04:00
blitzmann
72e77d2264 Fix some wording 2016-07-04 11:05:50 -04:00
blitzmann
10c79ac812 More work on restrictions 2016-07-04 11:01:08 -04:00
blitzmann
fe8c3a4957 Disable fit add on pages based on context (ship vs citadel) 2016-07-04 10:30:04 -04:00
blitzmann
3734be21d6 Fix icons and script and version 2016-07-03 20:48:20 -04:00
blitzmann
8ae6ad879e Add structure skill effects 2016-07-03 20:03:00 -04:00
blitzmann
92b2a35888 Fix omega implant 2016-07-03 17:42:12 -04:00
blitzmann
fb2e6e5c17 Restrict skills being applied to citadels. The effect must be of type "structure" for it to apply. Fix issue with agility 2016-07-03 14:52:00 -04:00
blitzmann
2212311a44 Add effects for Asklepian implant set 2016-07-03 14:25:05 -04:00
blitzmann
ef3791f845 bump dev 2016-07-03 01:11:28 -04:00
blitzmann
6e2878194c Merge branch 'master' into citadel
Conflicts:
	config.py
	service/market.py
2016-07-03 01:10:26 -04:00
blitzmann
e7780485f1 Bump release 2016-07-03 00:41:21 -04:00
blitzmann
7831999563 Update effect headers 2016-07-03 00:40:10 -04:00
blitzmann
7020f4bda9 Fix compare when item doesn't have a meta (#667) 2016-07-03 00:38:22 -04:00
Ryan Holmes
dcd21bd165 Merge pull request #669 from Ebag333/VehementDPSEffectsFile
Fixed type of weapon
2016-07-03 00:26:58 -04:00
Ebag333
4a70028762 Fixed type of weapon
Used to be applied to Naglfar, but everyone knows that Vehement is the
new Naglfar, and never use projectiles after memorial day (only
hybrids).
2016-07-02 01:02:03 -07:00
blitzmann
9255a9e638 bump dev 2016-07-01 23:38:06 -04:00
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
blitzmann
655d658a52 Remove prints 2016-05-16 23:56:46 -04:00
Ebag333
a089c4cbc2 Merge remote-tracking branch 'refs/remotes/pyfa-org/master' 2016-05-16 07:55:15 -07:00
blitzmann
62fd545d24 Restrict citadels to only use citadel modules. Rename Ships tab to Fittings as it no longer just carries ships :(. Fix crash on item stats. 2016-05-15 23:18:39 -04:00
blitzmann
4041ecddc4 Create Citadel class that inherits from Ship. Add Service slots 2016-05-15 22:23:23 -04:00
blitzmann
10f51b41b7 Fix context menu with structure modules (no meta information), add citadel icons. 2016-05-15 19:16:51 -04:00
blitzmann
7cf0a35a7a Add citadel fittings to market browser, and get rid of some initial errors 2016-05-15 18:58:47 -04:00
blitzmann
523f7793b5 Add Citadel to ship root 2016-05-15 18:42:01 -04:00
blitzmann
9891aecf19 Bump dev 2016-05-15 18:40:54 -04: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
c42748a5dd Fix #537 - cap battery causing remote cap transfers to apply incorrect values.
Bump to stable 1.20.1
2016-03-15 22:46:51 -04: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
91980c9f2c Bump release 2016-03-11 00:20:26 -05:00
blitzmann
db1c80c7e3 Update effect headers 2016-03-11 00:18:33 -05:00
blitzmann
e53bd70c2c Merge pull request #497 from SpeedProg/master
Added commandline arguments to specify window title and path for savefiles
2016-03-10 23:58:56 -05:00
blitzmann
fe64e2e24c Fix module states when loading from database with an incorrect state (see #529) 2016-03-10 23:55:12 -05:00
blitzmann
a020ca9a71 Fix tracking / guidance disrupters 2016-03-10 23:43:24 -05:00
blitzmann
7a9fde822c Add some missing icons to the database and image store 2016-03-10 23:28:56 -05:00
blitzmann
152af02336 Fix effects involving XL missiles 2016-03-10 20:37:09 -05:00
blitzmann
be7d3a921a Update database to TQ 1017528 2016-03-10 20:17:26 -05:00
blitzmann
78acb205d3 Merge branch 'singularity' 2016-03-10 20:16:57 -05:00
blitzmann
627dac692c Modify applied cap drain based on ship's cap resistance 2016-03-08 18:23:35 -05:00
blitzmann
68a6a828d8 Revert "Disable setting new database version and bump pre-release"
This reverts commit d36bf41ecf.
2016-03-08 16:55:03 -05:00
blitzmann
e8604788df Replace locale formating with regular string formatting due to issues with setting locale. 2016-03-06 11:48:01 -05:00
Constantin Wenger
cf60bbc904 Merge remote-tracking branch 'upstream/master'
updated from upstream
2016-02-11 06:53:01 +01:00
Constantin Wenger
02d4ac81dd renamed parameter savepath to customSavePath for better distinguishability to savePath 2016-02-05 13:10:18 +01:00
Constantin Wenger
f0775af439 added command line option to specify the savepath 2016-01-12 21:28:15 +01:00
Constantin Wenger
96048b5133 added command line option to set the window title 2016-01-12 21:28:15 +01: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
863 changed files with 13431 additions and 1767 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 install Caskroom/cask/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.19.2"
tag = "git"
expansionName = "Singularity"
expansionVersion = "1015913"
version = "1.23.1"
tag = "Stable"
expansionName = "YC 118.7"
expansionVersion = "1.4"
evemonMinVersion = "4081"
pyfaPath = None
@@ -60,7 +60,7 @@ def __createDirs(path):
if not os.path.exists(path):
os.makedirs(path)
def defPaths():
def defPaths(customSavePath):
global debug
global pyfaPath
global savePath
@@ -87,8 +87,11 @@ def defPaths():
else:
savePath = getattr(configforced, "savePath", None)
if savePath is None:
savePath = unicode(os.path.expanduser(os.path.join("~", ".pyfa")),
if customSavePath is None: # customSavePath is not overriden
savePath = unicode(os.path.expanduser(os.path.join("~", ".pyfa")),
sys.getfilesystemencoding())
else:
savePath = customSavePath
__createDirs(savePath)

View File

@@ -194,7 +194,10 @@ 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))
if where is not None:
items = items.filter(and_(Item.name.like(token_safe, escape="\\"), where))
else:
items = items.filter(Item.name.like(token_safe, escape="\\"))
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,11 +33,10 @@ 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
# saveddata_engine.execute("PRAGMA user_version = {}".format(appVersion))
saveddata_engine.execute("PRAGMA user_version = {}".format(appVersion))

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

@@ -0,0 +1,21 @@
"""
Migration 15
- Delete projected modules on citadels
"""
import sqlalchemy
def upgrade(saveddata_engine):
sql = """
DELETE FROM modules WHERE ID IN
(
SELECT m.ID FROM modules AS m
JOIN fits AS f ON m.fitID = f.ID
WHERE f.shipID IN ("35832", "35833", "35834", "40340")
AND m.projected = 1
)
"""
saveddata_engine.execute(sql)

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

@@ -24,7 +24,7 @@ from eos.db import saveddata_meta
from eos.types import Override
overrides_table = Table("overrides", saveddata_meta,
Column("itemID", Integer, primary_key=True, index = True),
Column("itemID", Integer, primary_key=True, index = True),
Column("attrID", Integer, primary_key=True, index = True),
Column("value", Float, nullable = False))

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

@@ -135,6 +135,11 @@ class HandledModuleList(HandledList):
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()
fit.ship.multiplyItemAttr(attr, module.getModifiedItemAttr(attr),
stackingPenalties=True, penaltyGroup="preMul")
#Adjust RAH to match the current damage pattern
damagePattern = fit.damagePattern
if 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 833)
# 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 833)
# 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

@@ -2,6 +2,7 @@
#
# Used by:
# Implants named like: Exile Booster (4 of 4)
# Implant: Antipharmakon Kosybo
type = "passive"
def handler(fit, booster, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Repair Systems") or mod.item.requiresSkill("Capital Repair Systems"),

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

@@ -0,0 +1,8 @@
# armorRepairAmountBonusSubcap
#
# Used by:
# Implants named like: Grade Asklepian (15 of 16)
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Repair Systems"),
"armorDamageAmount", src.getModifiedItemAttr("armorRepairBonus"))

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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

@@ -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

@@ -2,9 +2,9 @@
#
# Used by:
# Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6)
# Skill: Citadel Torpedoes
# Skill: XL Torpedoes
type = "passive"
def handler(fit, container, context):
level = container.level if "skill" in context else 1
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Torpedoes"),
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("XL Torpedoes"),
"emDamage", container.getModifiedItemAttr("damageMultiplierBonus") * level)

View File

@@ -2,9 +2,9 @@
#
# Used by:
# Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6)
# Skill: Citadel Torpedoes
# Skill: XL Torpedoes
type = "passive"
def handler(fit, container, context):
level = container.level if "skill" in context else 1
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Torpedoes"),
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("XL Torpedoes"),
"explosiveDamage", container.getModifiedItemAttr("damageMultiplierBonus") * level)

View File

@@ -2,9 +2,9 @@
#
# Used by:
# Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6)
# Skill: Citadel Torpedoes
# Skill: XL Torpedoes
type = "passive"
def handler(fit, container, context):
level = container.level if "skill" in context else 1
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Torpedoes"),
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("XL Torpedoes"),
"kineticDamage", container.getModifiedItemAttr("damageMultiplierBonus") * level)

View File

@@ -2,9 +2,9 @@
#
# Used by:
# Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6)
# Skill: Citadel Torpedoes
# Skill: XL Torpedoes
type = "passive"
def handler(fit, container, context):
level = container.level if "skill" in context else 1
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Torpedoes"),
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("XL Torpedoes"),
"thermalDamage", container.getModifiedItemAttr("damageMultiplierBonus") * level)

View File

@@ -1,8 +1,8 @@
# capitalLauncherSkillCruiseCitadelEmDamage1
# capitalLauncherSkillCruiseCitadelEmDamage1
#
# Used by:
# Skill: Citadel Cruise Missiles
# Skill: XL Cruise Missiles
type = "passive"
def handler(fit, skill, context):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Cruise Missiles"),
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("XL Cruise Missiles"),
"emDamage", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)

View File

@@ -1,8 +1,8 @@
# capitalLauncherSkillCruiseCitadelExplosiveDamage1
#
# Used by:
# Skill: Citadel Cruise Missiles
# Skill: XL Cruise Missiles
type = "passive"
def handler(fit, skill, context):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Cruise Missiles"),
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("XL Cruise Missiles"),
"explosiveDamage", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)

View File

@@ -1,8 +1,8 @@
# capitalLauncherSkillCruiseCitadelKineticDamage1
#
# Used by:
# Skill: Citadel Cruise Missiles
# Skill: XL Cruise Missiles
type = "passive"
def handler(fit, skill, context):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Cruise Missiles"),
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("XL Cruise Missiles"),
"kineticDamage", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)

View File

@@ -1,8 +1,8 @@
# capitalLauncherSkillCruiseCitadelThermalDamage1
#
# Used by:
# Skill: Citadel Cruise Missiles
# Skill: XL Cruise Missiles
type = "passive"
def handler(fit, skill, context):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Cruise Missiles"),
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("XL Cruise Missiles"),
"thermalDamage", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)

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

@@ -2,7 +2,7 @@
#
# Used by:
# Modules named like: Targeting Systems Stabilizer (8 of 8)
type = "offline"
type = "passive"
def handler(fit, module, context):
fit.modules.filteredItemBoost(lambda module: module.item.requiresSkill("Cloaking"),
"cloakingTargetingDelay", module.getModifiedItemAttr("cloakingTargetingDelayBonus"))

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 (14 of 14)
# 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,8 +1,4 @@
# decreaseTargetSpeed
#
# Used by:
# Drones from group: Stasis Webifying Drone (3 of 3)
# Modules from group: Stasis Web (19 of 19)
# Not used by any item
type = "active", "projected"
def handler(fit, module, context):
if "projected" not in context:

View File

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

View File

@@ -1,7 +1,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,7 @@
# droneDamageBonusOnline
#
# Used by:
# Modules from group: Drone Damage Modules (10 of 10)
# Modules from group: Drone Damage Modules (11 of 11)
type = "passive"
def handler(fit, module, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),

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 @@
# droneTrackingComputerBonus
#
# Used by:
# Modules from group: Drone Tracking Modules (8 of 8)
# Modules from group: Drone Tracking Modules (10 of 10)
type = "active"
def handler(fit, module, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),

View File

@@ -1,7 +1,7 @@
# droneTrackingEnhancerBonus
#
# Used by:
# Modules from group: Drone Tracking Enhancer (9 of 9)
# Modules from group: Drone Tracking Enhancer (10 of 10)
type = "passive"
def handler(fit, module, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),

View File

@@ -1,7 +1,7 @@
# ecmBurst
#
# Used by:
# Modules from group: ECM Burst (7 of 7)
# Modules from group: Burst Jammer (11 of 11)
type = "active"
def handler(fit, module, context):
pass

View File

@@ -0,0 +1,5 @@
# Used by:
# Modules from group: Burst Jammer (11 of 11)
type = "active"
def handler(fit, module, context):
pass

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,9 @@
# 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")
time = container.getModifiedItemAttr("duration")
fit.addDrain(time, amount * multiplier, 0)
def handler(fit, src, context):
if "projected" in context and ((hasattr(src, "state") and src.state >= State.ACTIVE) or hasattr(src, "amountActive")):
multiplier = src.amountActive if hasattr(src, "amountActive") else 1
amount = src.getModifiedItemAttr("energyNeutralizerAmount")
time = src.getModifiedItemAttr("duration")
fit.addDrain(src, time, amount * multiplier, 0)

View File

@@ -4,6 +4,7 @@
# Implants named like: Inherent Implants 'Squire' Capacitor Management EM (6 of 6)
# Implants named like: Mindflood Booster (4 of 4)
# Modules named like: Semiconductor Memory Cell (8 of 8)
# Implant: Antipharmakon Aeolis
# Implant: Genolution Core Augmentation CA-1
# Skill: Capacitor Management
type = "passive"

View File

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

View File

@@ -1,13 +1,14 @@
# 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")
time = container.getModifiedItemAttr("duration")
fit.addDrain(time, amount * multiplier, 0)
def handler(fit, src, context):
if "projected" in context and ((hasattr(src, "state") and src.state >= State.ACTIVE) or hasattr(src, "amountActive")):
amount = src.getModifiedItemAttr("energyNeutralizerAmount")
time = src.getModifiedItemAttr("duration")
fit.addDrain(src, time, amount, 0)

View File

@@ -1,13 +1,16 @@
# 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):
amount = module.getModifiedItemAttr("powerTransferAmount")
time = module.getModifiedItemAttr("duration")
def handler(fit, src, context):
amount = src.getModifiedItemAttr("powerTransferAmount")
time = src.getModifiedItemAttr("duration")
if "projected" in context:
fit.addDrain(time, amount, 0)
fit.addDrain(src, time, amount, 0)
elif "module" in context:
module.itemModifiedAttributes.force("capacitorNeed", -amount)
src.itemModifiedAttributes.force("capacitorNeed", -amount)

View File

@@ -1,10 +1,7 @@
# 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):
def handler(fit, src, context):
if "projected" in context:
amount = module.getModifiedItemAttr("powerTransferAmount")
duration = module.getModifiedItemAttr("duration")
fit.addDrain(duration, -amount, 0)
amount = src.getModifiedItemAttr("powerTransferAmount")
duration = src.getModifiedItemAttr("duration")
fit.addDrain(src, duration, -amount, 0)

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 (25 of 25)
# 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 (25 of 25)
# 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,11 @@
# entityECMFalloff
#
# Used by:
# Drones named like: EC (3 of 3)
type = "projected", "active"
def handler(fit, module, context):
if "projected" in context:
# jam formula: 1 - (1- (jammer str/ship str))^(# of jam mods with same str))
strModifier = 1 - module.getModifiedItemAttr("scan{0}StrengthBonus".format(fit.scanType))/fit.scanStrength
fit.ecmProjectedStr *= strModifier

View File

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

View File

@@ -2,9 +2,10 @@
#
# 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)
# Ships from group: Dreadnought (5 of 5)
# Ships from group: Force Auxiliary (4 of 4)
# Ships from group: Supercarrier (6 of 6)
# Ships from group: Titan (5 of 5)
# Ship: Rorqual
type = "passive"
def handler(fit, ship, context):

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,8 +0,0 @@
# ewSkillEcmBurstFalloffBonus
#
# Used by:
# Skill: Frequency Modulation
type = "passive"
def handler(fit, skill, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Burst Jammer",
"falloffEffectiveness", skill.getModifiedItemAttr("falloffBonus") * skill.level)

View File

@@ -1,8 +1,4 @@
# ewTargetPaint
#
# Used by:
# Modules from group: Target Painter (9 of 9)
# 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

@@ -1,7 +1,6 @@
# ewTestEffectJam
#
# Used by:
# Modules from group: ECM (44 of 44)
# Drones named like: EC (3 of 3)
type = "projected", "active"
def handler(fit, module, 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,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.
"""
# User-friendly name for the ability
displayName = "Energy Neutralizer"
prefix = "fighterAbilityEnergyNeutralizer"
type = "active", "projected"
def handler(fit, src, context):
if "projected" in context:
amount = src.getModifiedItemAttr("{}Amount".format(prefix))
time = src.getModifiedItemAttr("{}Duration".format(prefix))
fit.addDrain(src, 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

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