From cfc47cf48368df41de6e412a5dfb27a3bfdf4846 Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Mon, 27 Jan 2020 11:44:20 +0300 Subject: [PATCH] When learning skill in character editor, learn all the prerequisites --- gui/characterSelection.py | 2 -- service/character.py | 28 +++++++++++++--------------- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/gui/characterSelection.py b/gui/characterSelection.py index 03b294ad0..27b781b7d 100644 --- a/gui/characterSelection.py +++ b/gui/characterSelection.py @@ -232,8 +232,6 @@ class CharacterSelection(wx.Panel): sCharacter = Character.getInstance() self.reqs = sCharacter.checkRequirements(fit) - - sCharacter.skillReqsDict = {'charname': fit.character.name, 'skills': []} if len(self.reqs) == 0: self.needsSkills = False diff --git a/service/character.py b/service/character.py index 38d2fde10..28e0fc008 100644 --- a/service/character.py +++ b/service/character.py @@ -376,8 +376,8 @@ class Character: char.apiUpdateCharSheet(skills, securitystatus) eos.db.commit() - @staticmethod - def changeLevel(charID, skillID, level, persist=False, ifHigher=False): + @classmethod + def changeLevel(cls, charID, skillID, level, persist=False, ifHigher=False): char = eos.db.getCharacter(charID) skill = char.getSkill(skillID) @@ -386,10 +386,19 @@ class Character: if isinstance(level, str) or level > 5 or level < 0: skill.setLevel(None, persist) - else: + eos.db.commit() + elif skill.level != level: + cls._trainSkillReqs(char, skill, persist) skill.setLevel(level, persist) + eos.db.commit() - eos.db.commit() + @classmethod + def _trainSkillReqs(cls, char, skill, persist): + for childSkillItem, neededSkillLevel in skill.item.requiredSkills.items(): + childSkill = char.getSkill(childSkillItem.ID) + if childSkill.level < neededSkillLevel: + childSkill.setLevel(neededSkillLevel, persist) + cls._trainSkillReqs(char, childSkill, persist) @staticmethod def revertLevel(charID, skillID): @@ -457,19 +466,8 @@ class Character: if level > currLevel and (char is None or char.getSkill(req).level < level): reqs[name] = (level, ID, subs) self._checkRequirements(char, req, subs) - return reqs - def getShit(self, reqs, condensed=None): - if condensed is None: - condensed = {} - for name, (level, ID, subs) in reqs: - if name not in condensed or condensed[name] < level: - condensed[name] = level - - - - class UpdateAPIThread(threading.Thread): def __init__(self, charID, callback):