Add eos setting for strict skills, and update info in skill tree without doing a repopulation

This commit is contained in:
blitzmann
2017-04-22 14:02:40 -04:00
parent b21c850598
commit c9a04e886a
4 changed files with 30 additions and 9 deletions

View File

@@ -23,7 +23,8 @@ else:
pyfalog.debug("Saveddata connection string: {0}", saveddata_connectionstring)
settings = {
"useStaticAdaptiveArmorHardener": False
"useStaticAdaptiveArmorHardener": False,
"strictSkillLevels": True,
}
# Autodetect path, only change if the autodetection bugs out.

View File

@@ -17,6 +17,7 @@
# along with eos. If not, see <http://www.gnu.org/licenses/>.
# ===============================================================================
import time
from logbook import Logger
from itertools import chain
@@ -25,6 +26,7 @@ from sqlalchemy.orm import validates, reconstructor
import eos
import eos.db
import eos.config
from eos.effectHandlerHelpers import HandledItem, HandledImplantBoosterList
pyfalog = Logger(__name__)
@@ -334,12 +336,15 @@ class Skill(HandledItem):
self.activeLevel = level
for item, rlevel in self.item.requiredFor.iteritems():
if item.group.category.ID == 16: # Skill category
if level < rlevel:
skill = self.character.getSkill(item.ID)
#print "Removing skill: {}, Dependant level: {}, Required level: {}".format(skill, level, rlevel)
skill.setLevel(None, persist)
if eos.config.settings['strictSkillLevels']:
start = time.time()
for item, rlevel in self.item.requiredFor.iteritems():
if item.group.category.ID == 16: # Skill category
if level < rlevel:
skill = self.character.getSkill(item.ID)
#print "Removing skill: {}, Dependant level: {}, Required level: {}".format(skill, level, rlevel)
skill.setLevel(None, persist)
pyfalog.debug("Strict Skill levels enabled, time to process {}: {}".format(self.item.ID, time.time() - start))
if persist:
self.saveLevel()

View File

@@ -411,14 +411,28 @@ class SkillTreeView(wx.Panel):
skillID = self.skillTreeListCtrl.GetPyData(selection)
if level is not None:
self.skillTreeListCtrl.SetItemText(selection, "Level %d" % level if isinstance(level, int) else level, 1)
sChar.changeLevel(char.ID, skillID, level, persist=True)
elif event.Id == self.revertID:
sChar.revertLevel(char.ID, skillID)
elif event.Id == self.saveID:
sChar.saveSkill(char.ID, skillID)
self.skillTreeListCtrl.SetItemTextColour(selection, None)
# After saving the skill, we need to update not just the selected skill, but all open skills due to strict skill
# level setting. We don't want to refresh tree, as that will lose all expanded categories and users location
# within the tree. Thus, we loop through the tree and refresh the info.
child, cookie = self.skillTreeListCtrl.GetFirstChild(self.root)
while child.IsOk():
# child = Skill category
grand, cookie2 = self.skillTreeListCtrl.GetFirstChild(child)
while grand.IsOk():
# grand = Skill (or "dummy" if not expanded)
if self.skillTreeListCtrl.GetItemText(grand) != "dummy":
lvl, dirty = sChar.getSkillLevel(char.ID, self.skillTreeListCtrl.GetPyData(grand))
self.skillTreeListCtrl.SetItemText(grand, "Level {}".format(lvl) if not isinstance(lvl, basestring) else lvl, 1)
if not dirty:
self.skillTreeListCtrl.SetItemTextColour(grand, None)
grand, cookie2 = self.skillTreeListCtrl.GetNextChild(child, cookie2)
child, cookie = self.skillTreeListCtrl.GetNextChild(self.root, cookie)
dirtySkills = sChar.getDirtySkills(char.ID)
dirtyGroups = set([skill.item.group.ID for skill in dirtySkills])

View File

@@ -370,6 +370,7 @@ class Character(object):
def changeLevel(charID, skillID, level, persist=False):
char = eos.db.getCharacter(charID)
skill = char.getSkill(skillID)
if isinstance(level, basestring) or level > 5 or level < 0:
skill.setLevel(None, persist)
else: