diff --git a/eos/effects.py b/eos/effects.py index 1235d901a..6cec0b528 100644 --- a/eos/effects.py +++ b/eos/effects.py @@ -10689,6 +10689,7 @@ class Effect3526(BaseEffect): Used by: Ships from group: Force Recon Ship (8 of 9) + Ship: Venture Skill: Cynosural Field Theory """ diff --git a/eos/saveddata/module.py b/eos/saveddata/module.py index e909651c4..0037c6014 100644 --- a/eos/saveddata/module.py +++ b/eos/saveddata/module.py @@ -318,10 +318,15 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): "energyDestabilizationRange", "empFieldRange", "ecmBurstRange", "warpScrambleRange", "cargoScanRange", "shipScanRange", "surveyScanRange") + maxRange = None for attr in attrs: maxRange = self.getModifiedItemAttr(attr, None) if maxRange is not None: - return maxRange + break + if maxRange is not None: + if 'burst projector' in self.item.name.lower(): + maxRange -= self.owner.ship.getModifiedItemAttr("radius") + return maxRange missileMaxRangeData = self.missileMaxRangeData if missileMaxRangeData is None: return None diff --git a/gui/bitmap_loader.py b/gui/bitmap_loader.py index 928dfb15e..325cbc7e3 100644 --- a/gui/bitmap_loader.py +++ b/gui/bitmap_loader.py @@ -89,7 +89,7 @@ class BitmapLoader: @classmethod def loadBitmap(cls, name, location): if cls.scaling_factor is None: - cls.scaling_factor = int(wx.GetApp().GetTopWindow().GetContentScaleFactor()) + cls.scaling_factor = 1 if 'wxGTK' in wx.PlatformInfo else int(wx.GetApp().GetTopWindow().GetContentScaleFactor()) scale = cls.scaling_factor filename, img = cls.loadScaledBitmap(name, location, scale) diff --git a/gui/builtinViewColumns/maxRange.py b/gui/builtinViewColumns/maxRange.py index b91465efc..02a5be5d9 100644 --- a/gui/builtinViewColumns/maxRange.py +++ b/gui/builtinViewColumns/maxRange.py @@ -83,12 +83,12 @@ class MaxRange(ViewColumn): lines.append('Missile flight range') lowerRange, higherRange, higherChance = missileRangeData if roundToPrec(higherChance, 3) not in (0, 1): - lines.append('{}% chance to fly {}'.format( + lines.append('{}% chance to fly {}m'.format( formatAmount((1 - higherChance) * 100, prec=3, lowest=0, highest=0), - formatAmount(lowerRange, prec=3, lowest=0, highest=3, unitName='m'))) - lines.append('{}% chance to fly {}'.format( + formatAmount(lowerRange, prec=3, lowest=0, highest=3))) + lines.append('{}% chance to fly {}m'.format( formatAmount(higherChance * 100, prec=3, lowest=0, highest=0), - formatAmount(higherRange, prec=3, lowest=0, highest=3, unitName='m'))) + formatAmount(higherRange, prec=3, lowest=0, highest=3))) else: lines.append("Optimal + Falloff") return '\n'.join(lines) diff --git a/gui/characterEditor.py b/gui/characterEditor.py index 9af767acc..24ff84700 100644 --- a/gui/characterEditor.py +++ b/gui/characterEditor.py @@ -428,6 +428,31 @@ class SkillTreeView(wx.Panel): # This cuases issues with GTK, see #1866 # self.Layout() + # For level keyboard shortcuts + self.ChangeLevelEvent, CHANGE_LEVEL_EVENT = wx.lib.newevent.NewEvent() + self.Bind(wx.EVT_CHAR_HOOK, self.kbEvent) + self.Bind(CHANGE_LEVEL_EVENT, self.changeLevel) + + def kbEvent(self, event): + keyLevelMap = { + # Regular number keys + 48: 0, 49: 1, 50: 2, 51: 3, 52: 4, 53: 5, + # Numpad keys + wx.WXK_NUMPAD0: 0, wx.WXK_NUMPAD1: 1, wx.WXK_NUMPAD2: 2, + wx.WXK_NUMPAD3: 3, wx.WXK_NUMPAD4: 4, wx.WXK_NUMPAD5: 5} + keycode = event.GetKeyCode() + if keycode in keyLevelMap and event.GetModifiers() == wx.MOD_NONE: + level = keyLevelMap[keycode] + selection = self.skillTreeListCtrl.GetSelection() + if selection: + dataType, skillID = self.skillTreeListCtrl.GetItemData(selection) + if dataType == 'skill': + event = self.ChangeLevelEvent() + event.SetId(self.idLevels[level]) + wx.PostEvent(self, event) + return + event.Skip() + def importSkills(self, evt): with wx.MessageDialog( @@ -611,6 +636,8 @@ class SkillTreeView(wx.Panel): sChar = Character.getInstance() char = self.charEditor.entityEditor.getActiveEntity() + if char.name in ("All 0", "All 5"): + return selection = self.skillTreeListCtrl.GetSelection() dataType, skillID = self.skillTreeListCtrl.GetItemData(selection) diff --git a/service/port/port.py b/service/port/port.py index 2fc4d879a..3c10d9abe 100644 --- a/service/port/port.py +++ b/service/port/port.py @@ -47,7 +47,7 @@ from service.port.muta import parseMutant pyfalog = Logger(__name__) # 2017/04/05 NOTE: simple validation, for xml file -RE_XML_START = r'<\?xml\s+version="1.0"\s*\?>' +RE_XML_START = r'<\?xml\s+version="1.0"[^<>]*\?>' class Port: @@ -182,7 +182,8 @@ class Port: pyfalog.critical(e) # TypeError: not all arguments converted during string formatting # return False, "Unknown Error while processing {0}" % path - return False, "Unknown error while processing %s\n\n Error: %s" % (path, e.message) + return False, "Unknown error while processing {}\n\n Error: {} {}".format( + path, type(e).__name__, getattr(e, 'message', '')) return True, fit_list @@ -321,4 +322,4 @@ class Port: @staticmethod def exportFitStats(fit, callback=None): - return exportFitStats(fit, callback=callback) \ No newline at end of file + return exportFitStats(fit, callback=callback) diff --git a/service/port/shared.py b/service/port/shared.py index 214a7f3fe..5f3988723 100644 --- a/service/port/shared.py +++ b/service/port/shared.py @@ -82,9 +82,13 @@ def fetchItem(typeName, eagerCat=False): eager = 'group.category' if eagerCat else None try: item = sMkt.getItem(typeName, eager=eager) + except (KeyboardInterrupt, SystemExit): + raise except: pyfalog.warning('service.port.shared: unable to fetch item "{}"'.format(typeName)) return None + if item is None: + return None if sMkt.getPublicityByItem(item): return item else: diff --git a/staticdata/bulkdata/dogmatypeattributes.json b/staticdata/bulkdata/dogmatypeattributes.json index 109ae83ef..27dc3e12d 100644 --- a/staticdata/bulkdata/dogmatypeattributes.json +++ b/staticdata/bulkdata/dogmatypeattributes.json @@ -215747,7 +215747,7 @@ { "attributeID": 9, "typeID": 4308, - "value": 2170.0 + "value": 2180.0 }, { "attributeID": 11, @@ -2361009,6 +2361009,11 @@ "typeID": 32880, "value": 1.0 }, + { + "attributeID": 1296, + "typeID": 32880, + "value": -50.0 + }, { "attributeID": 1547, "typeID": 32880, @@ -2890019,6 +2890024,11 @@ "typeID": 52694, "value": 380.0 }, + { + "attributeID": 1302, + "typeID": 52694, + "value": 32880.0 + }, { "attributeID": 1333, "typeID": 52694, diff --git a/staticdata/bulkdata/dogmatypeeffects.json b/staticdata/bulkdata/dogmatypeeffects.json index e98f063b6..59de1b316 100644 --- a/staticdata/bulkdata/dogmatypeeffects.json +++ b/staticdata/bulkdata/dogmatypeeffects.json @@ -167469,6 +167469,11 @@ "isDefault": false, "typeID": 32878 }, + { + "effectID": 3526, + "isDefault": false, + "typeID": 32880 + }, { "effectID": 5058, "isDefault": false, diff --git a/staticdata/phobos/metadata.json b/staticdata/phobos/metadata.json index f61529931..f8463aba1 100644 --- a/staticdata/phobos/metadata.json +++ b/staticdata/phobos/metadata.json @@ -1,10 +1,10 @@ [ { "field_name": "client_build", - "field_value": 1604553 + "field_value": 1610407 }, { "field_name": "dump_time", - "field_value": 1573560935 + "field_value": 1574329773 } ] \ No newline at end of file diff --git a/staticdata/phobos/traits.json b/staticdata/phobos/traits.json index 06b07ed64..e8c548d5d 100644 --- a/staticdata/phobos/traits.json +++ b/staticdata/phobos/traits.json @@ -733,7 +733,7 @@ "text": "reduction in Small Energy Turret activation cost" }, { - "number": "5%", + "number": "10%", "text": "bonus to Small Energy Turret damage" } ], @@ -10287,6 +10287,10 @@ { "number": "2+", "text": "bonus to ship warp core strength" + }, + { + "number": "50%", + "text": "reduction in Industrial Cynosural Field Generator liquid ozone consumption" } ], "header": "Role Bonus:" @@ -10405,7 +10409,7 @@ { "bonuses": [ { - "number": "10%", + "number": "15%", "text": "bonus to Small Hybrid Turret damage" } ], @@ -14922,7 +14926,7 @@ "text": "reduction in Microwarpdrive signature radius penalty" }, { - "number": "5%", + "number": "10%", "text": "bonus to Small Projectile Turret damage" } ], @@ -18810,7 +18814,7 @@ { "bonuses": [ { - "number": "5%", + "number": "10%", "text": "bonus to Small Hybrid Turret damage" }, { diff --git a/version.yml b/version.yml index 44dc1322f..7b5140866 100644 --- a/version.yml +++ b/version.yml @@ -1 +1 @@ -version: v2.14.2 +version: v2.14.3