Add eos setting for strict skills, and update info in skill tree without doing a repopulation
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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])
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user