Fix loading of mode, and add some (untested) setting functions

This commit is contained in:
blitzmann
2014-11-29 02:58:43 -05:00
parent dda1494b90
commit 88ee1d60be
5 changed files with 32 additions and 19 deletions

View File

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

View File

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

View File

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

View File

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

View File

@@ -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']: