From c9a04e886a8b8aea80bb9b434113f822ed6f147b Mon Sep 17 00:00:00 2001 From: blitzmann Date: Sat, 22 Apr 2017 14:02:40 -0400 Subject: [PATCH] Add eos setting for strict skills, and update info in skill tree without doing a repopulation --- eos/config.py | 3 ++- eos/saveddata/character.py | 17 +++++++++++------ gui/characterEditor.py | 18 ++++++++++++++++-- service/character.py | 1 + 4 files changed, 30 insertions(+), 9 deletions(-) diff --git a/eos/config.py b/eos/config.py index 75f797d9c..ec64e2bd3 100644 --- a/eos/config.py +++ b/eos/config.py @@ -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. diff --git a/eos/saveddata/character.py b/eos/saveddata/character.py index 9a1bc686d..7febd82c2 100644 --- a/eos/saveddata/character.py +++ b/eos/saveddata/character.py @@ -17,6 +17,7 @@ # along with eos. If not, see . # =============================================================================== +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() diff --git a/gui/characterEditor.py b/gui/characterEditor.py index 00963f6c9..85c47ab15 100644 --- a/gui/characterEditor.py +++ b/gui/characterEditor.py @@ -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]) diff --git a/service/character.py b/service/character.py index f53b1e424..edda9fe58 100644 --- a/service/character.py +++ b/service/character.py @@ -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: