Compare commits

...

141 Commits

Author SHA1 Message Date
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
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
2059 changed files with 8161 additions and 2652 deletions

6
.gitignore vendored
View File

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

15
README.md Normal file
View File

@@ -0,0 +1,15 @@
# 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
#### 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/)

View File

@@ -13,12 +13,16 @@ debug = False
saveInRoot = False
# Version data
version = "1.4.0"
version = "1.7.0"
tag = "Stable"
expansionName = "Hyperion"
expansionName = "Rhea"
expansionVersion = "1.0"
evemonMinVersion = "4081"
# Database version (int ONLY)
# Increment every time we need to flag for user database upgrade/modification
dbversion = 3
pyfaPath = None
savePath = None
staticPath = None

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, getBoosterFits, getProjectedFits
getSquad, getBoosterFits, getProjectedFits, getTargetResistsList, getTargetResists,\
clearPrices
#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()

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),

View File

@@ -30,6 +30,7 @@ items_table = Table("invtypes", gamedata_meta,
Column("typeName", String, index=True),
Column("description", String),
Column("raceID", Integer),
Column("factionID", Integer),
Column("volume", Float),
Column("mass", Float),
Column("capacity", Float),
@@ -53,9 +54,8 @@ mapper(Item, items_table,
"name" : synonym("typeName"),
"description" : deferred(items_table.c.description),
"traits" : relation(Traits,
primaryjoin = traits_table.c.typeID == items_table.c.typeID,
order_by = traits_table.c.typeID,
uselist = True)
primaryjoin = traits_table.c.typeID == items_table.c.typeID,
uselist = False)
})
Item.category = association_proxy("group", "category")

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)

View File

@@ -1,22 +1,11 @@
from sqlalchemy import Column, Table, Integer, String, ForeignKey, and_, select
from sqlalchemy.orm import mapper, column_property
from eos.types import Item, Traits
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("skillID", Integer, ForeignKey("invtypes.typeID"), primary_key=True),
Column("bonusText", String, primary_key=True))
Column("traitText", String))
from .item import items_table
mapper(Traits, traits_table,
properties = {"skillName" : column_property(
select([items_table.c.typeName],
and_(
items_table.c.typeID == traits_table.c.skillID,
traits_table.c.skillID != -1
)))
});
mapper(Traits, traits_table);

View File

@@ -1,59 +1,32 @@
import sqlalchemy
import config
import shutil
import time
def getVersion(db):
cursor = db.execute('PRAGMA user_version')
return cursor.fetchone()[0]
def update(saveddata_engine):
checkPriceFailures(saveddata_engine)
checkApiDefaultChar(saveddata_engine)
checkFitBooster(saveddata_engine)
currversion = getVersion(saveddata_engine)
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 currversion == config.dbversion:
return
if currversion < config.dbversion:
# Automatically backup database
toFile = "%s/saveddata_migration_%d-%d_%s.db"%(
config.savePath,
currversion,
config.dbversion,
time.strftime("%Y%m%d_%H%M%S"))
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;")
shutil.copyfile(config.saveDB, toFile)
def checkFitBooster(saveddata_engine):
try:
saveddata_engine.execute("SELECT * FROM fits LIMIT 1")
# If table doesn't exist, it means we're doing everything from scratch
# and sqlalchemy will process everything as needed
except sqlalchemy.exc.DatabaseError:
pass
# If not, we're running on top of existing DB
else:
# Check that we have columns
try:
saveddata_engine.execute("SELECT booster FROM fits LIMIT 1")
# If we don't, create them
except sqlalchemy.exc.DatabaseError:
saveddata_engine.execute("ALTER TABLE fits ADD COLUMN booster BOOLEAN;")
# Set NULL data to 0 (needed in case of downgrade, see GH issue #62
saveddata_engine.execute("UPDATE fits SET booster = 0 WHERE booster IS NULL;")
for version in xrange(currversion, config.dbversion):
module = __import__('eos.db.migrations.upgrade%d'%(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 = %d'%config.dbversion)

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,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 mode FROM fits LIMIT 1")
except sqlalchemy.exc.DatabaseError:
saveddata_engine.execute("ALTER TABLE fits ADD COLUMN modeID INTEGER")

View File

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

View File

@@ -26,10 +26,11 @@ 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, Cargo, Implant, Character, DamagePattern
from eos.types import Fit, Module, User, Booster, Drone, Cargo, Implant, Character, DamagePattern, TargetResists
from eos.effectHandlerHelpers import HandledModuleList, HandledDroneList, \
HandledImplantBoosterList, HandledProjectedModList, HandledProjectedDroneList, \
HandledProjectedFitList, HandledCargoList
fits_table = Table("fits", saveddata_meta,
Column("ID", Integer, primary_key = True),
Column("ownerID", ForeignKey("users.ID"), nullable = True, index = True),
@@ -38,7 +39,10 @@ fits_table = Table("fits", saveddata_meta,
Column("timestamp", Integer, nullable = False),
Column("characterID", ForeignKey("characters.ID"), nullable = True),
Column("damagePatternID", ForeignKey("damagePatterns.ID"), nullable=True),
Column("booster", Boolean, nullable = False, index = True, default = 0))
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),
@@ -64,6 +68,7 @@ mapper(Fit, fits_table,
secondary = fitImplants_table),
"_Fit__character" : relation(Character, backref = "fits"),
"_Fit__damagePattern" : relation(DamagePattern),
"_Fit__targetResists" : relation(TargetResists),
"_Fit__projectedFits" : relation(Fit,
primaryjoin = projectedFits_table.c.victimID == fits_table.c.ID,
secondaryjoin = fits_table.c.ID == projectedFits_table.c.sourceID,

View File

@@ -19,7 +19,7 @@
from eos.db.util import processEager, processWhere
from eos.db import saveddata_session, sd_lock
from eos.types import User, Character, Fit, Price, DamagePattern, Fleet, MiscData, Wing, Squad
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_
@@ -308,6 +308,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:
@@ -322,6 +328,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):
@@ -340,6 +352,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")
@@ -361,7 +391,7 @@ def getSquadsIDsWithFitID(fitID):
return squads
else:
raise TypeError("Need integer as argument")
def getProjectedFits(fitID):
if isinstance(fitID, int):
with sd_lock:
@@ -369,7 +399,7 @@ def getProjectedFits(fitID):
fits = saveddata_session.query(Fit).filter(filter).all()
return fits
else:
raise TypeError("Need integer as argument")
raise TypeError("Need integer as argument")
def add(stuff):
with sd_lock:

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)

View File

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

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,3 +1,5 @@
# accessDifficultyBonusModifierRequiringArchaelogy
#
# Used by:
# Modules named like: Emission Scope Sharpener (8 of 8)
# Implant: Poteque 'Prospector' Archaeology AC-905

View File

@@ -1,3 +1,5 @@
# accessDifficultyBonusModifierRequiringHacking
#
# Used by:
# Modules named like: Memetic Algorithm Bank (8 of 8)
# Implant: Poteque 'Prospector' Environmental Analysis EY-1005

View File

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

View File

@@ -1,4 +1,7 @@
# addToSignatureRadius2
#
# Used by:
# Modules from group: Missile Launcher Bomb (2 of 2)
# Modules from group: Shield Extender (37 of 37)
type = "passive"
def handler(fit, module, context):

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

View File

@@ -1,3 +1,5 @@
# agilityMultiplierEffect
#
# Used by:
# Modules from group: Inertia Stabilizer (12 of 12)
# Modules from group: Nanofiber Internal Structure (14 of 14)

View File

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

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)

View File

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

View File

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

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)

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)

View File

@@ -1,3 +1,5 @@
# angelsetbonus
#
# Used by:
# Implants named like: grade Halo (18 of 18)
runTime = "early"

View File

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

View File

@@ -1,3 +1,5 @@
# archaeologySkillVirusBonus
#
# Used by:
# Modules named like: Emission Scope Sharpener (8 of 8)
# Implant: Poteque 'Prospector' Archaeology AC-905

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"

View File

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

View File

@@ -1,3 +1,5 @@
# armorHPBonusAdd
#
# Used by:
# Modules from group: Armor Reinforcer (57 of 57)
type = "passive"

View File

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

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)

View File

@@ -1,3 +1,5 @@
# armorReinforcerMassAdd
#
# Used by:
# Modules from group: Armor Reinforcer (57 of 57)
type = "passive"

View File

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

View File

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

View File

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

View File

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

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,3 +1,5 @@
# baseSensorStrengthModifierRequiringAstrometrics
#
# Used by:
# Modules from group: Scan Probe Launcher (4 of 7)
# Implants named like: Poteque 'Prospector' Astrometric Rangefinding AR (3 of 3)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,3 +1,5 @@
# boosterCapacitorCapacityPenalty
#
# Used by:
# Implants named like: Blue Pill Booster (3 of 5)
# Implants named like: Exile Booster (3 of 4)

View File

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

View File

@@ -1,3 +1,5 @@
# boosterMissileExplosionCloudPenaltyFixed
#
# Used by:
# Implants named like: Exile Booster (3 of 4)
# Implants named like: Mindflood Booster (3 of 4)

View File

@@ -1,3 +1,5 @@
# boosterMissileExplosionVelocityPenalty
#
# Used by:
# Implants named like: Blue Pill Booster (3 of 5)
type = "boosterSideEffect"

View File

@@ -1,3 +1,5 @@
# boosterMissileVelocityPenalty
#
# Used by:
# Implants named like: Crash Booster (3 of 4)
# Implants named like: X Instinct Booster (3 of 4)

View File

@@ -1,3 +1,5 @@
# boosterModifyBoosterArmorPenalties
#
# Used by:
# Implants named like: Eifyr and Co. 'Alchemist' Neurotoxin Control NC (2 of 2)
# Implants named like: grade Edge (10 of 12)

View File

@@ -1,3 +1,5 @@
# boosterModifyBoosterMaxVelocityAndCapacitorPenalty
#
# Used by:
# Implants named like: Eifyr and Co. 'Alchemist' Neurotoxin Control NC (2 of 2)
# Implants named like: grade Edge (10 of 12)

View File

@@ -1,3 +1,5 @@
# boosterModifyBoosterMissilePenalty
#
# Used by:
# Implants named like: Eifyr and Co. 'Alchemist' Neurotoxin Control NC (2 of 2)
# Implants named like: grade Edge (10 of 12)

View File

@@ -1,3 +1,5 @@
# boosterModifyBoosterShieldPenalty
#
# Used by:
# Implants named like: Eifyr and Co. 'Alchemist' Neurotoxin Control NC (2 of 2)
# Implants named like: grade Edge (10 of 12)

View File

@@ -1,3 +1,5 @@
# boosterModifyBoosterTurretPenalty
#
# Used by:
# Implants named like: Eifyr and Co. 'Alchemist' Neurotoxin Control NC (2 of 2)
# Implants named like: grade Edge (10 of 12)

View File

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

View File

@@ -1,3 +1,5 @@
# boosterTurretFalloffPenalty
#
# Used by:
# Implants named like: Drop Booster (3 of 4)
# Implants named like: X Instinct Booster (3 of 4)

View File

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

View File

@@ -1,3 +1,5 @@
# boosterTurretTrackingPenalty
#
# Used by:
# Implants named like: Exile Booster (3 of 4)
# Implants named like: Frentix Booster (3 of 4)

View File

@@ -1,3 +1,5 @@
# caldarisetbonus3
#
# Used by:
# Implants named like: High grade Talon (6 of 6)
runTime = "early"

View File

@@ -1,3 +1,5 @@
# caldarisetLGbonus
#
# Used by:
# Implants named like: Low grade Talon (6 of 6)
runTime = "early"

View File

@@ -1,3 +1,5 @@
# caldariShipECMBurstOptimalRangeCB3
#
# Used by:
# Ship: Scorpion
# Ship: Scorpion Ishukone Watch

View File

@@ -1,3 +1,5 @@
# caldariShipEwCapacitorNeedCC
#
# Used by:
# Ship: Chameleon
# Ship: Falcon

View File

@@ -1,3 +1,5 @@
# caldariShipEwCapacitorNeedCF2
#
# Used by:
# Variations of ship: Griffin (2 of 2)
type = "passive"

View File

@@ -1,3 +1,5 @@
# caldariShipEwFalloffRangeCB3
#
# Used by:
# Ship: Scorpion
# Ship: Scorpion Ishukone Watch

View File

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

View File

@@ -1,3 +1,5 @@
# caldariShipEwOptimalRangeCB3
#
# Used by:
# Ship: Scorpion
# Ship: Scorpion Ishukone Watch

View File

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

View File

@@ -1,3 +1,5 @@
# caldariShipEwStrengthCB
#
# Used by:
# Ship: Scorpion
# Ship: Scorpion Ishukone Watch

View File

@@ -1,3 +1,5 @@
# capacitorCapacityAddPassive
#
# Used by:
# Subsystems from group: Engineering Systems (16 of 16)
# Subsystem: Tengu Offensive - Magnetic Infusion Basin

View File

@@ -1,3 +1,5 @@
# capacitorCapacityBonus
#
# Used by:
# Modules from group: Capacitor Battery (27 of 27)
type = "passive"

View File

@@ -1,9 +1,11 @@
# capacitorCapacityMultiply
#
# Used by:
# Modules from group: Capacitor Flux Coil (12 of 12)
# Modules from group: Capacitor Flux Coil (6 of 6)
# Modules from group: Capacitor Power Relay (26 of 26)
# Modules from group: Power Diagnostic System (31 of 31)
# Modules from group: Propulsion Module (107 of 107)
# Modules from group: Reactor Control Unit (28 of 28)
# Modules from group: Reactor Control Unit (22 of 22)
# Modules from group: Shield Flux Coil (11 of 11)
# Modules from group: Shield Power Relay (11 of 11)
type = "passive"

View File

@@ -1,3 +1,5 @@
# capacitorEmissionSystemskill
#
# Used by:
# Implants named like: Inherent Implants 'Squire' Capacitor Emission Systems ES (6 of 6)
# Modules named like: Egress Port Maximizer (8 of 8)

View File

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

View File

@@ -1,3 +1,5 @@
# capitalLauncherSkillCitadelEmDamage
#
# Used by:
# Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6)
# Skill: Citadel Torpedoes

View File

@@ -1,3 +1,5 @@
# capitalLauncherSkillCitadelExplosiveDamage
#
# Used by:
# Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6)
# Skill: Citadel Torpedoes

View File

@@ -1,3 +1,5 @@
# capitalLauncherSkillCitadelKineticDamage
#
# Used by:
# Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6)
# Skill: Citadel Torpedoes

View File

@@ -1,3 +1,5 @@
# capitalLauncherSkillCitadelThermalDamage
#
# Used by:
# Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6)
# Skill: Citadel Torpedoes

View File

@@ -1,3 +1,5 @@
# capitalLauncherSkillCruiseCitadelEmDamage1
#
# Used by:
# Skill: Citadel Cruise Missiles
type = "passive"

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