diff --git a/eos/db/saveddata/__init__.py b/eos/db/saveddata/__init__.py index e43c6e601..c97707f68 100644 --- a/eos/db/saveddata/__init__.py +++ b/eos/db/saveddata/__init__.py @@ -14,6 +14,7 @@ __all__ = [ "targetResists", "override", "crest", - "implantSet" + "implantSet", + "loadDefaultDatabaseValues" ] diff --git a/eos/db/saveddata/loadDefaultDatabaseValues.py b/eos/db/saveddata/loadDefaultDatabaseValues.py new file mode 100644 index 000000000..6eb38ef1d --- /dev/null +++ b/eos/db/saveddata/loadDefaultDatabaseValues.py @@ -0,0 +1,186 @@ +#=============================================================================== +# Copyright (C) 2010 Diego Duclos +# +# This file is part of pyfa. +# +# pyfa is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# pyfa is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with pyfa. If not, see . +#=============================================================================== + +import eos.db +import eos.types + +class ImportError(Exception): + pass + +class defaultDatabaseValues(): + instance = None + @classmethod + + def importDamageProfileDefaults(self): + damageProfileList = [] + damageProfileList.append(["Uniform", "25", "25", "25", "25"]) + damageProfileList.append(["[Generic]EM", "100", "0", "0", "0"]) + damageProfileList.append(["[Generic]Thermal", "0", "100", "0", "0"]) + damageProfileList.append(["[Generic]Kinetic", "0", "0", "100", "0"]) + damageProfileList.append(["[Generic]Explosive", "0", "0", "0", "100"]) + damageProfileList.append(["[NPC][Asteroid] Blood Raiders", "5067", "4214", "0", "0"]) + damageProfileList.append(["[Bombs]Concussion Bomb", "0", "0", "6400", "0"]) + damageProfileList.append(["[Bombs]Electron Bomb", "6400", "0", "0", "0"]) + damageProfileList.append(["[Bombs]Scorch Bomb", "0", "6400", "0", "0"]) + damageProfileList.append(["[Bombs]Shrapnel Bomb", "0", "0", "0", "6400"]) + damageProfileList.append(["[Frequency Crystals][T2] Gleam", "56", "56", "0", "0"]) + damageProfileList.append(["[Frequency Crystals][T2] Aurora", "40", "24", "0", "0"]) + damageProfileList.append(["[Frequency Crystals][T2] Scorch", "72", "16", "0", "0"]) + damageProfileList.append(["[Frequency Crystals][T2] Conflagration", "61.6", "61.6", "0", "0"]) + damageProfileList.append(["[Frequency Crystals]Gamma", "61.6", "35.2", "0", "0"]) + damageProfileList.append(["[Frequency Crystals]Infrared", "44", "17.6", "0", "0"]) + damageProfileList.append(["[Frequency Crystals]Microwave", "35.2", "17.6", "0", "0"]) + damageProfileList.append(["[Frequency Crystals]Multifrequency", "61.6", "44", "0", "0"]) + damageProfileList.append(["[Frequency Crystals]Radio", "44", "0", "0", "0"]) + damageProfileList.append(["[Frequency Crystals]Standard", "44", "26.4", "0", "0"]) + damageProfileList.append(["[Frequency Crystals]Ultraviolet", "52.8", "26.4", "0", "0"]) + damageProfileList.append(["[Frequency Crystals]Xray", "52.8", "35.2", "0", "0"]) + damageProfileList.append(["[Hybrid Charges][T2] Void", "0", "61.6", "61.6", "0"]) + damageProfileList.append(["[Hybrid Charges][T2] Null", "0", "48", "40", "0"]) + damageProfileList.append(["[Hybrid Charges][T2] Javelin", "0", "64", "48", "0"]) + damageProfileList.append(["[Hybrid Charges][T2] Spike", "0", "32", "32", "0"]) + damageProfileList.append(["[Hybrid Charges]Antimatter", "0", "48", "67.2", "0"]) + damageProfileList.append(["[Hybrid Charges]Iridium", "0", "28.8", "38.4", "0"]) + damageProfileList.append(["[Hybrid Charges]Iron", "0", "19.2", "28.8", "0"]) + damageProfileList.append(["[Hybrid Charges]Lead", "0", "28.8", "48", "0"]) + damageProfileList.append(["[Hybrid Charges]Plutonium", "0", "48", "57.6", "0"]) + damageProfileList.append(["[Hybrid Charges]Thorium", "0", "38.4", "48", "0"]) + damageProfileList.append(["[Hybrid Charges]Tungsten", "0", "19.2", "38.4", "0"]) + damageProfileList.append(["[Hybrid Charges]Uranium", "0", "38.4", "57.6", "0"]) + damageProfileList.append(["[Missiles]Mjolnir", "100", "0", "0", "0"]) + damageProfileList.append(["[Missiles]Inferno", "0", "100", "0", "0"]) + damageProfileList.append(["[Missiles]Scourge", "0", "0", "100", "0"]) + damageProfileList.append(["[Missiles]Nova", "0", "0", "0", "100"]) + damageProfileList.append(["[Missiles][Structure) Standup Missile", "100", "100", "100", "100"]) + damageProfileList.append(["[Projectile Ammo][T2] Tremor", "0", "0", "24", "40"]) + damageProfileList.append(["[Projectile Ammo][T2] Quake", "0", "0", "40", "72"]) + damageProfileList.append(["[Projectile Ammo][T2] Hail", "0", "0", "26.4", "96.8"]) + damageProfileList.append(["[Projectile Ammo][T2] Barrage", "0", "0", "40", "48"]) + damageProfileList.append(["[Projectile Ammo]Carbonized Lead", "0", "0", "35.2", "8.8"]) + damageProfileList.append(["[Projectile Ammo]Depleted Uranium", "0", "26.4", "17.6", "26.4"]) + damageProfileList.append(["[Projectile Ammo]EMP", "79.2", "0", "8.8", "17.6"]) + damageProfileList.append(["[Projectile Ammo]Fusion", "0", "0", "17.6", "88"]) + damageProfileList.append(["[Projectile Ammo]Nuclear", "0", "0", "8.8", "35.2"]) + damageProfileList.append(["[Projectile Ammo]Phased Plasma", "0", "88", "17.6", "0"]) + damageProfileList.append(["[Projectile Ammo]Proton", "26.4", "0", "17.6", "0"]) + damageProfileList.append(["[Projectile Ammo]Titanium Sabot", "0", "0", "52.8", "176"]) + damageProfileList.append(["[NPC][Burner] Cruor (Blood Raiders)", "90", "90", "0", "0"]) + damageProfileList.append(["[NPC][Burner] Dramiel (Angel)", "55", "0", "20", "96"]) + damageProfileList.append(["[NPC][Burner] Daredevil (Serpentis)", "0", "110", "154", "0"]) + damageProfileList.append(["[NPC][Burner] Succubus (Sanshas Nation)", "135", "30", "0", "0"]) + damageProfileList.append(["[NPC][Burner] Worm (Guristas)", "0", "0", "228", "0"]) + damageProfileList.append(["[NPC][Burner] Enyo", "0", "147", "147", "0"]) + damageProfileList.append(["[NPC][Burner] Hawk", "0", "0", "247", "0"]) + damageProfileList.append(["[NPC][Burner] Jaguar", "36", "0", "50", "182"]) + damageProfileList.append(["[NPC][Burner] Vengeance", "232", "0", "0", "0"]) + damageProfileList.append(["[NPC][Burner] Ashimmu (Blood Raiders)", "260", "100", "0", "0"]) + damageProfileList.append(["[NPC][Burner] Talos", "0", "413", "413", "0"]) + damageProfileList.append(["[NPC][Burner] Sentinel", "0", "75", "0", "90"]) + damageProfileList.append(["[NPC][Asteroid] Angel Cartel", "1838", "562", "2215", "3838"]) + damageProfileList.append(["[NPC][Deadspace] Angel Cartel", "369", "533", "1395", "3302"]) + damageProfileList.append(["[NPC][Deadspace] Blood Raiders", "6040", "5052", "10", "15"]) + damageProfileList.append(["[NPC][Asteroid] Guristas", "0", "1828", "7413", "0"]) + damageProfileList.append(["[NPC][Deadspace] Guristas", "0", "1531", "9680", "0"]) + damageProfileList.append(["[NPC][Asteroid] Rogue Drone", "394", "666", "1090", "1687"]) + damageProfileList.append(["[NPC][Deadspace] Rogue Drone", "276", "1071", "1069", "871"]) + damageProfileList.append(["[NPC][Asteroid] Sanshas Nation", "5586", "4112", "0", "0"]) + damageProfileList.append(["[NPC][Deadspace] Sanshas Nation", "3009", "2237", "0", "0"]) + damageProfileList.append(["[NPC][Asteroid] Serpentis", "0", "5373", "4813", "0"]) + damageProfileList.append(["[NPC][Deadspace] Serpentis", "0", "3110", "1929", "0"]) + damageProfileList.append(["[NPC][Mission] Amarr Empire", "4464", "3546", "97", "0"]) + damageProfileList.append(["[NPC][Mission] Caldari State", "0", "2139", "4867", "0"]) + damageProfileList.append(["[NPC][Mission] CONCORD", "336", "134", "212", "412"]) + damageProfileList.append(["[NPC][Mission] Gallente Federation", "9", "3712", "2758", "0"]) + damageProfileList.append(["[NPC][Mission] Khanid", "612", "483", "43", "6"]) + damageProfileList.append(["[NPC][Mission] Minmatar Republic", "1024", "388", "1655", "4285"]) + damageProfileList.append(["[NPC][Mission] Mordus Legion", "25", "262", "625", "0"]) + damageProfileList.append(["[NPC][Mission] Thukker", "0", "52", "10", "79"]) + damageProfileList.append(["[NPC][Other] Sleepers", "1472", "1472", "1384", "1384"]) + damageProfileList.append(["[NPC][Other] Sansha Incursion", "1682", "1347", "3678", "3678"]) + + for damageProfileRow in damageProfileList: + damageProfile = eos.db.getDamagePattern(damageProfileRow[0]) + if damageProfile is None: + damageProfile = eos.types.DamagePattern(damageProfileRow[1], damageProfileRow[2], damageProfileRow[3], damageProfileRow[4]) + damageProfile.name = damageProfileRow[0] + eos.db.save(damageProfile) + + def importResistProfileDefaults(self): + targetResistProfileList = [] + targetResistProfileList.append(["Uniform (25%)", "0.25", "0.25", "0.25", "0.25"]) + targetResistProfileList.append(["Uniform (50%)", "0.50", "0.50", "0.50", "0.50"]) + targetResistProfileList.append(["Uniform (75%)", "0.75", "0.75", "0.75", "0.75"]) + targetResistProfileList.append(["[T1 Resist]Shield", "0.0", "0.20", "0.40", "0.50"]) + targetResistProfileList.append(["[T1 Resist]Armor", "0.50", "0.45", "0.25", "0.10"]) + targetResistProfileList.append(["[T1 Resist]Hull", "0.33", "0.33", "0.33", "0.33"]) + targetResistProfileList.append(["[T1 Resist]Shield (+T2 DCU)", "0.125", "0.30", "0.475", "0.562"]) + targetResistProfileList.append(["[T1 Resist]Armor (+T2 DCU)", "0.575", "0.532", "0.363", "0.235"]) + targetResistProfileList.append(["[T1 Resist]Hull (+T2 DCU)", "0.598", "0.598", "0.598", "0.598"]) + targetResistProfileList.append(["[NPC][Asteroid] Angel Cartel", "0.54", "0.42", "0.37", "0.32"]) + targetResistProfileList.append(["[NPC][Asteroid] Blood Raiders", "0.34", "0.39", "0.45", "0.52"]) + targetResistProfileList.append(["[NPC][Asteroid] Guristas", "0.55", "0.35", "0.3", "0.48"]) + targetResistProfileList.append(["[NPC][Asteroid] Rogue Drones", "0.35", "0.38", "0.44", "0.49"]) + targetResistProfileList.append(["[NPC][Asteroid] Sanshas Nation", "0.35", "0.4", "0.47", "0.53"]) + targetResistProfileList.append(["[NPC][Asteroid] Serpentis", "0.49", "0.38", "0.29", "0.51"]) + targetResistProfileList.append(["[NPC][Deadspace] Angel Cartel", "0.59", "0.48", "0.4", "0.32"]) + targetResistProfileList.append(["[NPC][Deadspace] Blood Raiders", "0.31", "0.39", "0.47", "0.56"]) + targetResistProfileList.append(["[NPC][Deadspace] Guristas", "0.57", "0.39", "0.31", "0.5"]) + targetResistProfileList.append(["[NPC][Deadspace] Rogue Drones", "0.42", "0.42", "0.47", "0.49"]) + targetResistProfileList.append(["[NPC][Deadspace] Sanshas Nation", "0.31", "0.39", "0.47", "0.56"]) + targetResistProfileList.append(["[NPC][Deadspace] Serpentis", "0.49", "0.38", "0.29", "0.56"]) + targetResistProfileList.append(["[NPC][Mission] Amarr Empire", "0.34", "0.38", "0.42", "0.46"]) + targetResistProfileList.append(["[NPC][Mission] Caldari State", "0.51", "0.38", "0.3", "0.51"]) + targetResistProfileList.append(["[NPC][Mission] CONCORD", "0.47", "0.46", "0.47", "0.47"]) + targetResistProfileList.append(["[NPC][Mission] Gallente Federation", "0.51", "0.38", "0.31", "0.52"]) + targetResistProfileList.append(["[NPC][Mission] Khanid", "0.51", "0.42", "0.36", "0.4"]) + targetResistProfileList.append(["[NPC][Mission] Minmatar Republic", "0.51", "0.46", "0.41", "0.35"]) + targetResistProfileList.append(["[NPC][Mission] Mordus Legion", "0.32", "0.48", "0.4", "0.62"]) + targetResistProfileList.append(["[NPC][Other] Sleeper", "0.61", "0.61", "0.61", "0.61"]) + targetResistProfileList.append(["[NPC][Other] Sansha Incursion", "0.65", "0.63", "0.64", "0.65"]) + targetResistProfileList.append(["[NPC][Burner] Cruor (Blood Raiders)", "0.8", "0.73", "0.69", "0.67"]) + targetResistProfileList.append(["[NPC][Burner] Dramiel (Angel)", "0.35", "0.48", "0.61", "0.68"]) + targetResistProfileList.append(["[NPC][Burner] Daredevil (Serpentis)", "0.69", "0.59", "0.59", "0.43"]) + targetResistProfileList.append(["[NPC][Burner] Succubus (Sanshas Nation)", "0.35", "0.48", "0.61", "0.68"]) + targetResistProfileList.append(["[NPC][Burner] Worm (Guristas)", "0.48", "0.58", "0.69", "0.74"]) + targetResistProfileList.append(["[NPC][Burner] Enyo", "0.58", "0.72", "0.86", "0.24"]) + targetResistProfileList.append(["[NPC][Burner] Hawk", "0.3", "0.86", "0.79", "0.65"]) + targetResistProfileList.append(["[NPC][Burner] Jaguar", "0.78", "0.65", "0.48", "0.56"]) + targetResistProfileList.append(["[NPC][Burner] Vengeance", "0.66", "0.56", "0.75", "0.86"]) + targetResistProfileList.append(["[NPC][Burner] Ashimmu (Blood Raiders)", "0.8", "0.76", "0.68", "0.7"]) + targetResistProfileList.append(["[NPC][Burner] Talos", "0.68", "0.59", "0.59", "0.43"]) + targetResistProfileList.append(["[NPC][Burner] Sentinel", "0.58", "0.45", "0.52", "0.66"]) + + for targetResistProfileRow in targetResistProfileList: + resistsProfile = eos.db.getTargetResists(targetResistProfileRow[0]) + if resistsProfile is None: + resistsProfile = eos.types.eos.types.TargetResists(targetResistProfileRow[1], targetResistProfileRow[2], targetResistProfileRow[3], targetResistProfileRow[4]) + resistsProfile.name = targetResistProfileRow[0] + eos.db.save(resistsProfile) + + def importRequiredDefaults(self): + damageProfileList = [] + damageProfileList.append(["Uniform", "25", "25", "25", "25"]) + + for damageProfileRow in damageProfileList: + damageProfile = eos.db.getDamagePattern(damageProfileRow[0]) + if damageProfile is None: + damageProfile = eos.types.DamagePattern(damageProfileRow[1], damageProfileRow[2], damageProfileRow[3], + damageProfileRow[4]) + damageProfile.name = damageProfileRow[0] + eos.db.save(damageProfile) diff --git a/eos/effects/adaptivearmorhardener.py b/eos/effects/adaptivearmorhardener.py index c3955ebf0..f2951320b 100644 --- a/eos/effects/adaptivearmorhardener.py +++ b/eos/effects/adaptivearmorhardener.py @@ -6,13 +6,5 @@ type = "active" def handler(fit, module, context): for type in ("kinetic", "thermal", "explosive", "em"): attr = "armor%sDamageResonance" % type.capitalize() - - #Adjust RAH to match the current damage pattern - damagePattern = fit.damagePattern - attrDamagePattern = "%sAmount" % type - damagePatternModifier = getattr(damagePattern,attrDamagePattern)/float(sum((damagePattern.emAmount,damagePattern.thermalAmount,damagePattern.kineticAmount,damagePattern.explosiveAmount))) - modifiedResistModifier = (1-(((1-module.getModifiedItemAttr(attr))*4)*(damagePatternModifier))) - module.forceItemAttr(attr, modifiedResistModifier) - fit.ship.multiplyItemAttr(attr, module.getModifiedItemAttr(attr), stackingPenalties=True, penaltyGroup="preMul") diff --git a/gui/mainFrame.py b/gui/mainFrame.py index 7557813db..91e16566a 100644 --- a/gui/mainFrame.py +++ b/gui/mainFrame.py @@ -38,6 +38,7 @@ import gui.aboutData import gui.chromeTabs import gui.utils.animUtils as animUtils import gui.globalEvents as GE +import eos.db.saveddata.loadDefaultDatabaseValues as loadDefaultDatabaseValues from gui.bitmapLoader import BitmapLoader from gui.mainMenuBar import MainMenuBar @@ -405,10 +406,22 @@ class MainFrame(wx.Frame): def goForums(self, event): webbrowser.open('https://forums.eveonline.com/default.aspx?g=posts&t=466425') + def loadDatabaseDefaults(self, event): + # Import default database values + importDBDefaults = loadDefaultDatabaseValues.defaultDatabaseValues() + # Import values that must exist otherwise Pyfa breaks + importDBDefaults.importRequiredDefaults() + # Import default values for damage profiles + importDBDefaults.importDamageProfileDefaults() + # Import default values for target resist profiles + importDBDefaults.importResistProfileDefaults() + def registerMenu(self): menuBar = self.GetMenuBar() # Quit self.Bind(wx.EVT_MENU, self.ExitApp, id=wx.ID_EXIT) + # Load Default Database values + self.Bind(wx.EVT_MENU, self.loadDatabaseDefaults, id=menuBar.importDatabaseDefaultsId) # Widgets Inspector if config.debug: self.Bind(wx.EVT_MENU, self.openWXInspectTool, id = self.widgetInspectMenuID) diff --git a/gui/mainMenuBar.py b/gui/mainMenuBar.py index e8c3cb614..169ed4e6c 100644 --- a/gui/mainMenuBar.py +++ b/gui/mainMenuBar.py @@ -49,6 +49,7 @@ class MainMenuBar(wx.MenuBar): self.ssoLoginId = wx.NewId() self.attrEditorId = wx.NewId() self.toggleOverridesId = wx.NewId() + self.importDatabaseDefaultsId = wx.NewId() if 'wxMac' in wx.PlatformInfo and wx.VERSION >= (3,0): wx.ID_COPY = wx.NewId() @@ -73,6 +74,8 @@ class MainMenuBar(wx.MenuBar): fileMenu.Append(self.exportSkillsNeededId, "Export &Skills Needed", "Export skills needed for this fitting") fileMenu.Append(self.importCharacterId, "Import C&haracter File", "Import characters into pyfa from file") fileMenu.AppendSeparator() + fileMenu.Append(self.importDatabaseDefaultsId, "Import D&atabase Defaults", "Imports missing database defaults") + fileMenu.AppendSeparator() fileMenu.Append(wx.ID_EXIT) # Edit menu @@ -139,7 +142,6 @@ class MainMenuBar(wx.MenuBar): attrItem = wx.MenuItem(windowMenu, self.attrEditorId, "Attribute Overrides\tCTRL+B") attrItem.SetBitmap(BitmapLoader.getBitmap("fit_rename_small", "gui")) windowMenu.AppendItem(attrItem) - editMenu.AppendSeparator() editMenu.Append(self.toggleOverridesId, "Turn Overrides On") @@ -172,5 +174,3 @@ class MainMenuBar(wx.MenuBar): self.Enable(self.revertCharId, char.isDirty) event.Skip() - - diff --git a/gui/patternEditor.py b/gui/patternEditor.py index 46837ad28..c36a1e80c 100644 --- a/gui/patternEditor.py +++ b/gui/patternEditor.py @@ -239,7 +239,7 @@ class DmgPatternEditorDlg(wx.Dialog): for field in self.DAMAGE_TYPES: edit = getattr(self, "%sEdit" % field) - amount = getattr(p, "%sAmount" % field) + amount = int(round(getattr(p, "%sAmount" % field))) edit.SetValue(amount) self.block = False diff --git a/service/damagePattern.py b/service/damagePattern.py index b67b10956..b379c5ed7 100644 --- a/service/damagePattern.py +++ b/service/damagePattern.py @@ -19,6 +19,7 @@ import eos.db import eos.types +import eos.db.saveddata.loadDefaultDatabaseValues as loadDefaultDatabaseValues import copy class ImportError(Exception): @@ -35,10 +36,9 @@ class DamagePattern(): def __init__(self): uniform = eos.db.getDamagePattern("Uniform") + importDBDefaults = loadDefaultDatabaseValues.defaultDatabaseValues() if uniform is None: - uniform = eos.types.DamagePattern(25, 25, 25, 25) - uniform.name = "Uniform" - eos.db.save(uniform) + importDBDefaults.importRequiredDefaults() def getDamagePatternList(self): return eos.db.getDamagePatternList() @@ -96,4 +96,3 @@ class DamagePattern(): patterns.sort(key=lambda p: p.name) return eos.types.DamagePattern.exportPatterns(*patterns) - diff --git a/service/prefetch.py b/service/prefetch.py index 664e5168c..4d7330728 100644 --- a/service/prefetch.py +++ b/service/prefetch.py @@ -22,6 +22,7 @@ import config import os import eos.types import eos.db.migration as migration +import eos.db.saveddata.loadDefaultDatabaseValues as loadDefaultDatabaseValues class PrefetchThread(threading.Thread): def run(self): @@ -56,3 +57,12 @@ else: # create and set version eos.db.saveddata_meta.create_all() eos.db.saveddata_engine.execute('PRAGMA user_version = {}'.format(migration.getAppVersion())) + #Import default database values + importDBDefaults = loadDefaultDatabaseValues.defaultDatabaseValues() + #Import values that must exist otherwise Pyfa breaks + importDBDefaults.importRequiredDefaults() + #Import default values for damage profiles + importDBDefaults.importDamageProfileDefaults() + #Import default values for target resist profiles + importDBDefaults.importResistProfileDefaults() +