Fix loading of mode, and add some (untested) setting functions
This commit is contained in:
@@ -10,4 +10,4 @@ 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 mode INTEGER")
|
||||
saveddata_engine.execute("ALTER TABLE fits ADD COLUMN modeID INTEGER")
|
||||
|
||||
@@ -41,7 +41,7 @@ fits_table = Table("fits", saveddata_meta,
|
||||
Column("damagePatternID", ForeignKey("damagePatterns.ID"), nullable=True),
|
||||
Column("booster", Boolean, nullable = False, index = True, default = 0),
|
||||
Column("targetResistsID", ForeignKey("targetResists.ID"), nullable=True),
|
||||
Column("mode", Integer, nullable=True),
|
||||
Column("modeID", Integer, nullable=True),
|
||||
)
|
||||
|
||||
projectedFits_table = Table("projectedFits", saveddata_meta,
|
||||
|
||||
@@ -67,7 +67,7 @@ class Fit(object):
|
||||
self.gangBoosts = None
|
||||
self.timestamp = time.time()
|
||||
self.ecmProjectedStr = 1
|
||||
self.mode = None
|
||||
self.modeID = None
|
||||
self.build()
|
||||
|
||||
@reconstructor
|
||||
@@ -100,10 +100,10 @@ class Fit(object):
|
||||
self.extraAttributes = ModifiedAttributeDict(self)
|
||||
self.extraAttributes.original = self.EXTRA_ATTRIBUTES
|
||||
self.ship = Ship(db.getItem(self.shipID)) if self.shipID is not None else None
|
||||
if self.ship is not None and self.mode is not None:
|
||||
self.mode = self.ship.checkMode(Mode(self.mode))
|
||||
if self.ship is not None and self.modeID is not None:
|
||||
self._mode = self.ship.checkMode(db.getItem(self.modeID))
|
||||
else:
|
||||
self.mode = None
|
||||
self._mode = None
|
||||
|
||||
@property
|
||||
def targetResists(self):
|
||||
@@ -126,6 +126,15 @@ class Fit(object):
|
||||
self.__ehp = None
|
||||
self.__effectiveTank = None
|
||||
|
||||
@property
|
||||
def mode(self):
|
||||
return self._mode
|
||||
|
||||
@mode.setter
|
||||
def mode(self, mode):
|
||||
self._mode = mode
|
||||
self.modeID = mode.item.ID if mode is not None else None
|
||||
|
||||
@property
|
||||
def character(self):
|
||||
return self.__character if self.__character is not None else Character.getAll0()
|
||||
|
||||
@@ -66,25 +66,28 @@ class Ship(ItemAttrShortcut, HandledItem):
|
||||
if effect.runTime == runTime and effect.isType("passive"):
|
||||
effect.handler(fit, self, ("ship",))
|
||||
|
||||
def checkMode(self, mode):
|
||||
def checkMode(self, item):
|
||||
"""
|
||||
Checks if provided mode is valid.
|
||||
Checks if provided item is a valid mode.
|
||||
|
||||
If ship has modes, and current mode is not valid, return forced mode
|
||||
else if mode is valid, return Mode
|
||||
else if ship does not have modes, return None
|
||||
|
||||
@todo: rename this
|
||||
"""
|
||||
modes = self.getValidModes()
|
||||
if modes != None:
|
||||
if mode == None or mode not in modes:
|
||||
items = self.getModeItems()
|
||||
|
||||
if items != None:
|
||||
if item == None or item not in items:
|
||||
# We have a tact dessy, but mode is None or not valid. Force new mode
|
||||
return modes[0]
|
||||
elif mode in modes:
|
||||
return Mode(items[0])
|
||||
elif item in items:
|
||||
# We have a valid mode
|
||||
return mode
|
||||
return Mode(item)
|
||||
return None
|
||||
|
||||
def getValidModes(self):
|
||||
def getModeItems(self):
|
||||
"""Gets valid modes for ship, returns None if not a t3 dessy"""
|
||||
# @todo: is there a better way to determine this that isn't hardcoded groupIDs?
|
||||
if self.item.groupID != 1305:
|
||||
@@ -93,13 +96,13 @@ class Ship(ItemAttrShortcut, HandledItem):
|
||||
modeGroupID = 1306
|
||||
import eos.db
|
||||
|
||||
modes = []
|
||||
items = []
|
||||
g = eos.db.getGroup(modeGroupID, eager=("items.icon", "items.attributes"))
|
||||
for item in g.items:
|
||||
if item.raceID == self.item.raceID:
|
||||
modes.append(Mode(item))
|
||||
items.append(item)
|
||||
|
||||
return modes
|
||||
return items
|
||||
|
||||
def __deepcopy__(self, memo):
|
||||
copy = Ship(self.item)
|
||||
|
||||
@@ -214,7 +214,8 @@ class Market():
|
||||
"Goru's Shuttle": False,
|
||||
"Guristas Shuttle": False,
|
||||
"Mobile Decoy Unit": False, # Seems to be left over test mod for deployables
|
||||
"Tournament Micro Jump Unit": False } # Normally seen only on tournament arenas
|
||||
"Tournament Micro Jump Unit": False, # Normally seen only on tournament arenas
|
||||
"Amarr Tactical Destroyer Propulsion Mode": True }
|
||||
|
||||
# do not publish ships that we convert
|
||||
for name in conversions.packs['skinnedShips']:
|
||||
|
||||
Reference in New Issue
Block a user