Compare commits

...

676 Commits

Author SHA1 Message Date
blitzmann
63fce4be17 Handle self projections by creating a copy of the fit. Due to the way effects are calculated, we would have double effects implemented if not for the copy 2015-07-11 16:28:09 -04:00
blitzmann
86ee5292d8 Fix fit copying and deleting fits not being reflected in other fits. 2015-07-11 12:43:47 -04:00
blitzmann
23b458534f Remove unneeded collection class for projected fits 2015-07-10 23:22:58 -04:00
blitzmann
2256efacb0 Do migration stuff for projected fits 2015-07-10 16:40:00 -04:00
blitzmann
28a5318e3b Merge branch 'master' into toggleProjectionFit
Conflicts:
	config.py
2015-07-10 16:09:00 -04:00
blitzmann
609ee13cd6 Redirect stderr and stdout to logger when we are frozen. Need to test this. 2015-07-10 15:58:45 -04:00
blitzmann
4216904736 Remove function to remove projected fits correctly. This is now handled by proper DB relationships 2015-07-10 15:46:42 -04:00
blitzmann
496e9b56b5 Handle use case of invalid fit's mucking things up 2015-07-10 15:46:15 -04:00
blitzmann
b8f73a7c94 bump dev 2015-07-10 12:58:03 -04:00
blitzmann
b4604f8207 Bump Stable... maybe it will be this time 2015-07-10 12:17:14 -04:00
blitzmann
68dddf2810 Fix for init projected fit. Took a long time to figure out what was happening. 2015-07-10 11:58:15 -04:00
blitzmann
4c17f38b1a Fix for #324 - do not reset itemID automatically upon removal due to way modules are swapped. 2015-07-09 18:36:11 -04:00
blitzmann
221a3fde14 Being extra cautious 2015-07-09 18:18:36 -04:00
blitzmann
c17e03d8d0 Fixes critical design issue when it comes to projected fits. Disabled some of the more advanced functionality (projection amount and active) to cope to development. Crash still happens occasionally when adding projected fit for unknown reasons - not 100% reproducable yet 2015-07-09 17:53:41 -04:00
blitzmann
af9f64db5f Move the chain into the runtime loop, otherwise projections won't work for some odd reason. 2015-07-09 14:48:15 -04:00
blitzmann
1f82465a65 Return None for price column on ship modes, fixes #322 2015-07-09 12:13:13 -04:00
blitzmann
d885bd4636 Bump dev and Fix #321 - oversight in tactical mode selection 2015-07-09 11:48:11 -04:00
blitzmann
c17bce55bb Lots of stuff
- Added logging and replaced Timer class with more useful one
- Move projected fit loop out of runtimes
- Eliminate recursions from Fit.clear()
- Clean up overall fit calc logic
2015-07-09 10:43:39 -04:00
blitzmann
4137a7cda9 Bump stable 2015-07-08 11:20:18 -04:00
blitzmann
c92911b79a Work around for lack of flag_modified() support 2015-07-08 10:54:26 -04:00
DarkPhoenix
adc9fb6d00 Don't call function multiple times after first unconditional call 2015-07-08 17:45:25 +03:00
Ryan Holmes
5baf70694a Merge pull request #318 from poettler-ric/fix-logging
Fix logging
2015-07-08 10:14:46 -04:00
Richard Poettler
f08dc97576 logging crashes if the directory doesn't exist 2015-07-08 10:47:25 +02:00
Richard Poettler
35094ae1ce moved dublicate code into one method 2015-07-08 10:45:37 +02:00
DarkPhoenix
5ac31920ee Fix #317
Crop images to square form before making thumbnail, not square images cause issues on Windows
2015-07-08 11:39:01 +03:00
DarkPhoenix
e63c3541c4 Bump for next development release 2015-07-08 00:09:34 +03:00
DarkPhoenix
4976516d4d Bump for a stable version 2015-07-07 23:36:03 +03:00
Ryan Holmes
e042a21d32 Merge pull request #315 from lunedis/resistmultiplier
Showing Resist Multiplier in Tooltip
2015-07-07 14:42:50 -04:00
Kalu
8a22907940 newline in resist multiplier tooltip and explanation 2015-07-07 20:38:27 +02:00
Kalu
a97847e644 show rr factor in tooltip 2015-07-07 20:38:16 +02:00
blitzmann
23309a5da6 Remove unneeded code that created a bitmap for checkboxes 2015-07-07 13:49:40 -04:00
blitzmann
06e4a7e80f Support changing amount of projected fits 2015-07-07 13:49:39 -04:00
blitzmann
b95a10d284 Add active column. Looping the fit to apply it x amount of times doesn't seem to work. Probably because it's been flagged calculated and returns early 2015-07-07 13:49:38 -04:00
blitzmann
2bca3ddcc8 GUI support (also made regular checkboxes pretty for drones/implant/etc) 2015-07-07 13:49:37 -04:00
blitzmann
9ef182aa99 First working prototype of toggleable projected fits. Creates a new association object that stores projection-specific information. GUI hasn't been touched (need to show state), and there are a lot of variables that I need to rename. 2015-07-07 13:49:35 -04:00
blitzmann
5e56107582 Revert changes to minimum / default sizes of splitter windows 2015-07-07 13:28:02 -04:00
DarkPhoenix
972c08e7e4 Remove AT13 prizes from ship list for now 2015-07-07 16:10:29 +03:00
DarkPhoenix
091832af21 Fix bug in script and add missing icons 2015-07-07 16:09:13 +03:00
DarkPhoenix
16d1891e16 Add script which updates renders and update them using aegis release export 2015-07-07 16:05:44 +03:00
DarkPhoenix
40ee68e2cf Update module/attribute icons 2015-07-07 15:11:55 +03:00
DarkPhoenix
bfe3b4a26d Add new entosis offline mass penalty 2015-07-07 15:10:37 +03:00
DarkPhoenix
9aa1332b15 Update database to 912410 2015-07-07 15:07:39 +03:00
DarkPhoenix
0521d242eb Make sure bitmap loader searches for proper file (w/o EVE embedfs-specific path and extension) 2015-07-06 11:31:02 +03:00
DarkPhoenix
2b3f3773e5 Merge branch 'master' into singularity 2015-07-06 01:39:50 +03:00
DarkPhoenix
4041407878 Also make sure to process icons for categories and attributes 2015-07-06 01:38:51 +03:00
blitzmann
1b5e0467fc Save browser sizes 2015-07-05 13:59:18 -04:00
DarkPhoenix
a7c346f78e Add script which is supposed to update icons 2015-07-05 20:59:15 +03:00
blitzmann
3cc51aaf89 Change logging location to ~/.pyfa and set default level to WARN 2015-07-05 13:15:26 -04:00
Ryan Holmes
a339ae1c55 Merge pull request #312 from blitzmann/dbCorruption
Fixes for database rot
2015-07-05 13:08:11 -04:00
blitzmann
3773d1c28e Improvements to fit initializations and logging 2015-07-05 12:57:04 -04:00
blitzmann
41b8db346f Fix broken drone drag 2015-07-05 01:16:53 -04:00
blitzmann
7959593c6c Improve object initialization and add support for logging the errors. 2015-07-05 00:31:52 -04:00
blitzmann
aaa60cbc14 Fix instance where some items were being re-added due to lack of return. Also, implement some basic logging. 2015-07-05 00:28:55 -04:00
DarkPhoenix
8ae5a96047 Merge branch 'master' into singularity 2015-07-04 12:45:15 +03:00
blitzmann
8c90b3132b Use lunedis's method and apply it to additions pane, cleans up code 2015-07-04 01:38:11 -04:00
blitzmann
1326e21f6b Fix IndexError when selecting module index that doesn't exist. Also, tweaked setting the selItem variable. 2015-07-04 01:27:57 -04:00
blitzmann
bfdc2161e0 Add shortcut cues as toggle in prefs 2015-07-04 00:52:44 -04:00
blitzmann
9ab79af70c Show shortcut values in market list 2015-07-04 00:44:19 -04:00
Ryan Holmes
f0de2000bf Merge pull request #313 from lunedis/quickfit
Quickly fitting modules using ALT+1-9
2015-07-04 00:34:43 -04:00
blitzmann
5991d19b3e Allow Subsystems as modules. 2015-07-04 00:32:28 -04:00
Kalu
51fed996f1 refactor quickfit shortcuts with list 2015-07-03 23:43:04 +02:00
Kalu
f6bbc6c410 Implemented using Alt+1-5 for quickly fitting modules, see issue #183 2015-07-03 23:42:54 +02:00
blitzmann
3de6b63325 Fix oversight when creating a new database 2015-07-03 14:18:11 -04:00
blitzmann
dd48815f30 Offline rigs, closes #100 2015-07-03 14:05:57 -04:00
DarkPhoenix
5608676dc8 Merge branch 'master' into singularity 2015-07-03 12:37:08 +03:00
DarkPhoenix
86ab1f7444 Ignore python pyc files and rely on index within file rather than just on amount of files 2015-07-03 12:36:17 +03:00
DarkPhoenix
8f51642f70 Merge branch 'master' into singularity 2015-07-03 12:13:53 +03:00
blitzmann
de71123a48 Merge branch 'pricing' 2015-07-03 02:38:23 -04:00
blitzmann
874cf4ef0a Use old price information if update fails. Add "(!)" to show that price is out of date 2015-07-03 02:37:52 -04:00
blitzmann
87e5929cb1 DB migration is triggered by number of upgrade files found, rather than number in config.py. This allows us to remove the db version variable in config.py and not worry about it. 2015-07-02 19:35:53 -04:00
blitzmann
84b1e0ac41 Migrate boosters table to new schema that drops the UNIQUE constraint (causes issues and is unneeded) 2015-07-02 19:34:02 -04:00
blitzmann
539360d5f6 Remove old debug print 2015-07-02 15:04:07 -04:00
blitzmann
ca08f8d8da Handle fits with invalid ships by removing and deleting them when loaded. 2015-07-02 15:03:56 -04:00
blitzmann
e1ce672569 Move flag_modified to HandledList.remove() so that it takes care of all our use cases. Give fits an itemID like everything else so that projected fits can be removed correctly by this logic. No reason for them to be special snowflakes. 2015-07-02 11:22:26 -04:00
blitzmann
717080b58c Handle invalid implants and boosters. Uses a different method to ensure implant and booster slot is not duplicated. Still need to modify existing databases to remove Booster table constraint. Reverts a previous commit: "Gracefully handle invalid boosters in database (both itemIDs that don't exist as well as non-booster items). Implants need a little more work" (aaa5a6ae18) 2015-07-02 00:48:32 -04:00
blitzmann
51696c509f Merged Cargo and Drone collection class (essentially the same). Utilized SQLAlchemy's flag_modified() to force SA to update DB (in this case, remove the entry) 2015-07-01 20:54:40 -04:00
blitzmann
4a5ae9f6f1 Handle invalid cargo. Noticed that cargo nor drones are removed from the database with these methods. Not sure why - projected drones and modules are correctly removed in similar ways 2015-07-01 15:21:27 -04:00
blitzmann
fa9f324f78 Handle invalid drones 2015-07-01 14:55:05 -04:00
blitzmann
bcc77f11cd Handle invalid projected drones 2015-07-01 14:50:08 -04:00
blitzmann
f737f292e3 Refine appending projected modules. Ensure that module can actually be projected, and also ensure that we only have 1 system effect running at a time. Invalid modules are removed at earliest opportunity as we are later accessing attributes that may not be there for corrupted data. 2015-07-01 13:34:19 -04:00
blitzmann
1c18a5207c System Effects are wrapped in Module class, even though they are not modules. Account for this. 2015-07-01 13:32:31 -04:00
blitzmann
fa2b1e3821 Handle invalid modules. This streamlines the module init code from both program and database sources. When loading from the database, we ensure that the module item is actually an item. If not, we set a flag to delete it (which is picked up by the collection class)(can't use exceptions as there's no place to catch them) 2015-07-01 02:20:56 -04:00
DarkPhoenix
6184753822 Merge branch 'master' into singularity 2015-06-30 21:16:15 +03:00
DarkPhoenix
91a9c860ea Merge branch 'singularity' of github.com:DarkFenX/Pyfa into singularity 2015-06-30 21:15:10 +03:00
DarkPhoenix
0730ac369f Update data to 910808 2015-06-30 21:14:22 +03:00
blitzmann
aaa5a6ae18 Gracefully handle invalid boosters in database (both itemIDs that don't exist as well as non-booster items). Implants need a little more work 2015-06-30 13:51:49 -04:00
blitzmann
646f3afd27 Fixed oversights 2015-06-27 19:32:21 -04:00
blitzmann
98815f2b85 Fix #307 by moving menu code to spawn event 2015-06-27 18:18:43 -04:00
Ryan Holmes
95eb5a6117 Update README.md
Added note for Linux users and wxPython 2.8
2015-06-25 21:45:06 -04:00
blitzmann
dc035469ed Fix background color for certain panels under Linux 2015-06-25 16:09:56 -04:00
DarkPhoenix
ec4a00cdfc Merge branch 'master' into singularity 2015-06-25 12:12:33 +03:00
blitzmann
21937c02ff Made it look nicer 2015-06-24 19:53:55 -04:00
DarkPhoenix
edfd446e46 Update to 908326 2015-06-25 00:33:37 +03:00
blitzmann
7ec78b941e Add help text for why api is disabled, per #269. I may or may not make it look nicer later 2015-06-24 15:10:37 -04:00
blitzmann
95bf1039c0 Fix #291 - Triage not properly implemented on projected fit 2015-06-24 14:36:31 -04:00
blitzmann
e6def6f5f9 Fix #299 - fit not recalculated after module states change upon module append 2015-06-24 00:40:13 -04:00
DarkPhoenix
de0b03630a Bump version 2015-06-23 00:17:41 +03:00
DarkPhoenix
90a2a79d5b Add hecate effects, update database to 906843 2015-06-23 00:00:09 +03:00
DarkPhoenix
21efd6d06a CCP added faction 200mm plates back to the game 2015-06-22 22:22:35 +03:00
DarkPhoenix
ea288a6133 Update conversion scripts to use new scheme 2015-06-21 16:50:07 +03:00
blitzmann
23baaa7dba Merge branch 'master' of https://github.com/DarkFenX/Pyfa 2015-06-16 13:14:28 -04:00
blitzmann
8008c986d3 Fix #302 - Projected fit applying Tactical Destroyer mode effects on projectee 2015-06-16 13:14:16 -04:00
DarkPhoenix
b9efc919ea Add missing RHML rof effect 2015-06-16 16:53:21 +03:00
blitzmann
6cc6fd9468 Instead of icon, use unicode refresh. Minor issues with image and GUI flickering 2015-06-06 22:42:42 -05:00
blitzmann
53c9169043 Simplified price pane. Will show pricing update label and will only clear it when prices are done. Removed all timer code as it makes it overly complicated and I suspect half of it didn't work as intended anyway 2015-06-05 15:39:10 -05:00
blitzmann
9e96aac04d Fix situation in which module prices are fetched individually (which the price column). Instead, have them wait in a queue that is processed when the entire fit is called and calculated (with the price pane). Also adds a little refresh icon to know that prices are updating and it's not just blank (might change) 2015-06-04 14:10:27 -05:00
DarkPhoenix
3395f8ebe6 Bump for next development release 2015-06-02 23:43:16 +03:00
DarkPhoenix
1d45102100 Bump for a stable release 2015-06-02 23:32:16 +03:00
DarkPhoenix
1694d74afa Add Carnyx tiericide module upgrade/import paths 2015-06-02 23:27:08 +03:00
DarkPhoenix
9c9f1dcefa Get faction 200mm plates back 2015-06-02 19:37:32 +03:00
DarkPhoenix
a4ca2e90f9 Add effect which affects entosis duration on cap ships 2015-06-02 16:48:58 +03:00
DarkPhoenix
dbfcfd9acf Change expansion data in config and update database to 893722 2015-06-02 16:38:38 +03:00
DarkPhoenix
8c30ee3fd3 Merge branch 'master' into singularity 2015-05-28 15:21:28 +03:00
Anton Vorobyov
ca17d17232 Merge pull request #292 from wolfwood/master
fix issue copying fits with sqlalchemy 1.0
2015-05-28 15:17:02 +03:00
wolfwood
b78c0a5845 fix issue copying fits with sqlalchemy 1.0 2015-05-27 10:21:16 -07:00
DarkPhoenix
ef6e25bfce Merge branch 'master' into singularity 2015-05-27 14:55:12 +03:00
DarkPhoenix
e81f7eb765 Change validator requirement for owner ID
This fixes bug related to sqlalch 1.0
2015-05-27 14:54:37 +03:00
DarkPhoenix
26122f6da7 Add latest changes from Singularity 2015-05-21 16:44:39 +03:00
DarkPhoenix
cca7f1112a Revert "Merge branch 'master' into wx3"
This reverts commit 33a0c10650, reversing
changes made to 2077655694.

Reverting merges fucks up git, but oh well - we probably better merge stuff manually rather than fucking up master with wx3 which is apparently buggy
2015-04-30 19:47:15 +03:00
DarkPhoenix
c809a614f9 Revert "Move logging initialization back to pyfa.py"
This reverts commit d18cf7b3b0.

Reverting all wx3 commits in master
2015-04-30 19:39:11 +03:00
DarkPhoenix
2c366faa66 Revert "Remove setting locale"
This reverts commit 7606bded40.

Reverting all wx3 commits on master
2015-04-30 19:38:47 +03:00
DarkPhoenix
06252d761d Revert "Change the way we detect pyfa path"
This reverts commit bb8d5d0d65.

Reverting all wx3 commits in master
2015-04-30 19:38:18 +03:00
DarkPhoenix
bb8d5d0d65 Change the way we detect pyfa path
This ensures that it works even with frozen executable
2015-04-29 00:27:42 +03:00
DarkPhoenix
7606bded40 Remove setting locale
It causes issues with wx3 on windows
2015-04-28 23:49:11 +03:00
DarkPhoenix
daaf48d02a Add effect i should've added for mosaic release 2015-04-28 21:59:54 +03:00
DarkPhoenix
d18cf7b3b0 Move logging initialization back to pyfa.py 2015-04-28 21:59:14 +03:00
DarkPhoenix
33a0c10650 Merge branch 'master' into wx3 2015-04-28 21:53:27 +03:00
DarkPhoenix
2077655694 Bump version for next development release 2015-04-28 21:43:22 +03:00
DarkPhoenix
0dc3cbb7c7 Bump version for a stable release 2015-04-28 19:50:53 +03:00
Anton Vorobyov
a3c19f6f2b Merge pull request #271 from BlckKnght/fix_stagger
Fix stagger
2015-04-28 19:34:58 +03:00
DarkPhoenix
f97b037011 Forgot to save file for previous commit 2015-04-28 19:18:56 +03:00
DarkPhoenix
dd3dd799b2 Move loggin configuration to config temporarily 2015-04-28 19:17:50 +03:00
Anton Vorobyov
ac881ac371 Merge pull request #276 from kainz/master
Support fits exported from jEveAssets
2015-04-28 18:30:20 +03:00
DarkPhoenix
d734ccbf0d Add effect for entosis link and update effect comments 2015-04-28 18:24:25 +03:00
DarkPhoenix
024e0ad4f5 Support proper migration for ishukone scorp (which is skin for regular scorp now) 2015-04-28 18:19:58 +03:00
DarkPhoenix
545d98883a Update DB to mosaic 2015-04-28 18:06:03 +03:00
DarkPhoenix
742abc3250 Remove bunch of chinese skinned ships 2015-04-28 18:05:15 +03:00
DarkPhoenix
294e213ac2 Remove support for vanity ships which were converted into base hulls in game
We do not need any DB conversion for them because we converted them into base hull during import time. Also it breaks import of old posted EFT-style fits with removed skinned ships, but i can't say we care alot about this case
2015-04-28 18:01:06 +03:00
Bryon Roche
557f32ab91 Implement support for loading utf-16 XML.
Such XML is generated by software like jEveAssets's owned ships->fitting
export tool.

Without such detection, pyfa will go and try to import those as DNA
fits, with all the ensuing hilarity, thus the DNA import debug code as
well.
2015-04-22 05:05:48 -07:00
DarkPhoenix
e5430cac84 Do not apply ES bonus to weapon locus rigs 2015-04-20 15:07:19 +03:00
blitzmann
39c14b62fd Merge branch 'master' into wx3 2015-04-17 17:48:56 -04:00
DarkPhoenix
940035fa8c Fix market groups of civilian modules 2015-04-13 15:48:35 +03:00
blitzmann
5eaaaf070b Merge branch 'master' of https://github.com/DarkFenX/Pyfa 2015-04-08 23:44:51 -04:00
blitzmann
0bc9264c28 Fix #268 2015-04-08 23:43:56 -04:00
Steven Barker
cb1de9589e fix typo, pick a better stagger amount 2015-03-31 12:09:27 -07:00
Steven Barker
370e34cff9 Make staggerred modules with ammo work 2015-03-30 21:02:56 -07:00
Anton Vorobyov
28c3fc720f Merge pull request #249 from f-andrey/master
Update gpl.txt
2015-03-27 22:03:08 +03:00
DarkPhoenix
04b3a687fc Add new yacht to LIS category and add its render 2015-03-26 15:42:32 +03:00
DarkPhoenix
629f6e60a4 Mark as development 2015-03-26 15:35:05 +03:00
blitzmann
f801d7905c Update effect file headers, mark as stable 2015-03-24 16:30:40 -04:00
blitzmann
694a2a3d9b Fix #267 2015-03-23 21:21:38 -04:00
blitzmann
222888984a Update to 871030 SISI, also fix prep_data script for changes in Phobos / reverence 2015-03-23 18:00:38 -04:00
Ryan Holmes
bb96ecb647 Merge pull request #263 from OISumeko/master
Fix for #261
2015-02-22 23:51:04 -05:00
Cameron Grout
e082077dfc Updated None || 0 check to meet requested style
Updated for pull  request #263
2015-02-23 17:02:47 +13:00
blitzmann
a31769bde3 Remove problematic pyd files upon installation 2015-02-22 21:17:20 -05:00
Cameron Grout
be7e8be85b Fix for bug #261
Missile launchers do not have a "capacitorNeed" attribute (while other
capless weapon systems do), so getModifiedItemAttr will return None
rather than 0. Added a check for this.
2015-02-22 23:52:58 +13:00
DarkPhoenix
b16d2eae15 Bump for a next development release 2015-02-18 15:48:40 +03:00
DarkPhoenix
0ef05ffaf8 Bump version 2015-02-18 15:47:43 +03:00
DarkPhoenix
9ee7671a3c Update DB to 862956 2015-02-18 13:55:23 +03:00
DarkPhoenix
ca301f8d5b Fix svipul's sensor str effect on sharpshooter mode 2015-02-15 14:27:32 +03:00
blitzmann
471261275a Commit missing database 862583 2015-02-14 21:56:10 -05:00
blitzmann
55f2f3bfe8 Merge remote-tracking branch 'blitzmann/singularity' into singularity 2015-02-14 01:33:08 -05:00
blitzmann
3ce673d8af Merge remote-tracking branch 'origin/master' into singularity 2015-02-14 01:32:44 -05:00
blitzmann
3e2053b2dd Update 862583 sans database 2015-02-14 01:27:52 -05:00
DarkPhoenix
931e48d9a0 Fix ES effect affecting local modules 2015-02-13 22:09:38 +03:00
blitzmann
6c19f446be Sort import stage results 2015-02-09 22:44:33 -05:00
Ryan Holmes
d4842c2f8e Merge pull request #260 from blitzmann/importStage
Import stage, resolves #93
2015-02-09 22:25:01 -05:00
blitzmann
dc77ee9353 Add import stage to goTo logic, and fixed a bug with search initiating a goTo to the last hx item 2015-02-09 22:05:56 -05:00
blitzmann
6d29fd6bc1 Simplified stage 3 history handling. Fixes:
* Hitting back button after creating/copying new fit breaks stage
* Importing more than 1 fit while on the search stage and hitting the back button breaks stage
2015-02-08 21:12:56 -05:00
blitzmann
cbcd5ccca5 Fixed bugs:
* Importing 1 fit would open stage3 of that ship, but add incorrect history data.
* Deleting fit from search stage caused blank stage most times, fixed this.
2015-02-08 20:29:54 -05:00
blitzmann
30d2ab23ad Initial support for import stage in shipBrowser. Few bugs, see issue #93 2015-02-08 16:14:52 -05:00
blitzmann
f4f028b843 Fix #258: broken EFT cfg import 2015-02-07 22:59:55 -05:00
blitzmann
ef62f102bc Fix #256 2015-02-07 21:15:23 -05:00
blitzmann
7b8bb79cbe Fix error when loading previous fits that no longer exist in DB 2015-02-03 15:23:31 -05:00
blitzmann
3a26790109 If in debug, publish ship mode items (makes it easy to find in market and look at stats).
Tweak effectsUsedBy.py to publish all modes in group rather than individually listing them.
2015-02-03 14:16:09 -05:00
blitzmann
c861adc5ed Sanity check to importing effect handler
Tweaks to opening effect files when in debug (support for OS X and Linux)
2015-02-03 14:07:21 -05:00
blitzmann
36a3ac70b6 Removed unneeded variable in effect file 2015-01-26 23:51:46 -05:00
blitzmann
54d1b35ce7 Fix path to point to actual gamedata - useful when importing from terminal and has no effect on pyfa's import (as it is specifically provided in pyfa/config.py) 2015-01-25 11:09:43 -05:00
blitzmann
675213f20f Fix #252 2015-01-21 11:18:58 -05:00
blitzmann
3a9e1f8b85 Fix XML export 2015-01-17 13:41:49 -05:00
blitzmann
e520758334 dev version 2015-01-15 12:29:16 -05:00
blitzmann
073309de0a Increment database version and bump to 1.8.1 stable 2015-01-15 12:08:35 -05:00
DarkPhoenix
1bce724190 Do not write non-ascii comments to effect files 2015-01-15 12:17:30 +03:00
blitzmann
2c47d0758e Bump to stable 2015-01-14 21:31:28 -05:00
blitzmann
8f7ae4b00c Remove Chinese ships from effect "used by" header 2015-01-14 21:04:12 -05:00
DarkPhoenix
f11f3bfb79 Implement recon effect changes 2015-01-15 02:35:22 +03:00
DarkPhoenix
68703f3db5 Put old innerzone names back
To make sure EFT fittings with these are imported & converted properly
2015-01-14 23:03:14 +03:00
Andrey
ad18560412 Update gpl.txt
Fix license text http://www.gnu.org/licenses/gpl-3.0.txt
2015-01-14 12:27:47 +03:00
blitzmann
d3def54b5a Conversion pack for Proteus Module Tiericide + conversion helper script 2015-01-13 22:37:20 -05:00
DarkPhoenix
27d72ed909 Add vanity ship changes from proteus 2015-01-14 03:22:28 +03:00
DarkPhoenix
55e45b6bc1 Remove published chinese ships from visibility 2015-01-14 03:15:35 +03:00
DarkPhoenix
252f56732b Merge branch 'master' of github.com:DarkFenX/Pyfa 2015-01-14 03:00:15 +03:00
DarkPhoenix
d52e88cdaa Update database to proteus & add tiericide item conversions 2015-01-14 02:59:15 +03:00
blitzmann
371e33764e Ammo name tooltip added to charge icon 2015-01-13 17:26:56 -05:00
blitzmann
9b8b7aba07 Add module state information to state tooltip 2015-01-12 23:37:40 -05:00
blitzmann
0a6274474e Fixes #204 2015-01-10 21:53:30 -05:00
Ryan Holmes
0ff69068c0 Merge pull request #241 from cockroach/master
Make tab tooltips optional
2015-01-10 20:13:35 -06:00
DarkPhoenix
731477b366 Open fit upon importing 2015-01-11 00:43:05 +03:00
Anton Vorobyov
0295f04ec4 Merge pull request #243 from blitzmann/issue-156
Fix #156
2015-01-10 18:21:30 +03:00
blitzmann
059af217aa Fix #246 2015-01-08 15:04:22 -05:00
Ryan Holmes
2a391fa38b Merge pull request #242 from blitzmann/issue-233
Fix #233
2015-01-08 13:26:26 -06:00
Ryan Holmes
88b1426fe0 Merge pull request #232 from blitzmann/progress
Port custom wait dialog to wx.ProgressDialog
2015-01-08 12:15:05 -06:00
blitzmann
07da5aa861 Resolve #245 - Adding tooltips to fitting columns 2015-01-08 12:39:16 -05:00
blitzmann
192d6f4605 Fix #156 2015-01-05 22:50:33 -05:00
blitmann
487f65d62b Fix #233 2015-01-04 17:19:53 -06:00
Stefan Ott
c202aefd2e Reverted accidentally committed change 2015-01-02 17:06:26 +01:00
Stefan Ott
0ed91e4079 Fixed code formatting 2015-01-02 17:04:10 +01:00
Stefan Ott
9c2a667635 Made tab tooltips optional 2015-01-02 16:55:05 +01:00
blitzmann
19579fb087 Implement middle click to offline modules 2014-12-31 20:18:16 -05:00
blitzmann
ea77e6851e Fix #238 2014-12-31 20:07:36 -05:00
blitzmann
1c3f9ccf5b Fix #240 2014-12-31 19:57:10 -05:00
blitzmann
e42671fbec Workaround for seg fault (see comments in pull request # 232) 2014-12-31 16:20:25 -05:00
blitzmann
18c86daea6 Do not include rigs in skill requirement checks 2014-12-30 21:08:55 -05:00
blitzmann
c59b818677 Add wx.ProgressDialog to HTML export, along with some documentation and silent try-except in HTML export 2014-12-19 00:13:06 -05:00
Ryan Holmes
71bf1556a1 Fix column name in upgrade3 migration script 2014-12-19 00:02:39 -05:00
blitzmann
26e50f2e8a Implement ProgressDialog for fit file imports (EVE XML / EFT cfg).
To make it simpler, changed the way fits are imported and saved from a per-file basis (process file->save fits->process file->save fits) to a per-batch basis (process file->process file -> save all fits).
2014-12-17 21:36:42 -05:00
blitzmann
25e30672fe Start conversion of various wait dialogs to wx.ProgresDialog. Implemented new wx.ProgresDialog for fitting backup 2014-12-15 20:01:03 -05:00
DarkPhoenix
e8268633e3 Merge branch 'master' into wx3
Used code from the master on conflicts
2014-12-15 15:45:33 +03:00
blitzmann
1b3c058eab Put XML export in a try-except block so that a failed export of 1 fit doesn't crash the whole process 2014-12-13 20:12:24 -05:00
blitzmann
adcae42ae7 Goodbye CREST support, we hardly used ya! (close #201) 2014-12-13 19:03:22 -05:00
blitzmann
238712e62c Add consumption info for siege/cyno module in misc column (resolves #219) 2014-12-13 18:39:06 -05:00
Ryan Holmes
f2b959895e Merge pull request #227 from unpoetical/master
Show amount over limit on pg/cpu/drone displays
2014-12-12 19:04:41 -05:00
blitzmann
ffb7719937 Fix #228 - missing Heretic effect 2014-12-12 18:49:00 -05:00
DarkPhoenix
3c1bf22e87 Merge branch 'master' into wx3 2014-12-12 14:42:25 +03:00
unpoetical
e0488dce4f Update powergrid, CPU, drone bandwidth, and drone bay displays to show remaining units so I don't have to do math. Could affect other gauge displays? 2014-12-11 22:15:50 -08:00
blitzmann
88074c8516 Fix fonts and lag with OS X 2014-12-11 23:25:44 -05:00
blitzmann
359840aee8 bump dev 2014-12-11 23:13:04 -05:00
blitzmann
77e3a0f666 Bump Stable 2014-12-11 14:39:01 -05:00
blitzmann
3d4eef2466 Fix #197, again 2014-12-11 11:34:21 -05:00
blitzmann
663cf7104c Fix #226, as well as another bug with coloring rack that had too many modules 2014-12-11 10:37:07 -05:00
blitzmann
0d6a55dcb6 Fix #224 2014-12-10 22:09:46 -05:00
blitzmann
85608616dd readjust some mode logic 2014-12-10 22:04:12 -05:00
blitzmann
d5ce666d8d Fix #225 - set mode whenever the ship is set. 2014-12-10 21:54:26 -05:00
blitzmann
2bff11e5ab bump dev 2014-12-09 19:31:01 -05:00
blitzmann
5adaaac75e Bump release 2014-12-09 18:50:34 -05:00
blitzmann
a49269b759 Edit effect headers and fix effects script 2014-12-09 18:49:40 -05:00
blitzmann
a96efaee1a Revert "Bump release", forgot effect headers 2014-12-09 18:49:10 -05:00
blitzmann
299de38bf6 Bump release 2014-12-09 18:37:24 -05:00
DarkPhoenix
b29019f0a7 Restore old race detection mechanism, but new has priority over it
Few unique ships still have no factionID
2014-12-10 01:13:58 +03:00
DarkPhoenix
da15b63831 Fix race detection 2014-12-10 01:01:51 +03:00
DarkPhoenix
20b2f1e5fc Merge branch 'singularity' 2014-12-09 23:39:57 +03:00
blitzmann
f1cdabf37c Fix bullets in traits 2014-12-08 23:10:55 -05:00
blitzmann
94e1c7aba3 Fix more bindings 2014-12-08 15:10:45 -05:00
blitzmann
797db36a42 Fix menu spawning when no fit open 2014-12-08 12:26:51 -05:00
blitzmann
ac18c58a0a fix menu bindings 2014-12-08 12:12:50 -05:00
Anton Vorobyov
281850d7df Merge pull request #214 from blitzmann/singularity 2014-12-08 03:05:04 +03:00
blitzmann
2e460adbc9 Add drone volleys 2014-12-04 21:08:41 -05:00
blitzmann
5660b2b8ed Add missing icons 2014-12-02 18:57:33 -05:00
blitzmann
de9fbd672f Fix scripts for t3 tactical modes 2014-12-02 18:33:59 -05:00
blitzmann
85029f6be8 Add mode to blanks list to avoid exception in module operations 2014-12-02 14:52:56 -05:00
blitzmann
337db326fd Add Mode and separation to fitting list.
Todo: A few exceptions are thrown when trying to remove mode via double click, spawn context menu, move to a different position, etc. All simply because Mode is not a Module. Will need to add try-except blocks to cover these instances
2014-12-02 14:33:47 -05:00
blitzmann
795230dae6 Quick fix for game version bug when running jsonToSql 2014-12-02 12:53:02 -05:00
blitzmann
022a929399 Fix initial mode assignment 2014-12-02 12:31:10 -05:00
blitzmann
b64238634a Merge branch 'master' into singularity
Conflicts:
	gui/builtinContextMenus/__init__.py
2014-12-02 02:50:27 -05:00
blitzmann
4b0e0300ad Fix path for .git directory 2014-12-02 02:48:50 -05:00
blitzmann
7762bb365f Set debug back to False 2014-12-02 02:45:46 -05:00
blitzmann
dfec7d8fa2 Added new skinned ships to conversions 2014-12-02 02:42:05 -05:00
blitzmann
5c5ec60efd Bowhead effects 2014-12-02 02:28:54 -05:00
blitzmann
2a7e35ff6f Fix exception with non-t3-dessys context menu 2014-12-02 02:15:01 -05:00
blitzmann
d7ab709d52 Add EVE version to about box 2014-12-02 01:35:30 -05:00
blitzmann
831478e034 Finish effects for Confessor 2014-12-02 01:15:06 -05:00
blitzmann
d0b5f3ad78 Fixed Confessor Prop mode effects and added Defense / Sharpshooter mode effects 2014-12-02 00:50:02 -05:00
blitzmann
190c1f135f Add slot modifiers to misc column for subsystems 2014-11-30 22:36:52 -05:00
blitzmann
374d6d6d34 Publish other modes to market 2014-11-30 16:59:55 -05:00
blitzmann
edbdaf5631 Add .Check() to tactical mode menu items 2014-11-30 16:56:43 -05:00
blitzmann
23a71e7448 Implement service layer mode setter. Modes now have basic support and testing.
Also decided to have two separate functions that return the mode items as Items or Modes. Returning them as Items makes it easier to check if provided modeID from user database is valid (since we cannot easily map the modeID to create a Mode), returning as Modes allows us to easily use them for setters. There's probably a better way to do this, but w/e
2014-11-30 16:43:15 -05:00
blitzmann
892c5c5b60 Various event binding fixes for context menus. It's still a mess, but it's not as bad of a mess.
(cherry picked from commit 081e32da6f)
2014-11-30 01:19:10 -05:00
blitzmann
081e32da6f Various event binding fixes for context menus. It's still a mess, but it's not as bad of a mess. 2014-11-30 01:14:47 -05:00
blitzmann
7100e8997b Merge branch 'master' into singularity 2014-11-29 21:53:22 -05:00
blitzmann
9a8642e789 Fix more paths 2014-11-29 20:57:44 -05:00
blitzmann
a565abe6f7 Added script to automate json dump, sql convert, and diff prep. Also adds metadata to eve.db 2014-11-29 20:50:34 -05:00
blitzmann
b93b59fe4d Add windows installer generation to dist.py 2014-11-29 20:49:58 -05:00
blitzmann
9782ca3a29 Improvements on distributable generator 2014-11-29 20:49:40 -05:00
blitzmann
f9fd894c9f Rename nighty to dist and fix path in itemDiff 2014-11-29 20:49:27 -05:00
blitzmann
ee8395e8fd Fix paths 2014-11-29 20:49:10 -05:00
blitzmann
7836506444 Move scripts directory 2014-11-29 20:48:58 -05:00
blitzmann
8df7593223 Moved compat.py to new dir utils/ and also added timer class 2014-11-29 20:47:53 -05:00
blitzmann
8351b0fc9d Fix gitignore 2014-11-29 20:46:16 -05:00
blitzmann
88ee1d60be Fix loading of mode, and add some (untested) setting functions 2014-11-29 02:58:43 -05:00
blitzmann
dda1494b90 Added method to check/get modes, and start GUI integration (simple context menu) 2014-11-28 01:23:44 -05:00
blitzmann
f53384c4c2 Preliminary backend support for tactical destroyer modes.
* Modifies fits table to add "mode" column, which contains typeID of mode for fit
* Introduces Mode type, similar to Ship and Module type
* Includes effects for Amarr Tactical Destroyer Propulsion Mode

Still a lot to do: GUI switching, constraints on which ships get modes, etc
2014-11-27 23:23:24 -05:00
blitzmann
d4af877e47 Update to 848581 2014-11-27 23:15:45 -05:00
blitzmann
5242c6df60 Fix #192
If price is not valid, cancel it out. This will force an update.
2014-11-25 23:54:24 -05:00
blitzmann
8c1d14ec4a Add version to title bar 2014-11-21 13:39:14 -05:00
blitzmann
f187caa549 Reduce minimum vertical size 2014-11-20 13:00:57 -05:00
blitzmann
70d52fd0b2 Moved price update info to header 2014-11-20 12:27:32 -05:00
blitzmann
222ee22fe3 Ability to remove Cargo from context menu 2014-11-20 00:45:30 -05:00
blitzmann
76f1f217e1 Implements forced price refresh (resolves #196) 2014-11-20 00:29:53 -05:00
blitzmann
6f42e7c286 Bump dev version 2014-11-18 20:05:25 -05:00
blitzmann
aab2ec5f96 Bump to Stable 2014-11-18 19:04:59 -05:00
blitzmann
9831ed5c3d Fix old migrations 2014-11-18 18:55:03 -05:00
Ryan Holmes
399ec7d009 Update README.md 2014-11-13 18:07:50 -05:00
Ryan Holmes
bf91e82813 Rename readme.md to README.md 2014-11-13 18:02:14 -05:00
Ryan Holmes
7ca1fc4cfb Merge pull request #202 from danmane/master
Change README to Markdown
2014-11-13 18:01:52 -05:00
Daniel Mane
3f86d3c33d Fix syntax 2014-11-13 10:47:16 -08:00
Daniel Mane
fd1dc5b4e2 Move README to Markdown so it gets displayed better in Github UI 2014-11-13 10:45:23 -08:00
blitzmann
05c73d1b1b If something happens and an error happens, return so that status is not reset later on 2014-11-13 11:18:44 -05:00
blitzmann
7a6e3ac665 Fix #199 2014-11-13 11:06:15 -05:00
DarkPhoenix
9de8fe5884 Fix graphs for drones (#197) 2014-11-11 00:40:31 +03:00
blitzmann
ff55f2817b Fix for collapsible stats panels 2014-11-08 18:17:57 -05:00
Gleb Golubitsky
198ee8d129 Icon column size bumped to 24
Signed-off-by: Gleb Golubitsky <sectoid@gnolltech.org>
2014-11-08 17:33:37 +02:00
Gleb Golubitsky
7db13bd3ba Fixed ChromeTabs not rendering properly in wx 3.0
Signed-off-by: Gleb Golubitsky <sectoid@gnolltech.org>
2014-11-08 17:33:04 +02:00
blitzmann
5be0d4b70e Added version selection logic 2014-11-08 16:45:09 +02:00
blitzmann
a603a4359a Fixed font discrepancy from different wxPython versions. 2014-11-08 16:45:09 +02:00
blitzmann
b4f4024903 Fixed some bugs that blocked startup 2014-11-08 16:38:18 +02:00
blitzmann
df18651b4f Bump wxPython requirements 2014-11-08 16:38:18 +02:00
blitzmann
61197ec061 Fixed old variable name in docstring 2014-11-07 23:40:58 -05:00
blitzmann
9f2124ac9f Forgot to edit main comment =/ 2014-11-07 23:36:50 -05:00
blitzmann
dbacfc19f0 Reintroduced old migration path. 2014-11-07 23:25:51 -05:00
blitzmann
6fafe40f35 Fix for a fix that was removed with a fix (see #62) 2014-11-07 23:17:14 -05:00
DarkPhoenix
7641384aba Remove unused import 2014-11-07 12:52:01 +03:00
DarkPhoenix
15087a290a Add proper support of attribute value limit
This fixes issue with blighted/polarized weapons getting resistances down to negative values
2014-11-07 12:49:34 +03:00
DarkPhoenix
cb27efd5e1 Mark next development cycle 2014-11-07 01:33:57 +03:00
DarkPhoenix
091935259a Bump version and mark as stable 2014-11-07 01:08:57 +03:00
DarkPhoenix
1fca17f5dd Do not add time to misc column for ASB/AAR when factor reload time is turned on, fixes #123 2014-11-06 23:51:37 +03:00
DarkPhoenix
98cac2a0da Penalize speed ganglinks against overheat on module itself (fixes #170) 2014-11-06 23:17:44 +03:00
DarkPhoenix
c28e52f2d1 Disable global ammo picker until we find alternative solution to using it (RMB or modifier keys for regular ammo picker) 2014-11-06 23:02:16 +03:00
DarkPhoenix
36df6878e8 Remove couple of skinned variations from ship browser 2014-11-06 02:45:26 +03:00
DarkPhoenix
7077261fe1 Work around EVE bug (Assault Frigs have raceID assigned) and make race detection to cope with 3+ skill reqs better overall, which fixes race detection for revenant and alike 2014-11-06 02:42:05 +03:00
DarkPhoenix
89052edda2 Commit new Phoebe effect files 2014-11-06 02:22:06 +03:00
DarkPhoenix
e60b677b3f Update to Phoebe 1.0 data 2014-11-06 02:17:29 +03:00
DarkPhoenix
bf5c443053 Fix command processors - they used to allow to have 2 more ganglinks online 2014-11-05 22:03:43 +03:00
DarkPhoenix
d298ed8e01 Fix for new ammo picker (which borked resistance profile selector) 2014-11-05 22:00:55 +03:00
Ryan Holmes
28f2644a15 Merge pull request #189 from Headpigeon/master
Global Charge Switcher
2014-11-04 10:30:20 -05:00
Headpigeon
635e684c3a Added module context menu entry for changing charges on all modules of same type at once (no need to manually select them) 2014-11-02 19:12:03 +01:00
DarkPhoenix
d991048be3 Fix crash on opening stats for items w/o traits 2014-10-30 14:12:37 +03:00
blitzmann
69e99d98c2 Fix minor formatting consistency issue for gauge tooltip 2014-10-26 00:24:40 -04:00
blitzmann
20362d2c0c Added thousands separators to price tooltip 2014-10-26 00:18:54 -04:00
blitzmann
2e1d0c43a1 Added agility and mass to align time tooltip 2014-10-26 00:13:22 -04:00
DarkPhoenix
f78e2ed405 Adapt pyfa scripts to latest Phobos changes 2014-10-25 17:39:33 +04:00
blitzmann
23906d5824 Fix #126 2014-10-14 00:10:47 -04:00
blitzmann
41a67bfae2 Fix some inconsistent behavior and a possible issue with adding a GUI element twice 2014-10-03 23:35:56 -04:00
blitzmann
df58614674 Fix #180 2014-10-03 23:13:12 -04:00
blitzmann
90369b679c Fix #179 2014-10-03 21:25:28 -04:00
blitzmann
fed7107857 Implement better system for item conversions / definitions 2014-10-03 00:32:05 -04:00
blitzmann
4a2223323d Bump dev version 2014-10-01 18:21:45 -04:00
blitzmann
0bbc35cd1b Bump to v1.5.1 stable, fix for #176 (pyfa update breaks skeletons) 2014-10-01 17:43:54 -04:00
blitzmann
9b8c1ff3ba Bump dev cycle 2014-09-30 21:56:54 -04:00
blitzmann
3394fabfc8 Bump to stable version 2014-09-30 19:37:23 -04:00
blitzmann
1bdfd7f924 Those who keep up with dev branch had issues with new migrations. 2014-09-30 18:03:04 -04:00
blitzmann
b69a46f9b1 Update to Oceanus 1.0 2014-09-30 13:28:56 -04:00
blitzmann
c17579505c Merge branch 'singularity' 2014-09-30 13:28:08 -04:00
blitzmann
2f990b9de2 Add auto backup when migrating data 2014-09-30 13:20:51 -04:00
blitzmann
c9f33f200d Fix #119 2014-09-29 16:20:59 -04:00
blitzmann
4abde609d8 Remove old effects, and modify current effects using new header with real effect name 2014-09-29 14:20:12 -04:00
blitzmann
9c09cef783 Added option to automatically remove unused effects with --remove flag 2014-09-29 14:09:56 -04:00
blitzmann
7570fee97b Include real effect name in effect file comments to assist with debugging 2014-09-29 14:02:05 -04:00
blitzmann
22e8330045 Add Scram effect (does not include projection effects) 2014-09-29 13:43:21 -04:00
blitzmann
98c37a253f Fix background color on fleet view on Linux 2014-09-29 11:38:49 -04:00
blitzmann
a931d46cb0 Implement open fit context item for projected fits 2014-09-29 01:02:00 -04:00
blitzmann
f4de596193 Add Oceanus module conversions to market item overrides 2014-09-28 02:54:36 -04:00
blitzmann
973a081e8d Update to 829786 2014-09-28 02:08:33 -04:00
blitzmann
3054ac9d90 Introduce new migration procedure.
This creates a new migration module that include upgrade logic files, one file for each DB version. It should be noted that this will not support downgrades (the previous method didn't really support them either)
2014-09-28 00:14:10 -04:00
blitzmann
4ea2636788 Fix #171 2014-09-21 23:44:19 -04:00
Ryan Holmes
b5f2df58ce Merge pull request #168 from blitzmann/161-effDps
Implement effective DPS
2014-09-19 19:18:20 -04:00
blitzmann
6d15645198 Added some docs to chrome tabs, and removed / commented some slight redundancies as well as style tweaks 2014-09-19 00:07:55 -04:00
blitzmann
a1bd671d89 Give a bit more horizontal room for fleet view (more work needs to be done - looks like crap on gtk) 2014-09-19 00:05:27 -04:00
blitzmann
aba5d43fc7 Added some docs ChromeTabs and did some cleaning 2014-09-17 19:00:09 -04:00
blitzmann
c903dff8ad Removed debugging prints 2014-09-15 18:02:49 -04:00
blitzmann
35d5c49745 Allow us to select target resist after creating / renaming it 2014-09-15 16:11:30 -04:00
blitzmann
030e6aa9db Instead of sending id, send parent item (which contains ID). This allows us to access the item to modify bitmap or any other value for it. 2014-09-15 15:48:26 -04:00
blitzmann
cc770898d9 Fixes issue where cargo is not copied with fit 2014-09-14 17:46:14 -04:00
blitzmann
8e383a085e Enable Ctrl+Page(Up/Down) for fitting tab navigation 2014-09-13 00:32:00 -04:00
blitzmann
5fef07a552 Fix background color for empty fitting view on Linux (and osx?) 2014-09-13 00:14:30 -04:00
DarkPhoenix
72e272084e Fix #159
Added all new system-wide effects as postMul, removed penalty group for cases where in coincides with 'default' group (e.g. it's also postMul for turret damage mods)
2014-09-09 19:54:38 +04:00
Anton Vorobyov
a2499cc070 Merge pull request #160 from blitzmann/fix-159
Fixes for stacking penalties for various wormhole effects
2014-09-09 19:16:42 +04:00
DarkPhoenix
c262acd0dc RR drone rigs are penalized 2014-09-09 15:44:21 +04:00
blitzmann
da047106f3 Implements support for child menus for damage patterns. 2014-09-08 01:11:38 -04:00
blitzmann
c04bb8f82c Greatly simplified target resists menu logic. Also added active bitmap 2014-09-04 00:23:41 -04:00
blitzmann
bb16e649af Added message to damage profile export 2014-09-03 18:45:04 -04:00
blitzmann
035443b4ff We now use EFT-style import/exports for damage profiles.
Also, percentages now shown next to damage amount instead of foot (where notifications are going)
2014-09-03 14:56:44 -04:00
blitzmann
0e10ac3928 Damage Pattern editor cleanup / GUI improvements 2014-09-03 13:52:42 -04:00
blitzmann
f0473f1eab Added support to show errors for resist imports, as well as many improvements to GUI logic. 2014-09-03 12:52:05 -04:00
blitzmann
a95eabac7b TargetResists: drones work. Also cleaned up redundancy in module.damageStats() 2014-09-03 01:37:59 -04:00
blitzmann
1ab76a7170 Commit initial work for effect DPS / Target resists 2014-09-03 00:49:53 -04:00
blitzmann
53c4a31334 Fix Guided Missile Precision skill for Citadel missiles 2014-08-30 13:07:18 -04:00
blitzmann
f02be0b0fd Update Notifications: Sort release results by published date before iterating 2014-08-28 20:34:16 -04:00
blitzmann
0524b901f5 Fixes for stacking penalties for various wormhole effects 2014-08-27 23:12:30 -04:00
blitzmann
d5a701ab31 If in debug mode, open effect file when double clicking effect (windows only) 2014-08-27 21:29:04 -04:00
DarkPhoenix
55c7488a0d Update ship icons 2014-08-27 02:52:25 +04:00
DarkPhoenix
8c8cf05207 Add icons for AT12 prize ships and move them to limited issue category 2014-08-27 02:34:19 +04:00
DarkPhoenix
ab9822b37e Bump version to indicate next development cycle 2014-08-27 01:21:49 +04:00
DarkPhoenix
4e5f27a643 Bump version for stable release 2014-08-27 00:44:25 +04:00
DarkPhoenix
92c9e1afc3 Fix black hole missile velocity effect 2014-08-27 00:13:59 +04:00
DarkPhoenix
e6e503f9e8 Merge branch 'master' of github.com:DarkFenX/Pyfa 2014-08-27 00:03:18 +04:00
DarkPhoenix
578716767f Hide tournament MJU 2014-08-27 00:02:39 +04:00
blitzmann
ec083428da Fit search shortcut: Fix focus issues for Linux 2014-08-26 16:01:39 -04:00
DarkPhoenix
f57c18810e Fix broken refresh button in item stats view 2014-08-26 23:59:05 +04:00
DarkPhoenix
5d4c0b443e Added couple of vanity variations (which are not so vanity - their stats differ from original) to limited issue group 2014-08-26 23:20:23 +04:00
DarkPhoenix
b89f55c675 Remove obsolete scripts 2014-08-26 22:59:23 +04:00
DarkPhoenix
81d991b48d Update database to 820762 2014-08-26 22:57:48 +04:00
DarkPhoenix
944bc971bd Update chatroom to the one we're actually using 2014-08-26 22:53:48 +04:00
DarkPhoenix
cf44af3586 Merge branch 'master' into singularity 2014-08-26 22:47:50 +04:00
DarkPhoenix
3e70a6fd7c Fix #139 (Compare Charges mismatch) 2014-08-26 18:19:39 +04:00
blitzmann
59be18506c Added "Open in Ship Browser" to fitting context menu, and modified a bit of the history logic in shipBrowser. 2014-08-19 23:50:10 -04:00
Ryan Holmes
b1bf14de29 Merge pull request #155 from blitzmann/network
Network service, other things - Resolves #135
2014-08-19 16:50:32 -04:00
blitzmann
2dd8453bbb Give itemStat width more room on GTK, resolves #113 2014-08-19 16:22:37 -04:00
blitzmann
4e61d1b17a Update 818790 2014-08-19 09:00:54 -04:00
blitzmann
458e89a534 Fixes #154 2014-08-18 17:46:51 -04:00
blitzmann
493bf5cb0d Merge remote-tracking branch 'origin/master' 2014-08-18 01:24:04 -04:00
Ryan Holmes
0032163a38 Merge pull request #152 from DarkFenX/jams
Adds "Chance to Jam" to Sensor Strength tooltip, resolves #114
2014-08-18 01:20:06 -04:00
blitzmann
84ac71f528 Fixed bugs introduced from code consistency fix 2014-08-18 01:10:49 -04:00
blitzmann
e8041470c8 Remove / disable debugging prints 2014-08-17 23:40:22 -04:00
blitzmann
8928d394c0 Updates "update" prefs to reflect new changes 2014-08-17 23:27:07 -04:00
blitzmann
0881abae7b Moves price fetching to new service as well as removes old and defunct c0rporation price source (along with much of the price fetching logic used to support multiple sources) 2014-08-17 21:47:07 -04:00
blitzmann
0686b602c6 Adds network toggling to the preferences, as well as a few tweaks to network service 2014-08-15 01:00:31 -04:00
blitzmann
fa5edbb804 Fix reference to old eveapi 2014-08-14 22:52:55 -04:00
blitzmann
1279b20370 Some (bad) network error handling logic, borrowed from eveapi 2014-08-14 22:52:27 -04:00
blitzmann
ed1b9854a0 Modify eveapi to work with pyfa service, move all character API calls from EOS to Character service and use new network service 2014-08-14 11:44:50 -04:00
blitzmann
4fe80b7554 Implement new network service for: Updates, CREST. 2014-08-14 11:43:25 -04:00
blitzmann
a5773a3fd6 Update to eveapi 1.3.0, and move to service. 2014-08-14 01:59:03 -04:00
blitzmann
ca61be2476 Bump SISI version 2014-08-11 17:14:23 -04:00
Ryan Holmes
ae02e214f0 Add effects up to 8.47.816656 2014-08-11 21:06:09 +00:00
blitzmann
a0093d9760 Update to EVE 8.47.816656 2014-08-11 14:03:44 -04:00
blitzmann
11891340af Merge branch 'linux' 2014-08-11 13:31:35 -04:00
blitzmann
e60735a1f2 wxGTK itemStats Improvements: fixes button sizes, removes first column size on effects and increases second colum to prevent clipping
with window borders.
2014-08-11 02:15:34 -04:00
blitzmann
ce3772ecee Set a min size for character selection. This prevents the character selector from stretching the entire stats panel with long character names 2014-08-11 01:27:47 -04:00
blitzmann
9e5f119248 Reduces icon opacity of "Empty Groups" toggle dependant on filtering state. 2014-08-10 17:21:48 -04:00
blitzmann
1315f8d8ed Adds prices to Drone and Cargo bay. Also removed redundant and broken columns in drone bay 2014-08-08 10:46:58 -04:00
blitzmann
bec61e43ae Only do overload effect if not projecting (otherwise overload bonus is applied twice) 2014-08-07 23:09:03 -04:00
blitzmann
d29b4d91e9 Adds "Chance to Jam" to Sensor Strength tooltip 2014-08-07 22:47:59 -04:00
blitzmann
356c741e54 Fixes #151 2014-08-07 21:13:18 -04:00
blitzmann
04f52f1f86 Adds Deployables to market / search 2014-08-06 15:16:37 -04:00
blitzmann
c7042f314b Code consistency 2014-07-31 00:14:29 -04:00
blitzmann
dd27c3c805 Set files to 644 besides pyfa.py and scripts 2014-07-30 21:23:27 -04:00
Ryan Holmes
9685d15e61 Merge pull request #149 from blitzmann/issue-134
Introduces empty group filtering to ship browser: stage 1
2014-07-30 16:07:08 -04:00
blitzmann
b31d14158f Added caching to empty group filtering
Stage 2 now sums total fittings in category and sets the cache to True if t_fits > 0
Stage 3 sets the cache to True if number of fits for ship > 0. This takes care of creating new fits

If fit is deleted, and there are no other fits for the ship, it reverts back to stage 2, which should set the correct value in the cache
2014-07-30 16:00:38 -04:00
blitzmann
b3b62fcecc Introduces empty group filtering to ship browser stage 1 2014-07-30 00:40:55 -04:00
DarkPhoenix
51063ef758 Fix #144 (mindlink bonus is not applied anymore when SI link bonus is applied) 2014-07-27 12:10:50 +04:00
blitzmann
f406d7da09 Added keyboard shortcut to toggle search box in market and ship browser 2014-07-24 22:37:20 -04:00
blitzmann
4f64ae9f85 Added "Last Updated" stat to HTML export, resolves #128 2014-07-23 23:04:02 -04:00
blitzmann
bdfa46cea2 Bump to dev version 2014-07-22 20:36:37 -04:00
blitzmann
693d213ec1 Update to Crius 1.0 2014-07-22 14:08:59 -04:00
blitzmann
c76e4c8220 Fix #137 - TP and Webs affect DPS in graph 2014-07-21 15:57:00 -04:00
blitzmann
979539cb79 Fix #141 - Triage stacking not applying to shield boosts 2014-07-21 12:20:55 -04:00
DarkPhoenix
009956c301 Fix mistype in heron name and paste proper iteron V name 2014-06-19 23:29:51 +04:00
blitzmann
0b64dad408 Merge pull request #125 from akosiaris/damagetypesimport_blankline_fix
Fix blank lines in damage types import
2014-06-14 22:55:23 -04:00
blitzmann
032204bd53 Fix subsystem exports, resolves #130 2014-06-14 22:44:23 -04:00
blitzmann
55847adb41 Merge branch 'akosiaris_miningyeild' 2014-06-12 19:22:50 -04:00
blitzmann
e2abc51bbf Use small icon with mining yield / firepower toggle button 2014-06-12 19:22:29 -04:00
blitzmann
15ac9aca18 Use # charges instead of # shots when exporting loaded charges. Fixes #115 2014-06-12 01:59:44 -04:00
blitzmann
9cc70fd301 Bump to dev version 2014-06-12 01:59:34 -04:00
blitzmann
1cae335f65 Bump version 2014-06-11 19:15:14 -04:00
blitzmann
3c5538109d Instead of passing fitID to export service, pass the fit itself. Fixes #122 2014-06-11 18:56:40 -04:00
Alexandros Kosiaris
9de7585d33 Fix blank lines in damage types import
If the text variable contains blank lines like for example ending with a
newline character or having two consecutive newline characters the
fields dict is empty and DamagePattern fails with an Exception.

This closes #124
2014-06-11 11:02:58 +03:00
blitzmann
23044b5cdb Resolves #117 2014-06-06 21:31:08 -04:00
blitzmann
dea6ced052 Fixes #118 2014-06-05 15:07:13 -04:00
DarkPhoenix
c584d668b7 Bump version number for dev release 2014-06-04 01:42:38 +04:00
DarkPhoenix
3c6850fe7a Bump version info 2014-06-03 22:52:03 +04:00
DarkPhoenix
e3590f8d16 Fix one of the red giant duration heat effects 2014-06-03 22:48:50 +04:00
DarkPhoenix
5a586c5632 Mention cnc as founder in about window 2014-06-03 22:45:46 +04:00
DarkPhoenix
a946c9c9ed Merge branch 'master' into singularity 2014-06-03 00:36:13 +04:00
Anton Vorobyov
2ea0c57be5 Merge pull request #99 from blitzmann/issue-63
Fixes #63
2014-06-03 00:34:58 +04:00
DarkPhoenix
dcd2cdeddc Fix couple of ewar link effects, add missing SBA heat effect 2014-06-03 00:04:30 +04:00
Alexandros Kosiaris
bd60733bfe Use a button to toggle between firepower/miningyield
Introduce a button on both firepowerViewFull and miningyieldViewFull
views that allows switching between the two. Work by destroying each
view and recreating/populating on every button press.
2014-06-02 19:46:45 +03:00
blitzmann
5a1e39180a Set rack separation/labels and compact needed skills as default
Also refresh fit after modifying compact skills to take affect immediately.
2014-06-02 09:32:59 -04:00
DarkPhoenix
18385584bf Merge branch 'master' into singularity 2014-06-02 00:13:33 +04:00
DarkPhoenix
7d58b2caa1 Show additional cargo parameters in panel and tooltip. Closes #111 2014-06-02 00:12:11 +04:00
DarkPhoenix
08f22172a6 Merge branch 'master' into singularity 2014-06-01 21:31:50 +04:00
DarkPhoenix
88344dcfdc Disable change affecting skills menu for now 2014-06-01 21:18:41 +04:00
DarkPhoenix
4ea69201ea Remove debugging print 2014-06-01 19:09:30 +04:00
Anton Vorobyov
07692584cf Merge pull request #110 from blitzmann/issue-101
Add "Change affecting skill" context menu, resolves #101
2014-06-01 19:06:19 +04:00
DarkPhoenix
96707275be Add new overrides to the list 2014-06-01 17:21:11 +04:00
DarkPhoenix
239fec48e8 Merge branch 'master' into singularity 2014-06-01 17:04:52 +04:00
DarkPhoenix
6fc2cfff71 Unknown for DB items are fetched as None; make sure service doesn't fail in this case 2014-06-01 16:58:42 +04:00
Anton Vorobyov
faff60c5e0 Merge pull request #97 from blitzmann/issue-67
Fixes #67
2014-06-01 16:51:09 +04:00
DarkPhoenix
9a51d1fe3c Update db to 792006 and add new ship icons 2014-05-31 23:34:12 +04:00
DarkPhoenix
8313fa03b8 Rerun 'used by' script and remove unused effects 2014-05-31 22:13:59 +04:00
DarkPhoenix
665a1c473c Add more effects for new items 2014-05-31 22:02:41 +04:00
DarkPhoenix
c9dca6cd2a Implement remaining changes - besides new modules and ships 2014-05-31 19:16:15 +04:00
DarkPhoenix
7b3e0fe3b0 Barge, freighter and phoenix changes 2014-05-31 17:46:53 +04:00
DarkPhoenix
8ea4ef1b44 Implement DST changes 2014-05-31 02:30:38 +04:00
DarkPhoenix
933fbb26d7 Implement pirate ship updates 2014-05-30 02:21:29 +04:00
blitzmann
de9ae5c78c Ensure that we load all skills for a character and some minor tweaks. 2014-05-29 12:59:53 -04:00
blitzmann
0d1c7b93be Add icons to skill context menu 2014-05-28 22:32:23 -04:00
Alexandros Kosiaris
d08b1c8284 Calculate mining yields for module/drone
Following the weaponStats paradigm, add mining yield information
throughout the drone/module modules
2014-05-28 17:47:25 +03:00
Alexandros Kosiaris
28cfaf1702 Add mining yield view
Add a panel for displaying the mining yield. Display miner and drone
yield. Only create the frontend in this commit.
2014-05-28 17:47:25 +03:00
blitzmann
749934b89d Fix #106 2014-05-27 19:35:51 -04:00
blitzmann
1c84e9dc4b Added default value for used parameter 2014-05-27 16:29:22 -04:00
blitzmann
df046769ff Add GUI support for changing affected skills 2014-05-27 16:26:14 -04:00
DarkPhoenix
ae386cae4e Fix broken names in database 2014-05-27 12:48:59 +04:00
DarkPhoenix
d2635d6405 Update database to 788467 2014-05-26 02:17:24 +04:00
blitzmann
45fca2a87d All things that can affect attribute from current fit/ships is included in modifiedAttributeDict.
The previous method was to only add those that change a value. This adds things can can affect it, and then pass a new `used` flag to the dict to show if it's used or not.
2014-05-25 14:48:40 -04:00
blitzmann
f1f9da9214 Merge branch 'issue-102', resolves #102 2014-05-25 10:14:13 -04:00
blitzmann
a1416e6bec Improves on fit loading on startup by only calculating the last fit that is opened.
Issue with FittingView.MakeSnapshot() need an exception catch.
2014-05-25 02:55:28 -04:00
blitzmann
2d82eb7c92 Add thread for opening fits on startup, which allows us of wait dialog
Wait dialog doesn't actually move as the GUI thread is locked when opening the fits, but at least it shows that -something- is happening.
2014-05-24 22:20:26 -04:00
blitzmann
9a2408741e Feature: reopen previous fits on startup 2014-05-23 21:31:36 -04:00
blitzmann
b7e2b62562 Improved fitting window import; revert addition of staticmethod's in fit service 2014-05-23 18:58:09 -04:00
blitzmann
fbc336b038 Moved item override and fit porting to services.
Also sprinkled static methods around Fit service and other PEP8 goodness because why not.
2014-05-22 21:00:42 -04:00
DarkPhoenix
9dea4a26bf Remove nos immunity from ewar immune ships as well 2014-05-22 01:05:35 +04:00
Anton Vorobyov
0ea8a7a921 Merge pull request #77 from blitzmann/issue-69
Fix #69 - Neut on triage/siege/bastion

Not all exclusions are added, i will add the rest in later commits.
2014-05-22 00:45:14 +04:00
blitzmann
0bf956e9b3 Add support for explicitly converting items to another. 2014-05-20 12:46:19 -04:00
blitzmann
3bd66f174d Added skill prereq tooltip compact option to preferences 2014-05-18 01:45:28 -04:00
blitzmann
4f38d71676 Create compact skill requirement list
I probably could have worked this into the existing function instead of creating a new one if I thought about it, but meh.
2014-05-18 00:38:10 -04:00
blitzmann
493294e648 Update "Import Character" label to be less ambiguous 2014-05-16 00:27:24 -04:00
Anton Vorobyov
2a12e4c566 Merge pull request #85 from blitzmann/issue-84
Fix #84 - Bug with projected mods on projected ships
2014-05-16 00:21:13 +04:00
blitzmann
b75c86d251 Ignore Orbital ammo in ammo picker - see #71 2014-05-15 11:44:09 -04:00
blitzmann
a148a6d818 Added some bulk to PFStaticText to allow for more refined layout of text. Will probably increase font size later (it's so teeny!)
(cherry picked from commit 4f0c246e80a6d245bd9bd6be0dc0c0f995e2ae80 branch `tag`)
2014-05-15 01:08:19 -04:00
blitzmann
ee8f514266 Removed debug statement. 2014-05-15 00:47:41 -04:00
blitzmann
8a0778662f Fixes refresh issue with importing from fitting window into empty fit.
This removes a conditional that makes sure we don't fire the FitSelected event if the active fit is same as imported fit. Removing this, to my knowledge, has no adverse effects because when importing we *always* create a new fit (with the exception of the new fitting window import) and thus this conditional is not needed.
2014-05-14 23:44:44 -04:00
blitzmann
f9c141fa25 Adds import support for fitting window copy. Resolves #91
This requires us to pass an active fit to use as a base for the modules, as the format does not include ship information. Features:
* If active fit has modules, makes a new fit using same ship
* Does basic dummy checking. As the format doesn't include ship info, it will probably be common for someone to accidentally try to import a Legion fit to a Rifter by mistake. Import logic checks module legality for fit and, if fails, silently halts import without saving.
2014-05-14 23:39:47 -04:00
blitzmann
b783f0641c Load fleet data of projected fits 2014-05-10 22:49:12 -04:00
blitzmann
a0c1686ac5 Pass withBoosters to projected fits (to flag booster calculation) 2014-05-10 22:48:43 -04:00
blitzmann
af325caecc Fix order of operations (boosting not applied to modules of projected fits) 2014-05-10 22:47:42 -04:00
blitzmann
60a786a6a2 Fix boosting as it related to projected fits (was boosting target fit rather than current fit) 2014-05-10 22:46:25 -04:00
blitzmann
40c1bc8ae6 Added cargo gauge to resources and ability to toggle 2014-05-08 13:58:40 -04:00
blitzmann
6992537750 Fix regression 2014-05-07 17:44:47 -04:00
blitzmann
a604093387 Merge branch 'cargoDrag' - adding improved drag/drop functionality.
fittingView was the only real view that had drag and drop, and that was to support module swapping. I tweaked the dragged data to include source so that other Views can use it. Supported drag/drop:

* Copy / Move / Swap module from fitting to cargo
* Drag market items to fitting and other views
* Probably more that I cannot remember
2014-05-07 17:27:14 -04:00
blitzmann
d9e61a3305 Improved on drag/drop for cargo and fitting views. Can now copy rather than swap 2014-05-07 17:18:01 -04:00
blitzmann
0c42848d52 Fix recalc after module clone. Enforce module restrictions. 2014-05-07 15:53:03 -04:00
blitzmann
294f51ae5d Add support for drag and drop between pyfa displays which explicitly support it (some other tweaks as well) 2014-05-07 11:21:50 -04:00
blitzmann
ecd82ac7a4 Merge branch 'cargo' 2014-05-06 01:00:58 -04:00
blitzmann
5395c04b18 Fix issue with EFT .cfg importing
(cherry picked from commit d05b78a451)
2014-05-04 19:18:34 -04:00
blitzmann
d05b78a451 Fix issue with EFT .cfg importing 2014-05-04 19:16:00 -04:00
blitzmann
19f0bbc811 Add cargo support to XML, DNA, EFT import/export 2014-05-04 19:15:25 -04:00
blitzmann
ac144e51e0 Fix tooltips 2014-05-04 17:13:11 -04:00
blitzmann
f7ef3705b5 Added available cargo to capacity tooltip and cargo volume column 2014-05-04 11:35:13 -04:00
blitzmann
8e9ea0a36b Allow any item to be added to cargo (allows to distribute "refits" with fit) 2014-05-03 21:21:21 -04:00
blitzmann
89a8bde574 Merge branch 'master' into cargo
Conflicts:
	eos/saveddata/fit.py
2014-05-03 20:46:32 -04:00
blitzmann
2651a04880 Refresh active fit upon fit deletion (deleted fit may have been projected) 2014-05-03 01:21:45 -04:00
blitzmann
197a61253f Better way to fix deletion of projection relationships 2014-05-03 00:42:08 -04:00
blitzmann
fb9da5ec8d Revert "Create new Fit relationship with fits that current fit is projected onto (see #90)"
This reverts commit a2727d5f47.
2014-05-03 00:40:13 -04:00
blitzmann
a2727d5f47 Create new Fit relationship with fits that current fit is projected onto (see #90) 2014-05-01 22:08:27 -04:00
blitzmann
0c40aa7244 Merge branch 'about' 2014-04-30 13:13:30 -04:00
blitzmann
234af1ac3d Fix #86 - Importing EFT with cargo 2014-04-30 12:57:00 -04:00
blitzmann
fb1323ba17 Fix #87 - enforce proper Item in Ship.__init__ 2014-04-30 11:52:56 -04:00
blitzmann
38bd33dce4 Fix incorrect indentation which caused improper XML import processing 2014-04-30 10:44:06 -04:00
blitzmann
d32407b9f8 Removed problematic conditional sending projected fit to the wrong path 2014-04-27 01:35:57 -04:00
blitzmann
83c0bbe37b Fix #82 2014-04-24 00:12:10 -04:00
blitzmann
1fea4e5876 Adds missing icons 2014-04-23 23:30:07 -04:00
blitzmann
1fe19c4853 Merge pull request #81 from blitzmann/issue-80
Fix #80
2014-04-23 10:44:15 -04:00
Ryan Holmes
d9653ea43c Redundancy 2014-04-23 10:39:36 -04:00
Ryan Holmes
943ddd3da1 Add loaded charges to XML export 2014-04-23 01:14:35 -04:00
Ryan Holmes
08573899d3 Removes "res:/UI/Texture/Icons/....png" from iconFile 2014-04-23 00:34:54 -04:00
blitzmann
e873f1b88e Include loaded charges from modules in DNA export
https://forums.eveonline.com/default.aspx?g=posts&m=4498408#post4498408
2014-04-22 02:04:15 -04:00
blitzmann
6dc4161a36 Fix #69 2014-04-14 22:14:06 -04:00
blitzmann
507c423e09 Fix #73 2014-04-11 21:44:11 -04:00
blitzmann
631d97e21a Fix #71 2014-04-08 12:48:58 -04:00
blitzmann
23e6331909 Some Mac love, and added missing accelerator for fleet pane (set as CTRL+5) 2014-04-03 19:44:03 -04:00
blitzmann
9bbe7f7fb0 Tweak to HTML export - have ship group link to fit if only 1 fit exists 2014-03-31 00:18:22 -04:00
blitzmann
5df7e193e7 Cargo works, but needs a more TLC 2014-03-30 17:12:32 -04:00
blitzmann
e87ac96c6c Fix incorrect variable order 2014-03-30 17:12:13 -04:00
blitzmann
795724cbe1 Merge branch 'charImprovements' 2014-03-27 22:50:38 -04:00
blitzmann
3cfa1c0822 Layout tweaks 2014-03-27 22:50:21 -04:00
blitzmann
4faa2abe96 HTML can now be manually called. "Enabled" now refers to "Enable Automatic". Also, fixed nagging typo. ("HTMl" lol) 2014-03-27 22:15:34 -04:00
blitzmann
890ff55690 Support CREST kill URL 2014-03-27 18:55:33 -04:00
blitzmann
73a67d0fc3 Merge branch 'master' of https://github.com/DarkFenX/Pyfa 2014-03-27 18:36:33 -04:00
blitzmann
8fad69c344 Update readme.txt 2014-03-27 18:36:18 -04:00
blitzmann
76b6fb5898 Added support for importing killmails copied from chat channel 2014-03-27 13:44:52 -04:00
blitzmann
641f5999f0 Tweak rack labels 2014-03-26 14:18:40 -04:00
blitzmann
47ef37274b Don't attempt to remove a Rack module 2014-03-25 23:45:23 -04:00
blitzmann
264824e7de Removed old @todo's, and OnSelection function - apparently you cannot change selection color :( 2014-03-25 23:29:21 -04:00
blitzmann
fe824943e4 Reel in # of digits for align time tooltip 2014-03-25 23:11:27 -04:00
blitzmann
eb571b3ab3 Merge branch 'master' of https://github.com/DarkFenX/Pyfa 2014-03-25 23:03:03 -04:00
blitzmann
5e464bfcf8 Fix rack labels for t3 cruisers, racks are now bolded without the ugly bug from before. 2014-03-25 22:59:38 -04:00
blitzmann
5df3672adf Fix for text style when turning rack labels on/off in preferences. Disabled bolding of label, as font does not work correctly at the moment. 2014-03-25 21:45:36 -04:00
blitzmann
d5e8938c70 Merge pull request #65 from atwardowski/patch-1
More precision in align time tooltip
2014-03-25 13:20:35 -04:00
blitzmann
1f37656169 Added option to show rack labels 2014-03-25 12:43:15 -04:00
Adam Twardowski
3a05abe490 More precision in align time tooltip 2014-03-25 12:33:09 -04:00
blitzmann
c3ce580b8c Rename DummyModule to Rack 2014-03-25 01:11:23 -04:00
blitzmann
47c46cc9c5 Added copy module by drag/drop module while holding Ctrl key. This has been planned since 2011 according to blame. =D 2014-03-25 00:33:40 -04:00
blitzmann
7a2ddad70c Fixes long-standing issue with swapping modules and modifying position on rack. Also, don't color rack dividers. 2014-03-25 00:24:52 -04:00
blitzmann
2f90ac64ec Refactor how rack separation works 2014-03-24 19:04:11 -04:00
blitzmann
e23ad7b002 Muted slot colors (previous colors were very strong). Think about moving these to prefs 2014-03-24 12:49:09 -04:00
blitzmann
b98edc3f65 Fix and implement preferences 2014-03-24 12:23:22 -04:00
blitzmann
22f92bed24 Fixed nagging bug about extra slots, more tweaks 2014-03-24 00:17:20 -04:00
blitzmann
cbea2dd55a Create mapping of external -> internal indices 2014-03-23 01:31:02 -04:00
blitzmann
26846fd102 Preference UI support for slot divisions 2014-03-23 00:53:09 -04:00
blitzmann
004f9cb062 Preliminary support for slot dividers. Extremely buggy. 2014-03-23 00:47:06 -04:00
DarkPhoenix
2903c7e0ca Do not penalize effects modifying structure resistance 2014-03-20 22:47:42 +04:00
DarkPhoenix
e00941b2c5 Do not penalize siege module bonus 2014-03-18 22:02:19 +04:00
blitzmann
ffaa707ea9 Fix #62 2014-03-17 18:13:29 -04:00
blitzmann
7337d54511 Added fit import from copied eve chat 2014-03-16 23:57:52 -04:00
blitzmann
dd395aff03 Dev version 2014-03-15 23:40:33 -04:00
DarkPhoenix
4a41638472 Update to rubicon 1.3 2014-03-15 17:33:45 +04:00
blitzmann
50fbda288a Open fits at null-sec.com if not in IGB 2014-03-13 22:06:14 -04:00
blitzmann
7a33aba329 Finished visual improvements to the HTML export and removed debugging statements 2014-03-13 00:14:57 -04:00
blitzmann
ec7a58c592 Update jQuery mobile and add ship group heading. 2014-03-12 18:40:53 -04:00
blitzmann
9ac11f9a7c Quick fix for issue 55 2014-03-11 23:38:01 -04:00
blitzmann
4bcb368d17 More about box changes 2014-03-11 21:49:50 -04:00
blitzmann
f42fd1de43 Tweaks to about box, including adding my name as developer 2014-03-11 21:34:19 -04:00
DarkPhoenix
63a088631d Fix #54 2014-03-12 01:04:02 +04:00
DarkPhoenix
4fa585046f Fix potential crash on ansi + unicode concatenation 2014-03-12 00:24:29 +04:00
DarkPhoenix
f90983b541 Fix for #57 2014-03-11 23:40:28 +04:00
Anton Vorobyov
5095ac4881 Merge pull request #60 from bmonty/master
Update .gitignore
2014-03-11 22:23:45 +03:00
DarkPhoenix
c01450d1a1 Expand path for database conversion script 2014-03-11 23:17:10 +04:00
blitzmann
3718d20361 Probably best to generalize. Changed user guide to wiki. 2014-03-10 23:34:00 -04:00
blitzmann
1d66757b28 Added some help menu options the point to external resources 2014-03-10 19:08:06 -04:00
blitzmann
9e67ad032c Removed print debugging. 2014-03-08 22:51:45 -05:00
blitzmann
06bd15079d Improvements to update logic 2014-03-08 22:39:29 -05:00
Benjamin Montgomery
7e59b2d43a Update .gitignore
Ignore the fits html file.
2014-03-08 07:48:14 -10:00
blitzmann
4430204227 Merge branch 'prefs' 2014-03-07 21:36:31 -05:00
blitzmann
652e0738af Rename GlobalPreferences to GeneralPreferences 2014-03-07 21:28:58 -05:00
blitzmann
e6bc831305 Added static line under pref page title 2014-03-07 20:57:39 -05:00
blitzmann
513a02a4d4 Merge branch 'master' into prefs 2014-03-07 20:48:27 -05:00
blitzmann
f355dac322 Dev versioning 2014-03-04 14:35:00 -05:00
blitzmann
85f632bd20 Fixed infinite loop 2014-03-04 14:33:48 -05:00
blitzmann
4f4829ebb4 Spaced API information 2014-03-04 14:01:30 -05:00
blitzmann
cb0a5ded49 Merge pull request #53 from blitzmann/fleet
Fleet booster refactoring
2014-03-03 18:48:36 -05:00
blitzmann
bf1df97886 Expand fit choice to available space 2014-03-03 11:38:22 -05:00
blitzmann
b320c6ae77 Merge branch 'master' into fleet 2014-03-03 11:20:06 -05:00
blitzmann
9d2eee3b01 Removing sizing hack now that dialog sizing is correct 2014-03-03 11:19:32 -05:00
blitzmann
9b096524cc Updated update preference view with new icon and text wrapping 2014-03-03 01:53:55 -05:00
blitzmann
35a0b0ce4b Fix for PreferenceDialog sizing issues 2014-03-03 01:52:57 -05:00
blitzmann
5d75b2bd6d Merge branch 'master' into prefs 2014-03-02 23:55:46 -05:00
blitzmann
83cc3fd28a Merge pull request #47 from blitzmann/onlUpdate
Update notifications
2014-03-02 23:45:43 -05:00
blitzmann
2d69705469 Added date in update message 2014-03-02 23:42:16 -05:00
blitzmann
2ff6ecdbec Fixed settings for prerelease suppression 2014-03-02 22:55:11 -05:00
blitzmann
25c9bfe4d4 Check to see if release version is actually higher than current version (shouldn't really happen, but who knows) 2014-03-02 22:45:18 -05:00
blitzmann
91b2eff7b4 Added proxy icon, removed help text for global char and profile options 2014-03-02 22:23:49 -05:00
blitzmann
ea3969e1e3 Show preference pages in the order they appear in builtinPreferenceViews 2014-03-02 20:02:36 -05:00
blitzmann
cd5d047891 Use .Wrap() and the dialogs width to set appropriate sizer of large text 2014-03-02 19:54:35 -05:00
blitzmann
34f27f7995 Do not commit saved data 2014-03-02 17:51:48 -05:00
blitzmann
752b1fe726 Merge pull request #56 from blitzmann/issue52-ghosting
Fix issue #52 - slot ghosting
2014-03-02 17:35:22 -05:00
blitzmann
281e591984 Split general and proxy settings. Added some help text (not currently displayed). Dialog sizing needs to be addressed 2014-03-02 17:28:25 -05:00
blitzmann
b686aa6d0b Merge pull request #49 from blitzmann/searchfix
Fixed issue #48
2014-03-02 17:20:52 -05:00
blitzmann
035e6cea41 Fixes incorrect setting of draggedFitID when selecting booster from menu 2014-02-26 00:32:07 -05:00
blitzmann
5aa34caca6 Help message in fleet window 2014-02-26 00:07:51 -05:00
blitzmann
4fdd3f177a Applying appropriate icons 2014-02-25 23:54:27 -05:00
blitzmann
0826aa4bfe Fix for issue 52 2014-02-24 21:58:42 -05:00
blitzmann
5869fe6d97 Added booster icon
This is technically a button, and acts like a button without a function. Must look into making it a proper icon and not a button.
2014-02-24 03:02:14 -05:00
blitzmann
e877cef3a9 Revert "Added icon to show boosting fits."
This reverts commit f7fdcfcd4e.
2014-02-24 03:00:06 -05:00
blitzmann
f7fdcfcd4e Added icon to show boosting fits. 2014-02-24 02:34:05 -05:00
blitzmann
c6ad328e99 Changed "Set Booster Fit" option to a boolean menu item with fancy checkbox. 2014-02-24 00:56:04 -05:00
blitzmann
d8dfafedfa Refactoring of code, along with general housekeeping. Also, character menu is now disabled with no fit selected. 2014-02-24 00:55:25 -05:00
blitzmann
65cc0bec1c Fixed style issue that caused content to move when switching between choice and static text 2014-02-23 22:20:22 -05:00
blitzmann
c34215f9e3 Got rid of UpdateFleetFitsUI and baked it's functionality into fitSelected; now supports dragging/setting via right click. 2014-02-23 22:18:58 -05:00
blitzmann
354b732c2c Fit choice works and is properly applied. Dragging and setting via context from ship browser does not. 2014-02-22 21:11:59 -05:00
blitzmann
b910982994 Bug fix and more work 2014-02-22 01:14:33 -05:00
blitzmann
f2c1002d58 Fixes bug with fit copy.
`copy.deepcopy` was not copying the booster property of the fit for whatever reason - I blame my poor understanding of copy.
2014-02-22 00:52:29 -05:00
blitzmann
50ce4d37aa GangView is not aware of changes to booster fits 2014-02-21 21:50:18 -05:00
blitzmann
46662d2b72 Added getFitsWithBooster query 2014-02-21 21:47:10 -05:00
blitzmann
7579f3c3e1 Fixed cases where fit.booster column might contain null instead of bool 2014-02-20 23:56:50 -05:00
blitzmann
3842913fe1 Added booster fit toggling in database, menu label toggling, and migration code 2014-02-20 23:26:26 -05:00
blitzmann
aaadcb9b45 Add "Flag as Booster" item to fitting menu 2014-02-20 00:57:12 -05:00
blitzmann
29fc82b771 Semantics. Tweaking working not better represents that pre-release notification is opt-in. Thanks Andro! 2014-02-18 02:04:07 -05:00
blitzmann
48963167fe Reverts previous commit and introduces better way to filter ships 2014-02-17 23:29:02 -05:00
blitzmann
4095365518 Hotfix for issue #48 2014-02-17 22:44:40 -05:00
DarkPhoenix
acdc2c496e Bump veersion to 1.1.21 2014-02-17 23:50:12 +04:00
blitzmann
26b078b69f Tweaking label of update preferences 2014-02-17 11:30:04 -05:00
blitzmann
9c792fc9a7 Pre-release notifications suppressed by default 2014-02-16 18:09:49 -05:00
DarkPhoenix
c7944e91e7 Do not choke on renamed items 2014-02-16 22:42:43 +04:00
DarkPhoenix
9e389f27b0 Skip charges in EVE XML exports 2014-02-16 22:38:18 +04:00
Anton Vorobyov
eef34f1dcf Merge pull request #46 from blitzmann/master
Fixes stats relating to the Capital Capacitor Emission Systems skill
2014-02-16 21:11:09 +03:00
DarkPhoenix
c1ea161060 Rework traits support. Also support getting traits out of the client via phobos 2014-02-16 22:06:54 +04:00
Anton Vorobyov
b4aca7ae90 Merge pull request #41 from cl05tomp/master
Added new traits tab to Ship Basic Stats window
2014-02-16 19:20:53 +03:00
blitzmann
c0b4e73629 Added logic for notification suppression, along with other tweaks. Did not worry too much on how to handle pre-releases. 2014-02-16 01:26:13 -05:00
blitzmann
024637432c Added settings for update notification suppression. 2014-02-15 21:58:48 -05:00
blitzmann
7ced595cca Custom dialog implemented. 2014-02-15 00:55:04 -05:00
blitzmann
4a7782a713 Fixes stats relating to the Capital Capacitor Emission Systems skill 2014-02-14 22:36:11 -05:00
blitzmann
d7dda83314 More work on update notification. Displays debug popup now. 2014-02-13 22:52:36 -05:00
blitzmann
6ee474a8ff Started work on update notification. Successfully prints out alert to stdout if version from GitHub is not the same as internal version. 2014-02-13 22:28:56 -05:00
Carl Tompkins
2e9680191b Added new traits tab to Ship Basic Stats window 2014-02-06 19:22:47 -05:00
DarkPhoenix
d7b7d127b8 Bump version to 1.1.10 2014-01-30 12:24:23 +04:00
DarkPhoenix
2096b7641f Merge branch 'singularity' 2014-01-30 12:18:48 +04:00
DarkPhoenix
2b83d17bd2 Update version tag 2014-01-29 23:30:17 +04:00
Anton Vorobyov
d7e880c42b Merge pull request #34 from reactormonk/master
print() so python3 actually prints the error
2014-01-29 11:27:16 -08:00
Simon Hafner
e17c0610fb print() so python3 actually prints the error 2014-01-29 13:21:53 -06:00
DarkPhoenix
98e9ab461a Update database to 709728 2014-01-29 23:17:59 +04:00
DarkPhoenix
a833b2f5cc Revert change to pyfa path. Customization is provided via configforced.py module 2014-01-29 21:45:43 +04:00
Anton Vorobyov
9076175b0c Merge pull request #33 from blitzmann/master
Fix for savePath config
2014-01-29 08:33:01 -08:00
Anton Vorobyov
a9843b637a Merge pull request #32 from lydia/master
Fixed issue when running pyfa.py through a symlink
2014-01-29 08:23:52 -08:00
blitzmann
b9ffe18775 Fix for savePath config 2014-01-28 13:14:33 -05:00
Lydia Fernandez
6728121f9f Added a call to os.path.realpath() when creating pyfaPath to properly resolve symlinks. Also added a few linebreaks 2014-01-25 19:30:56 -05:00
DarkPhoenix
98850bfc1d Update to SiSi 703519 2014-01-22 23:51:42 +04:00
DarkPhoenix
a5f821850b Update scripts to be aware of latest phobos changes 2014-01-21 23:35:04 +04:00
DarkPhoenix
d97764586f Re-publish festival items 2014-01-21 23:31:18 +04:00
DarkPhoenix
3cd80b4dfe Merge branch 'master' of github.com:DarkFenX/Pyfa 2014-01-10 22:17:52 +04:00
Anton Vorobyov
97548212b5 Merge pull request #30 from alexjurkiewicz/master
Improve market search
2014-01-10 09:50:00 -08:00
Alex Jurkiewicz
7986177a16 Change market search from substring to tokenised substring 2014-01-08 17:53:33 +11:00
Alex Jurkiewicz
82733a81c8 limit searchItems returned list size to 100 2014-01-08 17:42:47 +11:00
DarkPhoenix
20cb2ca7d4 Revert tag 2013-11-21 22:52:08 +04:00
DarkPhoenix
3b13b42bdf Bump version 2013-11-21 22:35:07 +04:00
DarkPhoenix
09374f1643 Add missing paladin optimal effect 2013-11-21 22:31:37 +04:00
DarkPhoenix
388c3c8bf1 Add missing Kronos falloff effect 2013-11-20 22:17:09 +04:00
DarkPhoenix
24df54723f Revert tag in config file 2013-11-19 23:25:04 +04:00
2754 changed files with 16211 additions and 6626 deletions

8
.gitignore vendored
View File

@@ -11,4 +11,12 @@
#Patch files
*.patch
#Personal
saveddata/
#PyCharm
.idea/
#Pyfa file
pyfaFits.html

22
README.md Normal file
View File

@@ -0,0 +1,22 @@
# Pyfa
Pyfa is a cross-platform desktop fitting application for EVE online that can be used natively on any platform where python and wxwidgets are available.
It provides many advanced features such as graphs and full calculations of any possible combination of modules, fits, etc.
Please see the [FAQ](https://github.com/DarkFenX/Pyfa/wiki/FAQ) for answers to common questions / concerns
#### A note for Linux users
pyfa currently only supports wxPython 2.8. However, there are some distros that have started to support 3.0 and subsequently dropped support for 2.8 altogether (such as Debian Jessie). If this is the case and wxPython 3.0 is the only version installed, the official pyfa releases will not run. You must either find a package for 2.8 or compile it yourself.
For Debian Jessie, wxPython 2.8 is available in Sid (the unstable repo). you can use apt-pinning to install select packages from unstable and still keep your stable system. See http://jaqque.sbih.org/kplug/apt-pinning.html for me details.
3.0 support is being worked on and can be found on the wx3 branch. It may be stable enough for you, but there are a few bugs related to it. Please see the wx3 label on the GitHub issues area for me information on known issues (biggest one currently is GTK warning spam): https://github.com/DarkFenX/Pyfa/labels/wx3
#### Links
* [Development repository: http://github.com/DarkFenX/Pyfa](http://github.com/DarkFenX/Pyfa)
* [XMPP conference:
pyfa@conference.jabber.org](pyfa@conference.jabber.org)
* [EVE forum thread](http://forums.eveonline.com/default.aspx?g=posts&t=247609)
* [EVE Online website](http://www.eveonline.com/)

201
config.py
View File

@@ -1,83 +1,118 @@
import os
import sys
# Load variable overrides specific to distribution type
try:
import configforced
except ImportError:
configforced = None
# Turns on debug mode
debug = False
# Defines if our saveddata will be in pyfa root or not
saveInRoot = False
# Version data
version = "1.1.17"
tag = "Stable"
expansionName = "Rubicon"
expansionVersion = "1.0"
evemonMinVersion = "4081"
pyfaPath = None
savePath = None
staticPath = None
saveDB = None
gameDB = None
def defPaths():
global pyfaPath
global savePath
global staticPath
global saveDB
global gameDB
global saveInRoot
# The main pyfa directory which contains run.py
# Python 2.X uses ANSI by default, so we need to convert the character encoding
pyfaPath = getattr(configforced, "pyfaPath", None)
if pyfaPath is None:
pyfaPath = unicode(os.path.dirname(os.path.abspath(sys.modules['__main__'].__file__)), sys.getfilesystemencoding())
# Where we store the saved fits etc, default is the current users home directory
if saveInRoot is True:
savePath = getattr(configforced, "savePath", None)
if savePath is None:
savePath = os.path.join(pyfaPath, "saveddata")
else:
savePath = getattr(configforced, "savePath", None)
if savePath is None:
savePath = unicode(os.path.expanduser(os.path.join("~", ".pyfa")), sys.getfilesystemencoding())
# Redirect stderr to file if we're requested to do so
stderrToFile = getattr(configforced, "stderrToFile", None)
if stderrToFile is True:
if not os.path.exists(savePath):
os.mkdir(savePath)
sys.stderr = open(os.path.join(savePath, "error_log.txt"), "w")
# Same for stdout
stdoutToFile = getattr(configforced, "stdoutToFile", None)
if stdoutToFile is True:
if not os.path.exists(savePath):
os.mkdir(savePath)
sys.stdout = open(os.path.join(savePath, "output_log.txt"), "w")
# Static EVE Data from the staticdata repository, should be in the staticdata directory in our pyfa directory
staticPath = os.path.join(pyfaPath, "staticdata")
# The database where we store all the fits etc
saveDB = os.path.join(savePath, "saveddata.db")
# The database where the static EVE data from the datadump is kept.
# This is not the standard sqlite datadump but a modified version created by eos
# maintenance script
gameDB = os.path.join(staticPath, "eve.db")
## DON'T MODIFY ANYTHING BELOW ##
import eos.config
#Caching modifiers, disable all gamedata caching, its unneeded.
eos.config.gamedataCache = False
# saveddata db location modifier, shouldn't ever need to touch this
eos.config.saveddata_connectionstring = "sqlite:///" + saveDB + "?check_same_thread=False"
eos.config.gamedata_connectionstring = "sqlite:///" + gameDB + "?check_same_thread=False"
import os
import sys
# TODO: move all logging back to pyfa.py main loop
# We moved it here just to avoid rebuilding windows skeleton for now (any change to pyfa.py needs it)
import logging
import logging.handlers
# Load variable overrides specific to distribution type
try:
import configforced
except ImportError:
configforced = None
# Turns on debug mode
debug = False
# Defines if our saveddata will be in pyfa root or not
saveInRoot = False
logLevel = logging.DEBUG
# Version data
version = "1.13.3"
tag = "git"
expansionName = "Aegis"
expansionVersion = "1.0"
evemonMinVersion = "4081"
pyfaPath = None
savePath = None
staticPath = None
saveDB = None
gameDB = None
class StreamToLogger(object):
"""
Fake file-like stream object that redirects writes to a logger instance.
From: http://www.electricmonk.nl/log/2011/08/14/redirect-stdout-and-stderr-to-a-logger-in-python/
"""
def __init__(self, logger, log_level=logging.INFO):
self.logger = logger
self.log_level = log_level
self.linebuf = ''
def write(self, buf):
for line in buf.rstrip().splitlines():
self.logger.log(self.log_level, line.rstrip())
def __createDirs(path):
if not os.path.exists(path):
os.makedirs(path)
def defPaths():
global pyfaPath
global savePath
global staticPath
global saveDB
global gameDB
global saveInRoot
# The main pyfa directory which contains run.py
# Python 2.X uses ANSI by default, so we need to convert the character encoding
pyfaPath = getattr(configforced, "pyfaPath", pyfaPath)
if pyfaPath is None:
pyfaPath = unicode(os.path.dirname(os.path.realpath(os.path.abspath(
sys.modules['__main__'].__file__))), sys.getfilesystemencoding())
# Where we store the saved fits etc, default is the current users home directory
if saveInRoot is True:
savePath = getattr(configforced, "savePath", None)
if savePath is None:
savePath = os.path.join(pyfaPath, "saveddata")
else:
savePath = getattr(configforced, "savePath", None)
if savePath is None:
savePath = unicode(os.path.expanduser(os.path.join("~", ".pyfa")),
sys.getfilesystemencoding())
__createDirs(savePath)
format = '%(asctime)s %(name)-24s %(levelname)-8s %(message)s'
logging.basicConfig(format=format, level=logLevel)
handler = logging.handlers.RotatingFileHandler(os.path.join(savePath, "log.txt"), maxBytes=1000000, backupCount=3)
formatter = logging.Formatter(format)
handler.setFormatter(formatter)
logging.getLogger('').addHandler(handler)
logging.info("Starting pyfa")
if hasattr(sys, 'frozen'):
stdout_logger = logging.getLogger('STDOUT')
sl = StreamToLogger(stdout_logger, logging.INFO)
sys.stdout = sl
stderr_logger = logging.getLogger('STDERR')
sl = StreamToLogger(stderr_logger, logging.ERROR)
sys.stderr = sl
# Static EVE Data from the staticdata repository, should be in the staticdata
# directory in our pyfa directory
staticPath = os.path.join(pyfaPath, "staticdata")
# The database where we store all the fits etc
saveDB = os.path.join(savePath, "saveddata.db")
# The database where the static EVE data from the datadump is kept.
# This is not the standard sqlite datadump but a modified version created by eos
# maintenance script
gameDB = os.path.join(staticPath, "eve.db")
## DON'T MODIFY ANYTHING BELOW ##
import eos.config
#Caching modifiers, disable all gamedata caching, its unneeded.
eos.config.gamedataCache = False
# saveddata db location modifier, shouldn't ever need to touch this
eos.config.saveddata_connectionstring = "sqlite:///" + saveDB + "?check_same_thread=False"
eos.config.gamedata_connectionstring = "sqlite:///" + gameDB + "?check_same_thread=False"

0
eos/__init__.py Executable file → Normal file
View File

21
eos/capSim.py Executable file → Normal file
View File

@@ -82,18 +82,25 @@ class CapSimulator(object):
if self.scale:
duration, capNeed = self.scale_activation(duration, capNeed)
if self.stagger:
duration = int(duration/amount)
else:
capNeed *= amount
period = lcm(period, duration)
# set clipSize to infinite if reloads are disabled unless it's
# a cap booster module.
if not self.reload and capNeed > 0:
clipSize = 0
if self.stagger:
if clipSize == 0:
duration = int(duration/amount)
else:
stagger_amount = (duration*clipSize+10000)/(amount*clipSize)
for i in range(1, amount):
heapq.heappush(self.state,
[i*stagger_amount, duration,
capNeed, 0, clipSize])
else:
capNeed *= amount
period = lcm(period, duration)
# period optimization doesn't work when reloads are active.
if clipSize:
disable_period = True

6
eos/config.py Executable file → Normal file
View File

@@ -1,11 +1,11 @@
import os.path
from os.path import realpath, join, dirname, abspath
import sys
debug = False
gamedataCache = True
saveddataCache = True
gamedata_connectionstring = 'sqlite:///' + os.path.expanduser(os.path.join("~", ".pyfa","eve.db"))
gamedata_connectionstring = 'sqlite:///' + unicode(realpath(join(dirname(abspath(__file__)), "..", "staticdata", "eve.db")), sys.getfilesystemencoding())
saveddata_connectionstring = 'sqlite:///:memory:'
#Autodetect path, only change if the autodetection bugs out.
path = os.path.dirname(unicode(__file__, sys.getfilesystemencoding()))
path = dirname(unicode(__file__, sys.getfilesystemencoding()))

14
eos/db/__init__.py Executable file → Normal file
View File

@@ -40,6 +40,15 @@ gamedata_meta = MetaData()
gamedata_meta.bind = gamedata_engine
gamedata_session = sessionmaker(bind=gamedata_engine, autoflush=False, expire_on_commit=False)()
# This should be moved elsewhere, maybe as an actual query. Current, without try-except, it breaks when making a new
# game db because we haven't reached gamedata_meta.create_all()
try:
config.gamedata_version = gamedata_session.execute(
"SELECT `field_value` FROM `metadata` WHERE `field_name` LIKE 'client_build'"
).fetchone()[0]
except:
config.gamedata_version = None
saveddata_connectionstring = config.saveddata_connectionstring
if saveddata_connectionstring is not None:
if callable(saveddata_connectionstring):
@@ -49,7 +58,6 @@ if saveddata_connectionstring is not None:
saveddata_meta = MetaData()
saveddata_meta.bind = saveddata_engine
migration.update(saveddata_engine)
saveddata_session = sessionmaker(bind=saveddata_engine, autoflush=False, expire_on_commit=False)()
# Lock controlling any changes introduced to session
@@ -66,7 +74,8 @@ from eos.db.saveddata.queries import getUser, getCharacter, getFit, getFitsWithS
getCharacterList, getPrice, getDamagePatternList, getDamagePattern, \
getFitList, getFleetList, getFleet, save, remove, commit, add, \
getCharactersForUser, getMiscData, getSquadsIDsWithFitID, getWing, \
getSquad
getSquad, getBoosterFits, getProjectedFits, getTargetResistsList, getTargetResists,\
clearPrices, countAllFits
#If using in memory saveddata, you'll want to reflect it so the data structure is good.
if config.saveddata_connectionstring == "sqlite:///:memory:":
@@ -75,3 +84,4 @@ if config.saveddata_connectionstring == "sqlite:///:memory:":
def rollback():
with sd_lock:
saveddata_session.rollback()

0
eos/db/gamedata/__init__.py Executable file → Normal file
View File

1
eos/db/gamedata/attribute.py Executable file → Normal file
View File

@@ -31,6 +31,7 @@ attributes_table = Table("dgmattribs", gamedata_meta,
Column("attributeID", Integer, primary_key = True),
Column("attributeName", String),
Column("defaultValue", Float),
Column("maxAttributeID", Integer, ForeignKey("dgmattribs.attributeID")),
Column("description", Unicode),
Column("published", Boolean),
Column("displayName", String),

0
eos/db/gamedata/category.py Executable file → Normal file
View File

0
eos/db/gamedata/effect.py Executable file → Normal file
View File

0
eos/db/gamedata/group.py Executable file → Normal file
View File

0
eos/db/gamedata/icon.py Executable file → Normal file
View File

12
eos/db/gamedata/item.py Executable file → Normal file
View File

@@ -23,13 +23,14 @@ from sqlalchemy.ext.associationproxy import association_proxy
from sqlalchemy.orm.collections import attribute_mapped_collection
from eos.db import gamedata_meta
from eos.types import Icon, Attribute, Item, Effect, MetaType, Group
from eos.types import Icon, Attribute, Item, Effect, MetaType, Group, Traits
items_table = Table("invtypes", gamedata_meta,
Column("typeID", Integer, primary_key = True),
Column("typeName", String, index=True),
Column("description", String),
Column("raceID", Integer),
Column("factionID", Integer),
Column("volume", Float),
Column("mass", Float),
Column("capacity", Float),
@@ -38,9 +39,8 @@ items_table = Table("invtypes", gamedata_meta,
Column("iconID", Integer, ForeignKey("icons.iconID")),
Column("groupID", Integer, ForeignKey("invgroups.groupID"), index=True))
from .metaGroup import metatypes_table
from .traits import traits_table
mapper(Item, items_table,
properties = {"group" : relation(Group, backref = "items"),
@@ -52,6 +52,10 @@ mapper(Item, items_table,
uselist = False),
"ID" : synonym("typeID"),
"name" : synonym("typeName"),
"description" : deferred(items_table.c.description)})
"description" : deferred(items_table.c.description),
"traits" : relation(Traits,
primaryjoin = traits_table.c.typeID == items_table.c.typeID,
uselist = False)
})
Item.category = association_proxy("group", "category")

0
eos/db/gamedata/marketGroup.py Executable file → Normal file
View File

4
eos/db/gamedata/metaData.py Executable file → Normal file
View File

@@ -23,7 +23,7 @@ from eos.types import MetaData
from eos.db import gamedata_meta
metadata_table = Table("metadata", gamedata_meta,
Column("fieldName", String, primary_key=True),
Column("fieldValue", String))
Column("field_name", String, primary_key=True),
Column("field_value", String))
mapper(MetaData, metadata_table)

0
eos/db/gamedata/metaGroup.py Executable file → Normal file
View File

9
eos/db/gamedata/queries.py Executable file → Normal file
View File

@@ -184,8 +184,6 @@ def getItemsByCategory(filter, where=None, eager=None):
def searchItems(nameLike, where=None, join=None, eager=None):
if not isinstance(nameLike, basestring):
raise TypeError("Need string as argument")
# Prepare our string for request
nameLike = u"%{0}%".format(sqlizeString(nameLike))
if join is None:
join = tuple()
@@ -193,8 +191,11 @@ def searchItems(nameLike, where=None, join=None, eager=None):
if not hasattr(join, "__iter__"):
join = (join,)
filter = processWhere(Item.name.like(nameLike, escape="\\"), where)
items = gamedata_session.query(Item).options(*processEager(eager)).join(*join).filter(filter).all()
items = gamedata_session.query(Item).options(*processEager(eager)).join(*join)
for token in nameLike.split(' '):
token_safe = u"%{0}%".format(sqlizeString(token))
items = items.filter(processWhere(Item.name.like(token_safe, escape="\\"), where))
items = items.limit(100).all()
return items
@cachedQuery(2, "where", "itemids")

11
eos/db/gamedata/traits.py Normal file
View File

@@ -0,0 +1,11 @@
from sqlalchemy import Column, Table, Integer, String, ForeignKey
from sqlalchemy.orm import mapper
from eos.types import Traits
from eos.db import gamedata_meta
traits_table = Table("invtraits", gamedata_meta,
Column("typeID", Integer, ForeignKey("invtypes.typeID"), primary_key=True),
Column("traitText", String))
mapper(Traits, traits_table);

0
eos/db/gamedata/unit.py Executable file → Normal file
View File

75
eos/db/migration.py Executable file → Normal file
View File

@@ -1,41 +1,46 @@
import sqlalchemy
import config
import shutil
import time
import re
import os
def getAppVersion():
# calculate app version based on upgrade files we have
appVersion = 0
for fname in os.listdir(os.path.join(os.path.dirname(__file__), "migrations")):
m = re.match("^upgrade(?P<index>\d+)\.py$", fname)
if not m:
continue
index = int(m.group("index"))
appVersion = max(appVersion, index)
return appVersion
def getVersion(db):
cursor = db.execute('PRAGMA user_version')
return cursor.fetchone()[0]
def update(saveddata_engine):
checkPriceFailures(saveddata_engine)
checkApiDefaultChar(saveddata_engine)
dbVersion = getVersion(saveddata_engine)
appVersion = getAppVersion()
if dbVersion == appVersion:
return
def checkPriceFailures(saveddata_engine):
# Check if we have 'failed' column
try:
saveddata_engine.execute("SELECT failed FROM prices")
except sqlalchemy.exc.DatabaseError:
# As we don't have any important data there, let's just drop
# and recreate whole table
from eos.db.saveddata.price import prices_table
# Attempt to drop/create table only if it's already there
try:
prices_table.drop(saveddata_engine)
prices_table.create(saveddata_engine)
except sqlalchemy.exc.DatabaseError:
pass
if dbVersion < appVersion:
# Automatically backup database
toFile = "%s/saveddata_migration_%d-%d_%s.db"%(
config.savePath,
dbVersion,
appVersion,
time.strftime("%Y%m%d_%H%M%S"))
shutil.copyfile(config.saveDB, toFile)
def checkApiDefaultChar(saveddata_engine):
try:
saveddata_engine.execute("SELECT * FROM characters LIMIT 1")
# If table doesn't exist, it means we're doing everything from scratch
# and sqlalchemy will process everything as needed
except sqlalchemy.exc.DatabaseError:
pass
# If not, we're running on top of existing DB
else:
# Check that we have columns
try:
saveddata_engine.execute("SELECT defaultChar, chars FROM characters LIMIT 1")
# If we don't, create them
# This is ugly as hell, but we can't use proper migrate packages as it
# will require us to rebuild skeletons, including mac
except sqlalchemy.exc.DatabaseError:
saveddata_engine.execute("ALTER TABLE characters ADD COLUMN defaultChar INTEGER;")
saveddata_engine.execute("ALTER TABLE characters ADD COLUMN chars VARCHAR;")
for version in xrange(dbVersion, appVersion):
module = __import__("eos.db.migrations.upgrade{}".format(version + 1), fromlist=True)
upgrade = getattr(module, "upgrade", False)
if upgrade:
upgrade(saveddata_engine)
# when all is said and done, set version to current
saveddata_engine.execute("PRAGMA user_version = {}".format(appVersion))

View File

@@ -0,0 +1,9 @@
"""
The migration module includes migration logic to update database scheme and/or
data for the user database.
To create a migration, simply create a file upgrade<migration number>.py and
define an upgrade() function with the logic. Please note that there must be as
many upgrade files as there are database versions (version 5 would include
upgrade files 1-5)
"""

View File

@@ -0,0 +1,97 @@
"""
Migration 1
- Alters fits table to introduce target resist attribute
- Converts modules based on Oceanus Module Tiericide
Some modules have been deleted, which causes pyfa to crash when fits are
loaded as they no longer exist in the database. We therefore replace these
modules with their new replacements
Based on http://community.eveonline.com/news/patch-notes/patch-notes-for-oceanus/
and output of itemDiff.py
"""
import sqlalchemy
CONVERSIONS = {
6135: [ # Scoped Cargo Scanner
6133, # Interior Type-E Cargo Identifier
],
6527: [ # Compact Ship Scanner
6525, # Ta3 Perfunctory Vessel Probe
6529, # Speculative Ship Identifier I
6531, # Practical Type-E Ship Probe
],
6569: [ # Scoped Survey Scanner
6567, # ML-3 Amphilotite Mining Probe
6571, # Rock-Scanning Sensor Array I
6573, # 'Dactyl' Type-E Asteroid Analyzer
],
509: [ # 'Basic' Capacitor Flux Coil
8163, # Partial Power Plant Manager: Capacitor Flux
8165, # Alpha Reactor Control: Capacitor Flux
8167, # Type-E Power Core Modification: Capacitor Flux
8169, # Marked Generator Refitting: Capacitor Flux
],
8135: [ # Restrained Capacitor Flux Coil
8131, # Local Power Plant Manager: Capacitor Flux I
],
8133: [ # Compact Capacitor Flux Coil
8137, # Mark I Generator Refitting: Capacitor Flux
],
3469: [ # Basic Co-Processor
8744, # Nanoelectrical Co-Processor
8743, # Nanomechanical CPU Enhancer
8746, # Quantum Co-Processor
8745, # Photonic CPU Enhancer
15425, # Naiyon's Modified Co-Processor (never existed but convert
# anyway as some fits may include it)
],
8748: [ # Upgraded Co-Processor
8747, # Nanomechanical CPU Enhancer I
8750, # Quantum Co-Processor I
8749, # Photonic CPU Enhancer I
],
1351: [ # Basic Reactor Control Unit
8251, # Partial Power Plant Manager: Reaction Control
8253, # Alpha Reactor Control: Reaction Control
8257, # Marked Generator Refitting: Reaction Control
],
8263: [ # Compact Reactor Control Unit
8259, # Local Power Plant Manager: Reaction Control I
8265, # Mark I Generator Refitting: Reaction Control
8261, # Beta Reactor Control: Reaction Control I
],
16537: [ # Compact Micro Auxiliary Power Core
16539, # Micro B88 Core Augmentation
16541, # Micro K-Exhaust Core Augmentation
],
31936: [ # Navy Micro Auxiliary Power Core
16543, # Micro 'Vigor' Core Augmentation
],
8089: [ # Compact Light Missile Launcher
8093, # Prototype 'Arbalest' Light Missile Launcher
],
8091: [ # Ample Light Missile Launcher
7993, # Experimental TE-2100 Light Missile Launcher
],
# Surface Cargo Scanner I was removed from game, however no mention of
# replacement module in patch notes. Morphing it to meta 0 module to be safe
442: [ # Cargo Scanner I
6129, # Surface Cargo Scanner I
]
}
def upgrade(saveddata_engine):
# Update fits schema to include target resists attribute
try:
saveddata_engine.execute("SELECT targetResistsID FROM fits LIMIT 1")
except sqlalchemy.exc.DatabaseError:
saveddata_engine.execute("ALTER TABLE fits ADD COLUMN targetResistsID INTEGER;")
# Convert modules
for replacement_item, list in CONVERSIONS.iteritems():
for retired_item in list:
saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item))
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item))

View File

@@ -0,0 +1,16 @@
"""
Migration 10
- Adds active attribute to projected fits
"""
import sqlalchemy
def upgrade(saveddata_engine):
# Update projectedFits schema to include active attribute
try:
saveddata_engine.execute("SELECT active FROM projectedFits LIMIT 1")
except sqlalchemy.exc.DatabaseError:
saveddata_engine.execute("ALTER TABLE projectedFits ADD COLUMN active BOOLEAN")
saveddata_engine.execute("UPDATE projectedFits SET active = 1")
saveddata_engine.execute("UPDATE projectedFits SET amount = 1")

View File

@@ -0,0 +1,21 @@
"""
Migration 2
- Includes old upgrade paths pre-1.5.0. See GH issue #190 for why this is needed
"""
import sqlalchemy
def upgrade(saveddata_engine):
# Update characters schema to include default chars
try:
saveddata_engine.execute("SELECT defaultChar, chars FROM characters LIMIT 1")
except sqlalchemy.exc.DatabaseError:
saveddata_engine.execute("ALTER TABLE characters ADD COLUMN defaultChar INTEGER")
saveddata_engine.execute("ALTER TABLE characters ADD COLUMN chars VARCHAR")
# Update fits schema to include booster attribute
try:
saveddata_engine.execute("SELECT booster FROM fits LIMIT 1")
except sqlalchemy.exc.DatabaseError:
saveddata_engine.execute("ALTER TABLE fits ADD COLUMN booster BOOLEAN")

View File

@@ -0,0 +1,13 @@
"""
Migration 3
- Adds mode column for fits (t3 dessy)
"""
import sqlalchemy
def upgrade(saveddata_engine):
try:
saveddata_engine.execute("SELECT modeID FROM fits LIMIT 1")
except sqlalchemy.exc.DatabaseError:
saveddata_engine.execute("ALTER TABLE fits ADD COLUMN modeID INTEGER")

View File

@@ -0,0 +1,141 @@
"""
Migration 4
- Converts modules based on Proteus Module Tiericide
Some modules have been unpublished (and unpublished module attributes are removed
from database), which causes pyfa to crash. We therefore replace these
modules with their new replacements
Based on http://community.eveonline.com/news/patch-notes/patch-notes-for-proteus/
and output of itemDiff.py
"""
CONVERSIONS = {
506: ( # 'Basic' Capacitor Power Relay
8205, # Alpha Reactor Control: Capacitor Power Relay
8209, # Marked Generator Refitting: Capacitor Power Relay
8203, # Partial Power Plant Manager: Capacity Power Relay
8207, # Type-E Power Core Modification: Capacitor Power Relay
),
8177: ( # Mark I Compact Capacitor Power Relay
8173, # Beta Reactor Control: Capacitor Power Relay I
),
8175: ( # Type-D Restrained Capacitor Power Relay
8171, # Local Power Plant Manager: Capacity Power Relay I
),
421: ( # 'Basic' Capacitor Recharger
4425, # AGM Capacitor Charge Array,
4421, # F-a10 Buffer Capacitor Regenerator
4423, # Industrial Capacitor Recharger
4427, # Secondary Parallel Link-Capacitor
),
4435: ( # Eutectic Compact Cap Recharger
4433, # Barton Reactor Capacitor Recharger I
4431, # F-b10 Nominal Capacitor Regenerator
4437, # Fixed Parallel Link-Capacitor I
),
1315: ( # 'Basic' Expanded Cargohold
5483, # Alpha Hull Mod Expanded Cargo
5479, # Marked Modified SS Expanded Cargo
5481, # Partial Hull Conversion Expanded Cargo
5485, # Type-E Altered SS Expanded Cargo
),
5493: ( # Type-D Restrained Expanded Cargo
5491, # Beta Hull Mod Expanded Cargo
5489, # Local Hull Conversion Expanded Cargo I
5487, # Mark I Modified SS Expanded Cargo
),
1401: ( # 'Basic' Inertial Stabilizers
5523, # Alpha Hull Mod Inertial Stabilizers
5521, # Partial Hull Conversion Inertial Stabilizers
5525, # Type-E Altered SS Inertial Stabilizers
),
5533: ( # Type-D Restrained Inertial Stabilizers
5531, # Beta Hull Mod Inertial Stabilizers
5529, # Local Hull Conversion Inertial Stabilizers I
5527, # Mark I Modified SS Inertial Stabilizers
5519, # Marked Modified SS Inertial Stabilizers
),
5239: ( # EP-S Gaussian Scoped Mining Laser
5241, # Dual Diode Mining Laser I
),
5233: ( # Single Diode Basic Mining Laser
5231, # EP-R Argon Ion Basic Excavation Pulse
5237, # Rubin Basic Particle Bore Stream
5235, # Xenon Basic Drilling Beam
),
5245: ( # Particle Bore Compact Mining Laser
5243, # XeCl Drilling Beam I
),
22619: ( # Frigoris Restrained Ice Harvester Upgrade
22617, # Crisium Ice Harvester Upgrade
),
22611: ( # Elara Restrained Mining Laser Upgrade
22609, # Erin Mining Laser Upgrade
),
1242: ( # 'Basic' Nanofiber Internal Structure
5591, # Alpha Hull Mod Nanofiber Structure
5595, # Marked Modified SS Nanofiber Structure
5559, # Partial Hull Conversion Nanofiber Structure
5593, # Type-E Altered SS Nanofiber Structure
),
5599: ( # Type-D Restrained Nanofiber Structure
5597, # Beta Hull Mod Nanofiber Structure
5561, # Local Hull Conversion Nanofiber Structure I
5601, # Mark I Modified SS Nanofiber Structure
),
1192: ( # 'Basic' Overdrive Injector System
5613, # Alpha Hull Mod Overdrive Injector
5617, # Marked Modified SS Overdrive Injector
5611, # Partial Hull Conversion Overdrive Injector
5615, # Type-E Altered SS Overdrive Injector
),
5631: ( # Type-D Restrained Overdrive Injector
5629, # Beta Hull Mod Overdrive Injector
5627, # Local Hull Conversion Overdrive Injector I
5633, # Mark I Modified SS Overdrive Injector
),
1537: ( # 'Basic' Power Diagnostic System
8213, # Alpha Reactor Control: Diagnostic System
8217, # Marked Generator Refitting: Diagnostic System
8211, # Partial Power Plant Manager: Diagnostic System
8215, # Type-E Power Core Modification: Diagnostic System
8255, # Type-E Power Core Modification: Reaction Control
),
8225: ( # Mark I Compact Power Diagnostic System
8221, # Beta Reactor Control: Diagnostic System I
8219, # Local Power Plant Manager: Diagnostic System I
8223, # Type-D Power Core Modification: Diagnostic System
),
1240: ( # 'Basic' Reinforced Bulkheads
5677, # Alpha Hull Mod Reinforced Bulkheads
5681, # Marked Modified SS Reinforced Bulkheads
5675, # Partial Hull Conversion Reinforced Bulkheads
5679, # Type-E Altered SS Reinforced Bulkheads
),
5649: ( # Mark I Compact Reinforced Bulkheads
5645, # Beta Hull Mod Reinforced Bulkheads
),
5647: ( # Type-D Restrained Reinforced Bulkheads
5643, # Local Hull Conversion Reinforced Bulkheads I
),
}
def upgrade(saveddata_engine):
# Convert modules
for replacement_item, list in CONVERSIONS.iteritems():
for retired_item in list:
saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item))
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item))

View File

@@ -0,0 +1,8 @@
"""
Migration 5
Simply deletes damage profiles with a blank name. See GH issue #256
"""
def upgrade(saveddata_engine):
saveddata_engine.execute('DELETE FROM damagePatterns WHERE name LIKE ?', ("",))

View File

@@ -0,0 +1,9 @@
"""
Migration 6
Overwrites damage profile 0 to reset bad uniform values (bad values set with bug)
"""
def upgrade(saveddata_engine):
saveddata_engine.execute('DELETE FROM damagePatterns WHERE name LIKE ? OR ID LIKE ?', ("Uniform", "1"))
saveddata_engine.execute('INSERT INTO damagePatterns VALUES (?, ?, ?, ?, ?, ?, ?)', (1, "Uniform", 25, 25, 25, 25, None))

View File

@@ -0,0 +1,24 @@
"""
Migration 7
- Converts Scorpion Ishukone Watch to Scorpion
Mosaic introduced proper skinning system, and Ishukone Scorp
was the only ship which was presented as stand-alone ship in
Pyfa.
"""
CONVERSIONS = {
640: ( # Scorpion
4005, # Scorpion Ishukone Watch
)
}
def upgrade(saveddata_engine):
# Convert ships
for replacement_item, list in CONVERSIONS.iteritems():
for retired_item in list:
saveddata_engine.execute('UPDATE "fits" SET "shipID" = ? WHERE "shipID" = ?', (replacement_item, retired_item))

View File

@@ -0,0 +1,85 @@
"""
Migration 8
- Converts modules based on Carnyx Module Tiericide
Some modules have been unpublished (and unpublished module attributes are removed
from database), which causes pyfa to crash. We therefore replace these
modules with their new replacements
"""
CONVERSIONS = {
8529: ( # Large F-S9 Regolith Compact Shield Extender
8409, # Large Subordinate Screen Stabilizer I
),
8419: ( # Large Azeotropic Restrained Shield Extender
8489, # Large Supplemental Barrier Emitter I
),
8517: ( # Medium F-S9 Regolith Compact Shield Extender
8397, # Medium Subordinate Screen Stabilizer I
),
8433: ( # Medium Azeotropic Restrained Shield Extender
8477, # Medium Supplemental Barrier Emitter I
),
20627: ( # Small 'Trapper' Shield Extender
8437, # Micro Azeotropic Ward Salubrity I
8505, # Micro F-S9 Regolith Shield Induction
3849, # Micro Shield Extender I
3851, # Micro Shield Extender II
8387, # Micro Subordinate Screen Stabilizer I
8465, # Micro Supplemental Barrier Emitter I
),
8521: ( # Small F-S9 Regolith Compact Shield Extender
8401, # Small Subordinate Screen Stabilizer I
),
8427: ( # Small Azeotropic Restrained Shield Extender
8481, # Small Supplemental Barrier Emitter I
),
11343: ( # 100mm Crystalline Carbonide Restrained Plates
11345, # 100mm Reinforced Nanofiber Plates I
),
11341: ( # 100mm Rolled Tungsten Compact Plates
11339, # 100mm Reinforced Titanium Plates I
),
11327: ( # 1600mm Crystalline Carbonide Restrained Plates
11329, # 1600mm Reinforced Nanofiber Plates I
),
11325: ( # 1600mm Rolled Tungsten Compact Plates
11323, # 1600mm Reinforced Titanium Plates I
),
11351: ( # 200mm Crystalline Carbonide Restrained Plates
11353, # 200mm Reinforced Nanofiber Plates I
),
11349: ( # 200mm Rolled Tungsten Compact Plates
11347, # 200mm Reinforced Titanium Plates I
),
11311: ( # 400mm Crystalline Carbonide Restrained Plates
11313, # 400mm Reinforced Nanofiber Plates I
),
11309: ( # 400mm Rolled Tungsten Compact Plates
11307, # 400mm Reinforced Titanium Plates I
),
23791: ( # 'Citadella' 100mm Steel Plates
11335, # 50mm Reinforced Crystalline Carbonide Plates I
11337, # 50mm Reinforced Nanofiber Plates I
11333, # 50mm Reinforced Rolled Tungsten Plates I
11291, # 50mm Reinforced Steel Plates I
20343, # 50mm Reinforced Steel Plates II
11331, # 50mm Reinforced Titanium Plates I
),
11319: ( # 800mm Crystalline Carbonide Restrained Plates
11321, # 800mm Reinforced Nanofiber Plates I
),
11317: ( # 800mm Rolled Tungsten Compact Plates
11315, # 800mm Reinforced Titanium Plates I
),
}
def upgrade(saveddata_engine):
# Convert modules
for replacement_item, list in CONVERSIONS.iteritems():
for retired_item in list:
saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item))
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item))

View File

@@ -0,0 +1,23 @@
"""
Migration 9
Effectively drops UNIQUE constraint from boosters table. SQLite does not support
this, so we have to copy the table to the updated schema and then rename it
"""
tmpTable = """
CREATE TABLE boostersTemp (
'ID' INTEGER NOT NULL,
'itemID' INTEGER,
'fitID' INTEGER NOT NULL,
'active' BOOLEAN,
PRIMARY KEY(ID),
FOREIGN KEY('fitID') REFERENCES fits ('ID')
)
"""
def upgrade(saveddata_engine):
saveddata_engine.execute(tmpTable)
saveddata_engine.execute("INSERT INTO boostersTemp (ID, itemID, fitID, active) SELECT ID, itemID, fitID, active FROM boosters")
saveddata_engine.execute("DROP TABLE boosters")
saveddata_engine.execute("ALTER TABLE boostersTemp RENAME TO boosters")

2
eos/db/saveddata/__init__.py Executable file → Normal file
View File

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

2
eos/db/saveddata/booster.py Executable file → Normal file
View File

@@ -29,7 +29,7 @@ boosters_table = Table("boosters", saveddata_meta,
Column("itemID", Integer),
Column("fitID", Integer, ForeignKey("fits.ID"), nullable = False),
Column("active", Boolean),
UniqueConstraint("itemID", "fitID"))
)
activeSideEffects_table = Table("boostersActiveSideEffects", saveddata_meta,
Column("boosterID", ForeignKey("boosters.ID"), primary_key = True),

32
eos/db/saveddata/cargo.py Normal file
View File

@@ -0,0 +1,32 @@
#===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
#
# eos is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# eos is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <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 Cargo
cargo_table = Table("cargo", saveddata_meta,
Column("ID", Integer, primary_key=True),
Column("fitID", Integer, ForeignKey("fits.ID"), nullable = False, index = True),
Column("itemID", Integer, nullable = False),
Column("amount", Integer, nullable = False))
mapper(Cargo, cargo_table)

0
eos/db/saveddata/character.py Executable file → Normal file
View File

0
eos/db/saveddata/damagePattern.py Executable file → Normal file
View File

0
eos/db/saveddata/drone.py Executable file → Normal file
View File

140
eos/db/saveddata/fit.py Executable file → Normal file
View File

@@ -17,18 +17,20 @@
# 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 sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.sql import and_
from sqlalchemy.ext.associationproxy import association_proxy
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.cargo import cargo_table
from eos.db.saveddata.implant import fitImplants_table
from eos.types import Fit, Module, User, Booster, Drone, Implant, Character, DamagePattern
from eos.effectHandlerHelpers import HandledModuleList, HandledDroneList, \
HandledImplantBoosterList, HandledProjectedModList, HandledProjectedDroneList, \
HandledProjectedFitList
from eos.types import Fit, Module, User, Booster, Drone, Cargo, Implant, Character, DamagePattern, TargetResists
from eos.effectHandlerHelpers import *
fits_table = Table("fits", saveddata_meta,
Column("ID", Integer, primary_key = True),
Column("ownerID", ForeignKey("users.ID"), nullable = True, index = True),
@@ -36,33 +38,109 @@ fits_table = Table("fits", saveddata_meta,
Column("name", String, nullable = False),
Column("timestamp", Integer, nullable = False),
Column("characterID", ForeignKey("characters.ID"), nullable = True),
Column("damagePatternID", ForeignKey("damagePatterns.ID"), nullable=True))
Column("damagePatternID", ForeignKey("damagePatterns.ID"), nullable=True),
Column("booster", Boolean, nullable = False, index = True, default = 0),
Column("targetResistsID", ForeignKey("targetResists.ID"), nullable=True),
Column("modeID", Integer, nullable=True),
)
projectedFits_table = Table("projectedFits", saveddata_meta,
Column("sourceID", ForeignKey("fits.ID"), primary_key = True),
Column("victimID", ForeignKey("fits.ID"), primary_key = True),
Column("amount", Integer))
Column("amount", Integer, nullable = False, default = 1),
Column("active", Boolean, nullable = False, default = 1),
)
class ProjectedFit(object):
def __init__(self, sourceID, source_fit, amount=1, active=True):
self.sourceID = sourceID
self.source_fit = source_fit
self.amount = amount
self.active = active
@reconstructor
def init(self):
if self.source_fit.isInvalid:
# Very rare for this to happen, but be prepared for it
eos.db.saveddata_session.delete(self.source_fit)
eos.db.saveddata_session.flush()
eos.db.saveddata_session.refresh(self.victim_fit)
Fit._Fit__projectedFits = association_proxy(
"victimOf", # look at the victimOf association...
"source_fit", # .. and return the source fits
creator=lambda sourceID, source_fit: ProjectedFit(sourceID, source_fit)
)
mapper(Fit, fits_table,
properties = {"_Fit__modules" : relation(Module, collection_class = HandledModuleList,
primaryjoin = and_(modules_table.c.fitID == fits_table.c.ID, modules_table.c.projected == False),
order_by = modules_table.c.position, cascade='all, delete, delete-orphan'),
"_Fit__projectedModules" : relation(Module, collection_class = HandledProjectedModList, cascade='all, delete, delete-orphan', single_parent=True,
primaryjoin = and_(modules_table.c.fitID == fits_table.c.ID, modules_table.c.projected == True)),
"owner" : relation(User, backref = "fits"),
"_Fit__boosters" : relation(Booster, collection_class = HandledImplantBoosterList, cascade='all, delete, delete-orphan', single_parent=True),
"_Fit__drones" : relation(Drone, collection_class = HandledDroneList, cascade='all, delete, delete-orphan', single_parent=True,
primaryjoin = and_(drones_table.c.fitID == fits_table.c.ID, drones_table.c.projected == False)),
"_Fit__projectedDrones" : relation(Drone, collection_class = HandledProjectedDroneList, cascade='all, delete, delete-orphan', single_parent=True,
primaryjoin = and_(drones_table.c.fitID == fits_table.c.ID, drones_table.c.projected == True)),
"_Fit__implants" : relation(Implant, collection_class = HandledImplantBoosterList, cascade='all, delete, delete-orphan', single_parent=True,
primaryjoin = fitImplants_table.c.fitID == fits_table.c.ID,
secondaryjoin = fitImplants_table.c.implantID == Implant.ID,
secondary = fitImplants_table),
"_Fit__character" : relation(Character, backref = "fits"),
"_Fit__damagePattern" : relation(DamagePattern),
"_Fit__projectedFits" : relation(Fit,
primaryjoin = projectedFits_table.c.victimID == fits_table.c.ID,
secondaryjoin = fits_table.c.ID == projectedFits_table.c.sourceID,
secondary = projectedFits_table,
collection_class = HandledProjectedFitList)
})
properties = {
"_Fit__modules": relation(
Module,
collection_class=HandledModuleList,
primaryjoin=and_(modules_table.c.fitID == fits_table.c.ID, modules_table.c.projected == False),
order_by=modules_table.c.position,
cascade='all, delete, delete-orphan'),
"_Fit__projectedModules": relation(
Module,
collection_class=HandledProjectedModList,
cascade='all, delete, delete-orphan',
single_parent=True,
primaryjoin=and_(modules_table.c.fitID == fits_table.c.ID, modules_table.c.projected == True)),
"owner": relation(
User,
backref="fits"),
"itemID": fits_table.c.shipID,
"shipID": fits_table.c.shipID,
"_Fit__boosters": relation(
Booster,
collection_class=HandledImplantBoosterList,
cascade='all, delete, delete-orphan',
single_parent=True),
"_Fit__drones": relation(
Drone,
collection_class=HandledDroneCargoList,
cascade='all, delete, delete-orphan',
single_parent=True,
primaryjoin=and_(drones_table.c.fitID == fits_table.c.ID, drones_table.c.projected == False)),
"_Fit__cargo": relation(
Cargo,
collection_class=HandledDroneCargoList,
cascade='all, delete, delete-orphan',
single_parent=True,
primaryjoin=and_(cargo_table.c.fitID == fits_table.c.ID)),
"_Fit__projectedDrones": relation(
Drone,
collection_class=HandledProjectedDroneList,
cascade='all, delete, delete-orphan',
single_parent=True,
primaryjoin=and_(drones_table.c.fitID == fits_table.c.ID, drones_table.c.projected == True)),
"_Fit__implants": relation(
Implant,
collection_class=HandledImplantBoosterList,
cascade='all, delete, delete-orphan',
backref='fit',
single_parent=True,
primaryjoin=fitImplants_table.c.fitID == fits_table.c.ID,
secondaryjoin=fitImplants_table.c.implantID == Implant.ID,
secondary=fitImplants_table),
"_Fit__character": relation(
Character,
backref="fits"),
"_Fit__damagePattern": relation(DamagePattern),
"_Fit__targetResists": relation(TargetResists),
"projectedOnto": relationship(
ProjectedFit,
primaryjoin=projectedFits_table.c.sourceID == fits_table.c.ID,
backref='source_fit',
collection_class=attribute_mapped_collection('victimID'),
cascade='all, delete, delete-orphan'),
"victimOf": relationship(
ProjectedFit,
primaryjoin=fits_table.c.ID == projectedFits_table.c.victimID,
backref='victim_fit',
collection_class=attribute_mapped_collection('sourceID'),
cascade='all, delete, delete-orphan'),
}
)
mapper(ProjectedFit, projectedFits_table)

0
eos/db/saveddata/fleet.py Executable file → Normal file
View File

0
eos/db/saveddata/implant.py Executable file → Normal file
View File

0
eos/db/saveddata/miscData.py Executable file → Normal file
View File

0
eos/db/saveddata/module.py Executable file → Normal file
View File

0
eos/db/saveddata/price.py Executable file → Normal file
View File

90
eos/db/saveddata/queries.py Executable file → Normal file
View File

@@ -19,8 +19,9 @@
from eos.db.util import processEager, processWhere
from eos.db import saveddata_session, sd_lock
from eos.types import User, Character, Fit, Price, DamagePattern, Fleet, MiscData, Wing, Squad
from eos.types import User, Character, Fit, Price, DamagePattern, Fleet, MiscData, Wing, Squad, TargetResists
from eos.db.saveddata.fleet import squadmembers_table
from eos.db.saveddata.fit import projectedFits_table
from sqlalchemy.sql import and_
import eos.config
@@ -184,6 +185,12 @@ def getFit(lookfor, eager=None):
fit = saveddata_session.query(Fit).options(*eager).filter(Fit.ID == fitID).first()
else:
raise TypeError("Need integer as argument")
if fit and fit.isInvalid:
with sd_lock:
removeInvalid([fit])
return None
return fit
@cachedQuery(Fleet, 1, "fleetID")
@@ -243,11 +250,36 @@ def getFitsWithShip(shipID, ownerID=None, where=None, eager=None):
filter = processWhere(filter, where)
eager = processEager(eager)
with sd_lock:
fits = saveddata_session.query(Fit).options(*eager).filter(filter).all()
fits = removeInvalid(saveddata_session.query(Fit).options(*eager).filter(filter).all())
else:
raise TypeError("ShipID must be integer")
return fits
def getBoosterFits(ownerID=None, where=None, eager=None):
"""
Get all the fits that are flagged as a boosting ship
If no user is passed, do this for all users.
"""
if ownerID is not None and not isinstance(ownerID, int):
raise TypeError("OwnerID must be integer")
filter = Fit.booster == 1
if ownerID is not None:
filter = and_(filter, Fit.ownerID == ownerID)
filter = processWhere(filter, where)
eager = processEager(eager)
with sd_lock:
fits = removeInvalid(saveddata_session.query(Fit).options(*eager).filter(filter).all())
return fits
def countAllFits():
with sd_lock:
count = saveddata_session.query(Fit).count()
return count
def countFitsWithShip(shipID, ownerID=None, where=None, eager=None):
"""
Get all the fits using a certain ship.
@@ -271,7 +303,8 @@ def countFitsWithShip(shipID, ownerID=None, where=None, eager=None):
def getFitList(eager=None):
eager = processEager(eager)
with sd_lock:
fits = saveddata_session.query(Fit).options(*eager).all()
fits = removeInvalid(saveddata_session.query(Fit).options(*eager).all())
return fits
def getFleetList(eager=None):
@@ -289,6 +322,12 @@ def getPrice(typeID):
raise TypeError("Need integer as argument")
return price
def clearPrices():
with sd_lock:
deleted_rows = saveddata_session.query(Price).delete()
commit()
return deleted_rows
def getMiscData(field):
if isinstance(field, basestring):
with sd_lock:
@@ -303,6 +342,12 @@ def getDamagePatternList(eager=None):
patterns = saveddata_session.query(DamagePattern).options(*eager).all()
return patterns
def getTargetResistsList(eager=None):
eager = processEager(eager)
with sd_lock:
patterns = saveddata_session.query(TargetResists).options(*eager).all()
return patterns
@cachedQuery(DamagePattern, 1, "lookfor")
def getDamagePattern(lookfor, eager=None):
if isinstance(lookfor, int):
@@ -321,6 +366,24 @@ def getDamagePattern(lookfor, eager=None):
raise TypeError("Need integer or string as argument")
return pattern
@cachedQuery(TargetResists, 1, "lookfor")
def getTargetResists(lookfor, eager=None):
if isinstance(lookfor, int):
if eager is None:
with sd_lock:
pattern = saveddata_session.query(TargetResists).get(lookfor)
else:
eager = processEager(eager)
with sd_lock:
pattern = saveddata_session.query(TargetResists).options(*eager).filter(TargetResists.ID == lookfor).first()
elif isinstance(lookfor, basestring):
eager = processEager(eager)
with sd_lock:
pattern = saveddata_session.query(TargetResists).options(*eager).filter(TargetResists.name == lookfor).first()
else:
raise TypeError("Need integer or string as argument")
return pattern
def searchFits(nameLike, where=None, eager=None):
if not isinstance(nameLike, basestring):
raise TypeError("Need string as argument")
@@ -331,7 +394,8 @@ def searchFits(nameLike, where=None, eager=None):
filter = processWhere(Fit.name.like(nameLike, escape="\\"), where)
eager = processEager(eager)
with sd_lock:
fits = saveddata_session.query(Fit).options(*eager).filter(filter).all()
fits = removeInvalid(saveddata_session.query(Fit).options(*eager).filter(filter).all())
return fits
def getSquadsIDsWithFitID(fitID):
@@ -343,6 +407,24 @@ def getSquadsIDsWithFitID(fitID):
else:
raise TypeError("Need integer as argument")
def getProjectedFits(fitID):
if isinstance(fitID, int):
with sd_lock:
filter = and_(projectedFits_table.c.sourceID == fitID, Fit.ID == projectedFits_table.c.victimID)
fits = saveddata_session.query(Fit).filter(filter).all()
return fits
else:
raise TypeError("Need integer as argument")
def removeInvalid(fits):
invalids = [f for f in fits if f.isInvalid]
if invalids:
map(fits.remove, invalids)
map(saveddata_session.delete, invalids)
saveddata_session.commit()
return fits
def add(stuff):
with sd_lock:

0
eos/db/saveddata/skill.py Executable file → Normal file
View File

View File

@@ -0,0 +1,35 @@
#===============================================================================
# Copyright (C) 2014 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, Float, ForeignKey, String
from sqlalchemy.orm import mapper
from eos.db import saveddata_meta
from eos.types import TargetResists
targetResists_table = Table("targetResists", saveddata_meta,
Column("ID", Integer, primary_key = True),
Column("name", String),
Column("emAmount", Float),
Column("thermalAmount", Float),
Column("kineticAmount", Float),
Column("explosiveAmount", Float),
Column("ownerID", ForeignKey("users.ID"), nullable=True))
mapper(TargetResists, targetResists_table)

0
eos/db/saveddata/user.py Executable file → Normal file
View File

0
eos/db/util.py Executable file → Normal file
View File

139
eos/effectHandlerHelpers.py Executable file → Normal file
View File

@@ -17,8 +17,12 @@
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
#from sqlalchemy.orm.attributes import flag_modified
import eos.db
import eos.types
import logging
logger = logging.getLogger(__name__)
class HandledList(list):
def filteredItemPreAssign(self, filter, *args, **kwargs):
@@ -101,6 +105,14 @@ class HandledList(list):
except AttributeError:
pass
def remove(self, thing):
# We must flag it as modified, otherwise it not be removed from the database
# @todo: flag_modified isn't in os x skel. need to rebuild to include
#flag_modified(thing, "itemID")
if thing.isInvalid: # see GH issue #324
thing.itemID = 0
list.remove(self, thing)
class HandledModuleList(HandledList):
def append(self, mod):
emptyPosition = float("Inf")
@@ -115,10 +127,14 @@ class HandledModuleList(HandledList):
del self[emptyPosition]
mod.position = emptyPosition
HandledList.insert(self, emptyPosition, mod)
if mod.isInvalid:
self.remove(mod)
return
mod.position = len(self)
HandledList.append(self, mod)
if mod.isInvalid:
self.remove(mod)
def insert(self, index, mod):
mod.position = index
@@ -149,93 +165,72 @@ class HandledModuleList(HandledList):
if mod.getModifiedItemAttr("subSystemSlot") == slot:
del self[i]
class HandledDroneList(HandledList):
class HandledDroneCargoList(HandledList):
def find(self, item):
for d in self:
if d.item == item:
yield d
for o in self:
if o.item == item:
yield o
def findFirst(self, item):
for d in self.find(item):
return d
for o in self.find(item):
return o
def append(self, drone):
list.append(self, drone)
def remove(self, drone):
HandledList.remove(self, drone)
def appendItem(self, item, amount = 1):
if amount < 1: ValueError("Amount of drones to add should be >= 1")
d = self.findFirst(item)
if d is None:
d = eos.types.Drone(item)
self.append(d)
d.amount += amount
return d
def removeItem(self, item, amount):
if amount < 1: ValueError("Amount of drones to remove should be >= 1")
d = self.findFirst(item)
if d is None: return
d.amount -= amount
if d.amount <= 0:
self.remove(d)
return None
return d
def append(self, thing):
HandledList.append(self, thing)
if thing.isInvalid:
self.remove(thing)
class HandledImplantBoosterList(HandledList):
def __init__(self):
self.__slotCache = {}
def append(self, thing):
if thing.isInvalid:
HandledList.append(self, thing)
self.remove(thing)
return
def append(self, implant):
if self.__slotCache.has_key(implant.slot):
raise ValueError("Implant/Booster slot already in use, remove the old one first or set replace = True")
self.__slotCache[implant.slot] = implant
HandledList.append(self, implant)
# if needed, remove booster that was occupying slot
oldObj = next((m for m in self if m.slot == thing.slot), None)
if oldObj:
logging.info("Slot %d occupied with %s, replacing with %s", thing.slot, oldObj.item.name, thing.item.name)
oldObj.itemID = 0 # hack to remove from DB. See GH issue #324
self.remove(oldObj)
def remove(self, implant):
HandledList.remove(self, implant)
del self.__slotCache[implant.slot]
# While we deleted this implant, in edge case seems like not all references
# to it are removed and object still lives in session; forcibly remove it,
# or otherwise when adding the same booster twice booster's table (typeID, fitID)
# constraint will report database integrity error
# TODO: make a proper fix, probably by adjusting fit-boosters sqlalchemy relationships
eos.db.remove(implant)
def freeSlot(self, slot):
if hasattr(slot, "slot"):
slot = slot.slot
try:
implant = self.__slotCache[slot]
except KeyError:
return False
try:
self.remove(implant)
except ValueError:
return False
return True
HandledList.append(self, thing)
class HandledProjectedModList(HandledList):
def append(self, proj):
if proj.isInvalid:
# we must include it before we remove it. doing it this way ensures
# rows and relationships in database are removed as well
HandledList.append(self, proj)
self.remove(proj)
return
proj.projected = True
isSystemEffect = proj.item.group.name == "Effect Beacon"
if isSystemEffect:
# remove other system effects - only 1 per fit plz
oldEffect = next((m for m in self if m.item.group.name == "Effect Beacon"), None)
if oldEffect:
logging.info("System effect occupied with %s, replacing with %s", oldEffect.item.name, proj.item.name)
self.remove(oldEffect)
HandledList.append(self, proj)
# Remove non-projectable modules
if not proj.item.isType("projected") and not isSystemEffect:
self.remove(proj)
class HandledProjectedDroneList(HandledDroneCargoList):
def append(self, proj):
proj.projected = True
HandledList.append(self, proj)
class HandledProjectedDroneList(HandledDroneList):
def append(self, proj):
proj.projected = True
list.append(self, proj)
class HandledProjectedFitList(HandledList):
def append(self, proj):
proj.projected = True
list.append(self, proj)
# Remove invalid or non-projectable drones
if proj.isInvalid or not proj.item.isType("projected"):
self.remove(proj)
class HandledItem(object):
def preAssignItemAttr(self, *args, **kwargs):

0
eos/effects/__init__.py Executable file → Normal file
View File

View File

@@ -1,3 +1,5 @@
# accerationControlCapNeedBonusPostPercentCapacitorNeedLocationShipGroupAfterburner
#
# Used by:
# Modules named like: Dynamic Fuel Valve (8 of 8)
type = "passive"

2
eos/effects/accerationcontrolskillabmwdspeedboost.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# accerationControlSkillAb&MwdSpeedBoost
#
# Used by:
# Implant: Zor's Custom Navigation Hyper-Link
# Skill: Acceleration Control

View File

@@ -1,3 +1,5 @@
# accerationControlSpeedFBonusPostPercentSpeedFactorLocationShipGroupAfterburner
#
# Used by:
# Implants named like: Eifyr and Co. 'Rogue' Acceleration Control AC (6 of 6)
type = "passive"

View File

@@ -1,6 +1,9 @@
# accessDifficultyBonusModifierRequiringArchaelogy
#
# Used by:
# Modules named like: Emission Scope Sharpener (8 of 8)
# Implant: Poteque 'Prospector' Archaeology AC-905
# Implant: Poteque 'Prospector' Environmental Analysis EY-1005
type = "passive"
def handler(fit, container, context):
fit.modules.filteredItemIncrease(lambda module: module.item.requiresSkill("Archaeology"),

View File

@@ -1,5 +1,8 @@
# accessDifficultyBonusModifierRequiringHacking
#
# Used by:
# Modules named like: Memetic Algorithm Bank (8 of 8)
# Implant: Poteque 'Prospector' Environmental Analysis EY-1005
# Implant: Poteque 'Prospector' Hacking HC-905
type = "passive"
def handler(fit, container, context):

2
eos/effects/adaptivearmorhardener.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# adaptiveArmorHardener
#
# Used by:
# Module: Reactive Armor Hardener
type = "active"

5
eos/effects/addtosignatureradius2.py Executable file → Normal file
View File

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

View File

@@ -1,3 +1,5 @@
# advancedDroneInterfacingMaxGroupDCUSkillLevel
#
# Used by:
# Skill: Advanced Drone Interfacing
type = "passive"

View File

@@ -1,3 +1,5 @@
# afterburnerDurationBonusPostPercentDurationLocationShipModulesRequiringAfterburner
#
# Used by:
# Implants named like: Eifyr and Co. 'Rogue' Afterburner AB (6 of 6)
# Implant: Zor's Custom Navigation Link

8
eos/effects/agilitymultipliereffect.py Executable file → Normal file
View File

@@ -1,7 +1,9 @@
# agilityMultiplierEffect
#
# Used by:
# Modules from group: Inertia Stabilizer (12 of 12)
# Modules from group: Nanofiber Internal Structure (14 of 14)
# Modules from group: Reinforced Bulkhead (12 of 12)
# Modules from group: Inertial Stabilizer (7 of 7)
# Modules from group: Nanofiber Internal Structure (7 of 7)
# Modules from group: Reinforced Bulkhead (8 of 8)
type = "passive"
def handler(fit, module, context):
fit.ship.boostItemAttr("agility",

2
eos/effects/agilitymultipliereffectpassive.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# agilityMultiplierEffectPassive
#
# Used by:
# Modules named like: Polycarbon Engine Housing (8 of 8)
type = "passive"

2
eos/effects/ammofallofmultiplier.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# ammoFallofMultiplier
#
# Used by:
# Charges from group: Advanced Artillery Ammo (6 of 6)
# Charges from group: Advanced Autocannon Ammo (6 of 6)

4
eos/effects/ammoinfluencecapneed.py Executable file → Normal file
View File

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

4
eos/effects/ammoinfluencerange.py Executable file → Normal file
View File

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

4
eos/effects/ammospeedmultiplier.py Executable file → Normal file
View File

@@ -1,7 +1,9 @@
# ammoSpeedMultiplier
#
# Used by:
# Charges from group: Festival Charges (8 of 8)
# Charges from group: Interdiction Probe (2 of 2)
# Charges from group: Survey Probe (3 of 3)
# Charge: Warp Disrupt Probe
type = "passive"
def handler(fit, module, context):
module.multiplyItemAttr("speed", module.getModifiedChargeAttr("speedMultiplier") or 1)

2
eos/effects/ammotrackingmultiplier.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# ammoTrackingMultiplier
#
# Used by:
# Charges from group: Advanced Artillery Ammo (6 of 6)
# Charges from group: Advanced Autocannon Ammo (6 of 6)

4
eos/effects/angelsetbonus.py Executable file → Normal file
View File

@@ -1,5 +1,7 @@
# angelsetbonus
#
# Used by:
# Implants named like: Halo (12 of 12)
# Implants named like: grade Halo (18 of 18)
runTime = "early"
type = "passive"
def handler(fit, implant, context):

2
eos/effects/antiwarpscramblingpassive.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# antiWarpScramblingPassive
#
# Used by:
# Modules from group: Warp Core Stabilizer (8 of 8)
type = "passive"

View File

@@ -1,6 +1,9 @@
# archaeologySkillVirusBonus
#
# Used by:
# Modules named like: Emission Scope Sharpener (8 of 8)
# Implant: Poteque 'Prospector' Archaeology AC-905
# Implant: Poteque 'Prospector' Environmental Analysis EY-1005
# Skill: Archaeology
type = "passive"
def handler(fit, container, context):

2
eos/effects/armorallrepairsystemsamountbonuspassive.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# armorAllRepairSystemsAmountBonusPassive
#
# Used by:
# Implants named like: Exile Booster (4 of 4)
type = "passive"

View File

@@ -1,3 +1,5 @@
# armorDamageAmountBonusCapitalArmorRepairers
#
# Used by:
# Modules named like: Auxiliary Nano Pump (8 of 8)
type = "passive"

View File

@@ -1,3 +1,5 @@
# armoredSquadronCommand
#
# Used by:
# Skill: Armored Warfare Specialist
runTime = "early"

2
eos/effects/armoredwarfaremindlink.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# armoredWarfareMindlink
#
# Used by:
# Implant: Armored Warfare Mindlink
# Implant: Federation Navy Warfare Mindlink

4
eos/effects/armorhpbonusadd.py Executable file → Normal file
View File

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

2
eos/effects/armorhpbonusaddpassive.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# armorHPBonusAddPassive
#
# Used by:
# Subsystems from group: Defensive Systems (16 of 16)
type = "passive"

2
eos/effects/armorhpmultiply.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# armorHPMultiply
#
# Used by:
# Modules from group: Armor Coating (202 of 202)
# Modules from group: Armor Plating Energized (187 of 187)

4
eos/effects/armorreinforcermassadd.py Executable file → Normal file
View File

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

2
eos/effects/armorrepair.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# armorRepair
#
# Used by:
# Modules from group: Armor Repair Unit (100 of 100)
runTime = "late"

2
eos/effects/armorrepairprojectormaxrangebonus.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# armorRepairProjectorMaxRangeBonus
#
# Used by:
# Ship: Augoror
# Ship: Exequror

2
eos/effects/armortankinggang.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# armorTankingGang
#
# Used by:
# Skill: Armored Warfare
type = "gang"

2
eos/effects/armortankinggang2.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# armorTankingGang2
#
# Used by:
# Implant: Armored Warfare Mindlink
# Implant: Federation Navy Warfare Mindlink

2
eos/effects/armorupgradesmasspenaltyreductionbonus.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# armorUpgradesMassPenaltyReductionBonus
#
# Used by:
# Skill: Armor Layering
type = "passive"

View File

@@ -1,3 +1,5 @@
# astrogeologyMiningAmountBonusPostPercentMiningAmountLocationShipModulesRequiringMining
#
# Used by:
# Implants named like: Inherent Implants 'Highwall' Mining MX (3 of 3)
# Implant: Michi's Excavation Augmentor

View File

@@ -1,3 +1,5 @@
# baseMaxScanDeviationModifierModuleOnline2None
#
# Used by:
# Variations of module: Scan Pinpointing Array I (2 of 2)
type = "passive"

View File

@@ -1,3 +1,5 @@
# baseMaxScanDeviationModifierRequiringAstrometrics
#
# Used by:
# Implants named like: Poteque 'Prospector' Astrometric Pinpointing AP (3 of 3)
# Skill: Astrometric Pinpointing

View File

@@ -1,3 +1,5 @@
# baseSensorStrengthModifierModule
#
# Used by:
# Variations of module: Scan Rangefinding Array I (2 of 2)
type = "passive"

View File

@@ -1,7 +1,9 @@
# baseSensorStrengthModifierRequiringAstrometrics
#
# Used by:
# Modules from group: Scan Probe Launcher (4 of 7)
# Implants named like: Low grade Virtue (5 of 6)
# Implants named like: Poteque 'Prospector' Astrometric Rangefinding AR (3 of 3)
# Implants named like: grade Virtue (10 of 12)
# Modules named like: Gravity Capacitor Upgrade (8 of 8)
# Skill: Astrometric Rangefinding
# Skill: Astrometrics

2
eos/effects/bclargeenergyturretcapacitorneedbonus.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# bcLargeEnergyTurretCapacitorNeedBonus
#
# Used by:
# Ship: Oracle
type = "passive"

2
eos/effects/bclargeenergyturretcpuneedbonus.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# bcLargeEnergyTurretCPUNeedBonus
#
# Used by:
# Ship: Oracle
type = "passive"

2
eos/effects/bclargeenergyturretpowerneedbonus.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# bcLargeEnergyTurretPowerNeedBonus
#
# Used by:
# Ship: Oracle
type = "passive"

2
eos/effects/bclargehybridturretcapacitorneedbonus.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# bcLargeHybridTurretCapacitorNeedBonus
#
# Used by:
# Ship: Naga
# Ship: Talos

2
eos/effects/bclargehybridturretcpuneedbonus.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# bcLargeHybridTurretCPUNeedBonus
#
# Used by:
# Ship: Naga
# Ship: Talos

2
eos/effects/bclargehybridturretpowerneedbonus.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# bcLargeHybridTurretPowerNeedBonus
#
# Used by:
# Ship: Naga
# Ship: Talos

2
eos/effects/bclargeprojectileturretcpuneedbonus.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# bcLargeProjectileTurretCPUNeedBonus
#
# Used by:
# Ship: Tornado
type = "passive"

2
eos/effects/bclargeprojectileturretpowerneedbonus.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# bcLargeProjectileTurretPowerNeedBonus
#
# Used by:
# Ship: Tornado
type = "passive"

2
eos/effects/biologytimebonusfixed.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# biologyTimeBonusFixed
#
# Used by:
# Implants named like: Eifyr and Co. 'Alchemist' Biology BY (2 of 2)
# Skill: Biology

2
eos/effects/blockaderunnercloakcpupercentbonus.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# blockadeRunnerCloakCpuPercentBonus
#
# Used by:
# Ships from group: Blockade Runner (4 of 4)
type = "passive"

2
eos/effects/boosterarmorhppenalty.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# boosterArmorHpPenalty
#
# Used by:
# Implants from group: Booster (12 of 37)
type = "boosterSideEffect"

2
eos/effects/boosterarmorrepairamountpenalty.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# boosterArmorRepairAmountPenalty
#
# Used by:
# Implants from group: Booster (9 of 37)
type = "boosterSideEffect"

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