Get skill limits working

This commit is contained in:
blitzman
2016-12-11 20:26:30 -05:00
parent b6420b9a4b
commit 191a065de1
5 changed files with 35 additions and 4 deletions

View File

@@ -18,7 +18,7 @@
# ===============================================================================
from sqlalchemy import Column, String, Integer, Table, ForeignKey
from sqlalchemy.orm import relation, mapper
from sqlalchemy.orm import relation, mapper, synonym
from eos.db import gamedata_meta
from eos.types import AlphaClone, AlphaCloneSkill
@@ -36,7 +36,8 @@ alphacloneskskills_table = Table("alphaCloneSkills", gamedata_meta,
mapper(AlphaClone, alphaclones_table,
properties={
"_AlphaClone__skills": relation(
"ID": synonym("alphaCloneID"),
"skills": relation(
AlphaCloneSkill,
cascade="all,delete-orphan",
backref="clone")

View File

@@ -24,7 +24,7 @@ import eos.config
from eos.db import gamedata_session
from eos.db.gamedata.metaGroup import metatypes_table, items_table
from eos.db.util import processEager, processWhere
from eos.types import Item, Category, Group, MarketGroup, AttributeInfo, MetaData, MetaGroup
from eos.types import Item, Category, Group, MarketGroup, AttributeInfo, MetaData, MetaGroup, AlphaClone
configVal = getattr(eos.config, "gamedataCache", None)
if configVal is True:
@@ -97,6 +97,18 @@ def getItem(lookfor, eager=None):
return item
@cachedQuery(1, "lookfor")
def getAlphaClone(lookfor, eager=None):
if isinstance(lookfor, int):
if eager is None:
item = gamedata_session.query(AlphaClone).get(lookfor)
else:
item = gamedata_session.query(AlphaClone).options(*processEager(eager)).filter(AlphaClone.ID == lookfor).first()
else:
raise TypeError("Need integer as argument")
return item
groupNameMap = {}

View File

@@ -445,7 +445,18 @@ class Category(EqBase):
class AlphaClone(EqBase):
pass
@reconstructor
def init(self):
self.skillCache = {}
for x in self.skills:
self.skillCache[x.typeID] = x
def getSkillLevel(self, skill):
if skill.item.ID in self.skillCache:
return self.skillCache[skill.item.ID].level
else:
return None
class AlphaCloneSkill(EqBase):

View File

@@ -109,10 +109,14 @@ class Character(object):
@reconstructor
def init(self):
self.__skillIdMap = {}
for skill in self.__skills:
self.__skillIdMap[skill.itemID] = skill
self.dirtySkills = set()
if self.alphaClone:
self.alphaClone = eos.db.getAlphaClone(self.alphaClone)
def apiUpdateCharSheet(self, skills):
del self.__skills[:]
@@ -294,6 +298,9 @@ class Skill(HandledItem):
@property
def level(self):
if self.character.alphaClone:
return min(self.activeLevel, self.character.alphaClone.getSkillLevel(self)) or 0
return self.activeLevel or 0
@level.setter

BIN
eve.db

Binary file not shown.