From 283aba4f8553767b84eeac34a2148793285d29fe Mon Sep 17 00:00:00 2001 From: blitzmann Date: Thu, 13 Apr 2017 22:53:13 -0400 Subject: [PATCH] Add grant missing skills feature --- eos/gamedata.py | 2 +- eos/saveddata/module.py | 2 +- gui/characterSelection.py | 50 +++++++++++++++++++++++++++++++++++---- service/character.py | 6 ++++- 4 files changed, 53 insertions(+), 7 deletions(-) diff --git a/eos/gamedata.py b/eos/gamedata.py index 8700229dc..5e9ca2661 100644 --- a/eos/gamedata.py +++ b/eos/gamedata.py @@ -462,7 +462,7 @@ class Item(EqBase): return self.__price def __repr__(self): - return "Item(ID={}, name={}) at {}".format( + return u"Item(ID={}, name={}) at {}".format( self.ID, self.name, hex(id(self)) ) diff --git a/eos/saveddata/module.py b/eos/saveddata/module.py index a44f8d135..f18ddc153 100644 --- a/eos/saveddata/module.py +++ b/eos/saveddata/module.py @@ -756,7 +756,7 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): def __repr__(self): if self.item: - return "Module(ID={}, name={}) at {}".format( + return u"Module(ID={}, name={}) at {}".format( self.item.ID, self.item.name, hex(id(self)) ) else: diff --git a/gui/characterSelection.py b/gui/characterSelection.py index 3ee531d8f..98df879ae 100644 --- a/gui/characterSelection.py +++ b/gui/characterSelection.py @@ -50,6 +50,7 @@ class CharacterSelection(wx.Panel): self.redSkills = BitmapLoader.getBitmap("skillRed_big", "gui") self.greenSkills = BitmapLoader.getBitmap("skillGreen_big", "gui") self.refresh = BitmapLoader.getBitmap("refresh", "gui") + self.needsSkills = False self.btnRefresh = wx.BitmapButton(self, wx.ID_ANY, self.refresh) size = self.btnRefresh.GetSize() @@ -67,6 +68,8 @@ class CharacterSelection(wx.Panel): self.skillReqsStaticBitmap.SetBitmap(self.cleanSkills) mainSizer.Add(self.skillReqsStaticBitmap, 0, wx.ALIGN_CENTER_VERTICAL | wx.RIGHT | wx.LEFT, 3) + self.skillReqsStaticBitmap.Bind(wx.EVT_RIGHT_UP, self.OnContextMenu) + self.Bind(wx.EVT_CHOICE, self.charChanged) self.mainFrame.Bind(GE.CHAR_LIST_UPDATED, self.refreshCharacterList) self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged) @@ -75,6 +78,42 @@ class CharacterSelection(wx.Panel): self.charChoice.Enable(False) + def OnContextMenu(self, event): + sFit = Fit.getInstance() + fit = sFit.getFit(self.mainFrame.getActiveFit()) + + if not fit or not self.needsSkills: + return + + pos = wx.GetMousePosition() + pos = self.ScreenToClient(pos) + + menu = wx.Menu() + + grantItem = menu.Append(wx.ID_ANY, "Grant Missing Skills") + self.Bind(wx.EVT_MENU, self.grantMissingSkills, grantItem) + + self.PopupMenu(menu, pos) + + event.Skip() + + def grantMissingSkills(self, evt): + charID = self.getActiveCharacter() + sChar = Character.getInstance() + + skillsMap = {} + for item, stuff in self.reqs.iteritems(): + for things in stuff.values(): + if things[1] not in skillsMap: + skillsMap[things[1]] = things[0] + elif things[0] > skillsMap[things[1]]: + skillsMap[things[1]] = things[0] + + for skillID, level in skillsMap.iteritems(): + sChar.changeLevel(charID, skillID, level, ifHigher=True) + + self.refreshCharacterList() + def getActiveCharacter(self): selection = self.charChoice.GetCurrentSelection() return self.charChoice.GetClientData(selection) if selection is not -1 else None @@ -163,20 +202,23 @@ class CharacterSelection(wx.Panel): self.skillReqsStaticBitmap.SetToolTipString("No active fit") else: sCharacter = Character.getInstance() - reqs = sCharacter.checkRequirements(fit) + self.reqs = sCharacter.checkRequirements(fit) + sCharacter.skillReqsDict = {'charname': fit.character.name, 'skills': []} - if len(reqs) == 0: + if len(self.reqs) == 0: + self.needsSkills = False tip = "All skill prerequisites have been met" self.skillReqsStaticBitmap.SetBitmap(self.greenSkills) else: + self.needsSkills = True tip = "Skills required:\n" condensed = sFit.serviceFittingOptions["compactSkills"] if condensed: - dict_ = self._buildSkillsTooltipCondensed(reqs, skillsMap={}) + dict_ = self._buildSkillsTooltipCondensed(self.reqs, skillsMap={}) for key in sorted(dict_): tip += "%s: %d\n" % (key, dict_[key]) else: - tip += self._buildSkillsTooltip(reqs) + tip += self._buildSkillsTooltip(self.reqs) self.skillReqsStaticBitmap.SetBitmap(self.redSkills) self.skillReqsStaticBitmap.SetToolTipString(tip.strip()) diff --git a/service/character.py b/service/character.py index 1e5185b69..5ba1da144 100644 --- a/service/character.py +++ b/service/character.py @@ -378,9 +378,13 @@ class Character(object): eos.db.commit() @staticmethod - def changeLevel(charID, skillID, level, persist=False): + def changeLevel(charID, skillID, level, persist=False, ifHigher=False): char = eos.db.getCharacter(charID) skill = char.getSkill(skillID) + + if ifHigher and level < skill.level: + return + if isinstance(level, basestring) or level > 5 or level < 0: skill.level = None else: