Merge branch 'singularity'

This commit is contained in:
DarkPhoenix
2020-06-15 14:42:13 +03:00
3269 changed files with 21518 additions and 1077 deletions

151
service/ammo.py Normal file
View File

@@ -0,0 +1,151 @@
# =============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of pyfa.
#
# pyfa is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# pyfa is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with pyfa. If not, see <http://www.gnu.org/licenses/>.
# =============================================================================
import math
from collections import OrderedDict
from eos.const import FittingHardpoint
from eos.saveddata.module import Module
from eos.utils.stats import DmgTypes
from service.market import Market
class Ammo:
instance = None
@classmethod
def getInstance(cls):
if cls.instance is None:
cls.instance = Ammo()
return cls.instance
@staticmethod
def getModuleFlatAmmo(mod):
sMkt = Market.getInstance()
if mod is None or mod.isEmpty:
return set()
chargeSet = set()
# Do not try to grab it for t3d modes which can also be passed as part of selection
if isinstance(mod, Module):
for charge in mod.getValidCharges():
if sMkt.getPublicityByItem(charge):
chargeSet.add(charge)
return chargeSet
@classmethod
def getModuleStructuredAmmo(cls, mod, ammo=None):
chargesFlat = cls.getModuleFlatAmmo(mod) if ammo is None else ammo
# Make sure we do not consider mining turrets as combat turrets
if mod.hardpoint == FittingHardpoint.TURRET and mod.getModifiedItemAttr('miningAmount', None) is None:
def turretSorter(charge):
damage = 0
range_ = (mod.item.getAttribute('maxRange')) * \
(charge.getAttribute('weaponRangeMultiplier') or 1)
falloff = (mod.item.getAttribute('falloff') or 0) * \
(charge.getAttribute('fallofMultiplier') or 1)
for type_ in DmgTypes.names():
d = charge.getAttribute('%sDamage' % type_)
if d > 0:
damage += d
# Take optimal and falloff as range factor
rangeFactor = range_ + falloff
return -rangeFactor, charge.name.rsplit()[-2:], damage, charge.name
all = OrderedDict()
sub = []
prevNameBase = None
prevRange = None
for charge in sorted(chargesFlat, key=turretSorter):
if 'civilian' in charge.name.lower():
continue
currNameBase = ' '.join(charge.name.rsplit()[-2:])
currRange = charge.getAttribute('weaponRangeMultiplier')
if sub and (currRange != prevRange or currNameBase != prevNameBase):
all[sub[0].name] = sub
sub = []
sub.append(charge)
prevNameBase = currNameBase
prevRange = currRange
else:
if sub:
all[sub[0].name] = sub
return 'ddTurret', all
elif mod.hardpoint == FittingHardpoint.MISSILE and mod.item.name != 'Festival Launcher':
def getChargeDamageInfo(charge):
# Set up data storage for missile damage stuff
damageMap = {}
totalDamage = 0
# Fill them with the data about charge
for damageType in DmgTypes.names():
currentDamage = charge.getAttribute('{}Damage'.format(damageType)) or 0
damageMap[damageType] = currentDamage
totalDamage += currentDamage
# Detect type of ammo
chargeDamageType = None
for damageType in damageMap:
# If all damage belongs to certain type purely, set appropriate
# ammoType
if damageMap[damageType] == totalDamage:
chargeDamageType = damageType
break
# Else consider ammo as mixed damage
if chargeDamageType is None:
chargeDamageType = 'mixed'
return chargeDamageType, totalDamage
def missileSorter(charge):
# Get charge damage type and total damage
chargeDamageType, totalDamage = getChargeDamageInfo(charge)
# Find its position in sort list
try:
position = DmgTypes.names().index(chargeDamageType)
# Put charges which have non-standard damage type after charges with
# standard damage type
except ValueError:
position = math.inf
return position, totalDamage, charge.name
all = OrderedDict()
sub = []
prevType = None
for charge in sorted(chargesFlat, key=missileSorter):
currType = getChargeDamageInfo(charge)[0]
if sub and currType != prevType:
all[prevType] = sub
sub = []
sub.append(charge)
prevType = currType
else:
if sub:
all[prevType] = sub
return 'ddMissile', all
else:
def nameSorter(charge):
parts = charge.name.split(" ")
return [int(p) if p.isdigit() else p for p in parts]
return 'general', {'general': sorted(chargesFlat, key=nameSorter)}

View File

@@ -0,0 +1,96 @@
"""
Conversion pack for May 2020 release
"""
CONVERSIONS = {
# Renamed items, extracted via diff file
"Basic EM Ward Amplifier": "'Basic' EM Shield Amplifier",
"Basic Thermal Dissipation Amplifier": "'Basic' Thermal Shield Amplifier",
"Basic Kinetic Deflection Amplifier": "'Basic' Kinetic Shield Amplifier",
"Basic Explosive Deflection Amplifier": "'Basic' Explosive Shield Amplifier",
"EM Ward Amplifier I": "EM Shield Amplifier I",
"Explosive Deflection Amplifier I": "Explosive Shield Amplifier I",
"Explosive Deflection Amplifier II": "Explosive Shield Amplifier II",
"Thermal Dissipation Amplifier I": "Thermal Shield Amplifier I",
"Thermal Dissipation Amplifier II": "Thermal Shield Amplifier II",
"Kinetic Deflection Amplifier I": "Kinetic Shield Amplifier I",
"Kinetic Deflection Amplifier II": "Kinetic Shield Amplifier II",
"EM Ward Amplifier II": "EM Shield Amplifier II",
"Upgraded Explosive Deflection Amplifier I": "Compact Explosive Shield Amplifier",
"Upgraded Thermal Dissipation Amplifier I": "Compact Thermal Shield Amplifier",
"Upgraded EM Ward Amplifier I": "Compact EM Shield Amplifier",
"Upgraded Kinetic Deflection Amplifier I": "Compact Kinetic Shield Amplifier",
"Domination Explosive Deflection Amplifier": "Domination Explosive Shield Amplifier",
"Dread Guristas Explosive Deflection Amplifier": "Dread Guristas Explosive Shield Amplifier",
"Domination Thermal Dissipation Amplifier": "Domination Thermal Shield Amplifier",
"Dread Guristas Thermal Dissipation Amplifier": "Dread Guristas Thermal Shield Amplifier",
"Domination Kinetic Deflection Amplifier": "Domination Kinetic Shield Amplifier",
"Dread Guristas Kinetic Deflection Amplifier": "Dread Guristas Kinetic Shield Amplifier",
"Domination EM Ward Amplifier": "Domination EM Shield Amplifier",
"Dread Guristas EM Ward Amplifier": "Dread Guristas EM Shield Amplifier",
"Hakim's Modified Explosive Deflection Amplifier": "Hakim's Modified Explosive Shield Amplifier",
"Tobias' Modified Explosive Deflection Amplifier": "Tobias' Modified Explosive Shield Amplifier",
"Hakim's Modified Thermal Dissipation Amplifier": "Hakim's Modified Thermal Shield Amplifier",
"Tobias' Modified Thermal Dissipation Amplifier": "Tobias' Modified Thermal Shield Amplifier",
"Hakim's Modified Kinetic Deflection Amplifier": "Hakim's Modified Kinetic Shield Amplifier",
"Tobias' Modified Kinetic Deflection Amplifier": "Tobias' Modified Kinetic Shield Amplifier",
"Hakim's Modified EM Ward Amplifier": "Hakim's Modified EM Shield Amplifier",
"Tobias' Modified EM Ward Amplifier": "Tobias' Modified EM Shield Amplifier",
"Kaikka's Modified Explosive Deflection Amplifier": "Kaikka's Modified Explosive Shield Amplifier",
"Thon's Modified Explosive Deflection Amplifier": "Thon's Modified Explosive Shield Amplifier",
"Vepas' Modified Explosive Deflection Amplifier": "Vepas' Modified Explosive Shield Amplifier",
"Estamel's Modified Explosive Deflection Amplifier": "Estamel's Modified Explosive Shield Amplifier",
"Kaikka's Modified Thermal Dissipation Amplifier": "Kaikka's Modified Thermal Shield Amplifier",
"Thon's Modified Thermal Dissipation Amplifier": "Thon's Modified Thermal Shield Amplifier",
"Vepas' Modified Thermal Dissipation Amplifier": "Vepas' Modified Thermal Shield Amplifier",
"Estamel's Modified Thermal Dissipation Amplifier": "Estamel's Modified Thermal Shield Amplifier",
"Kaikka's Modified Kinetic Deflection Amplifier": "Kaikka's Modified Kinetic Shield Amplifier",
"Thon's Modified Kinetic Deflection Amplifier": "Thon's Modified Kinetic Shield Amplifier",
"Vepas' Modified Kinetic Deflection Amplifier": "Vepas' Modified Kinetic Shield Amplifier",
"Estamel's Modified Kinetic Deflection Amplifier": "Estamel's Modified Kinetic Shield Amplifier",
"Kaikka's Modified EM Ward Amplifier": "Kaikka's Modified EM Shield Amplifier",
"Thon's Modified EM Ward Amplifier": "Thon's Modified EM Shield Amplifier",
"Vepas' Modified EM Ward Amplifier": "Vepas' Modified EM Shield Amplifier",
"Estamel's Modified EM Ward Amplifier": "Estamel's Modified EM Shield Amplifier",
"Caldari Navy EM Ward Amplifier": "Caldari Navy EM Shield Amplifier",
"Caldari Navy Kinetic Deflection Amplifier": "Caldari Navy Kinetic Shield Amplifier",
"Caldari Navy Thermal Dissipation Amplifier": "Caldari Navy Thermal Shield Amplifier",
"Caldari Navy Explosive Deflection Amplifier": "Caldari Navy Explosive Shield Amplifier",
"Republic Fleet EM Ward Amplifier": "Republic Fleet EM Shield Amplifier",
"Republic Fleet Kinetic Deflection Amplifier": "Republic Fleet Kinetic Shield Amplifier",
"Republic Fleet Thermal Dissipation Amplifier": "Republic Fleet Thermal Shield Amplifier",
"Republic Fleet Explosive Deflection Amplifier": "Republic Fleet Explosive Shield Amplifier",
"Pithum C-Type Explosive Deflection Amplifier": "Pithum C-Type Explosive Shield Amplifier",
"Pithum C-Type Thermal Dissipation Amplifier": "Pithum C-Type Thermal Shield Amplifier",
"Pithum C-Type Kinetic Deflection Amplifier": "Pithum C-Type Kinetic Shield Amplifier",
"Pithum C-Type EM Ward Amplifier": "Pithum C-Type EM Shield Amplifier",
"Pithum B-Type Explosive Deflection Amplifier": "Pithum B-Type Explosive Shield Amplifier",
"Pithum B-Type Thermal Dissipation Amplifier": "Pithum B-Type Thermal Shield Amplifier",
"Pithum B-Type Kinetic Deflection Amplifier": "Pithum B-Type Kinetic Shield Amplifier",
"Pithum B-Type EM Ward Amplifier": "Pithum B-Type EM Shield Amplifier",
"Pithum A-Type Explosive Deflection Amplifier": "Pithum A-Type Explosive Shield Amplifier",
"Pithum A-Type Thermal Dissipation Amplifier": "Pithum A-Type Thermal Shield Amplifier",
"Pithum A-Type Kinetic Deflection Amplifier": "Pithum A-Type Kinetic Shield Amplifier",
"Pithum A-Type EM Ward Amplifier": "Pithum A-Type EM Shield Amplifier",
"Gistum C-Type Explosive Deflection Amplifier": "Gistum C-Type Explosive Shield Amplifier",
"Gistum B-Type Explosive Deflection Amplifier": "Gistum B-Type Explosive Shield Amplifier",
"Gistum C-Type Thermal Dissipation Amplifier": "Gistum C-Type Thermal Shield Amplifier",
"Gistum B-Type Thermal Dissipation Amplifier": "Gistum B-Type Thermal Shield Amplifier",
"Gistum C-Type Kinetic Deflection Amplifier": "Gistum C-Type Kinetic Shield Amplifier",
"Gistum B-Type Kinetic Deflection Amplifier": "Gistum B-Type Kinetic Shield Amplifier",
"Gistum C-Type EM Ward Amplifier": "Gistum C-Type EM Shield Amplifier",
"Gistum B-Type EM Ward Amplifier": "Gistum B-Type EM Shield Amplifier",
"Gistum A-Type Explosive Deflection Amplifier": "Gistum A-Type Explosive Shield Amplifier",
"Gistum A-Type Thermal Dissipation Amplifier": "Gistum A-Type Thermal Shield Amplifier",
"Gistum A-Type Kinetic Deflection Amplifier": "Gistum A-Type Kinetic Shield Amplifier",
"Gistum A-Type EM Ward Amplifier": "Gistum A-Type EM Shield Amplifier",
"'Whiskey' Explosive Deflection Amplifier": "'Whiskey' Explosive Shield Amplifier",
"'High Noon' Thermal Dissipation Amplifier": "'High Noon' Thermal Shield Amplifier",
"'Cactus' Modified Kinetic Deflection Amplifier": "'Cactus' Modified Kinetic Shield Amplifier",
"'Prospector' EM Ward Amplifier": "'Prospector' EM Shield Amplifier",
# Converted items
"Supplemental EM Ward Amplifier": "'Basic' EM Shield Amplifier",
"Supplemental Explosive Deflection Amplifier": "'Basic' Explosive Shield Amplifier",
"Supplemental Kinetic Deflection Amplifier": "'Basic' Kinetic Shield Amplifier",
"Supplemental Thermal Dissipation Amplifier": "'Basic' Thermal Shield Amplifier",
}

View File

@@ -62,49 +62,49 @@ economiser:
# Damage types
em:
- 'em'
- 'mjolnir(.+ )?(missile|rocket|torpedo)' # Used in missile names
- 'mjolnir (.+ )?(missile|rocket|torpedo)' # Used in missile names
- 'electromagnetic' # Used in doomsday names
- 'electron bomb' # Used in bomb names
therm:
- 'therm'
- 'inferno(.+ )?(missile|rocket|torpedo)' # Used in missile names
- 'inferno (.+ )?(missile|rocket|torpedo)' # Used in missile names
- 'plasma smartbomb' # Used in smartbomb names
- 'scorch bomb' # Used in bomb names
thermal:
- 'thermal'
- 'inferno(.+ )?(missile|rocket|torpedo)' # Used in missile names
- 'inferno (.+ )?(missile|rocket|torpedo)' # Used in missile names
- 'plasma smartbomb' # Used in smartbomb names
- 'scorch bomb' # Used in bomb names
kin:
- 'kin'
- 'scourge(.+ )?(missile|rocket|torpedo)' # Used in missile names
- 'scourge (.+ )?(missile|rocket|torpedo)' # Used in missile names
- 'concussion bomb' # Used in bomb and smartbomb names
kinet:
- 'kinet'
- 'scourge(.+ )?(missile|rocket|torpedo)' # Used in missile names
- 'scourge (.+ )?(missile|rocket|torpedo)' # Used in missile names
- 'concussion bomb' # Used in bomb and smartbomb names
kinetic:
- 'kinetic'
- 'scourge(.+ )?(missile|rocket|torpedo)' # Used in missile names
- 'scourge (.+ )?(missile|rocket|torpedo)' # Used in missile names
- 'concussion bomb' # Used in bomb and smartbomb names
exp:
- 'exp'
- 'nova(.+ )?(missile|rocket|torpedo)' # Used in missile names
- 'nova (.+ )?(missile|rocket|torpedo)' # Used in missile names
- 'proton smartbomb' # Used in smartbomb names
- 'shrapnel bomb' # Used in bomb names
expl:
- 'expl'
- 'nova(.+ )?(missile|rocket|torpedo)' # Used in missile names
- 'nova (.+ )?(missile|rocket|torpedo)' # Used in missile names
- 'proton smartbomb' # Used in smartbomb names
- 'shrapnel bomb' # Used in bomb names
explo:
- 'explo'
- 'nova(.+ )?(missile|rocket|torpedo)' # Used in missile names
- 'nova (.+ )?(missile|rocket|torpedo)' # Used in missile names
- 'proton smartbomb' # Used in smartbomb names
- 'shrapnel bomb' # Used in bomb names
explosive:
- 'explosive'
- 'nova(.+ )?(missile|rocket|torpedo)' # Used in missile names
- 'nova (.+ )?(missile|rocket|torpedo)' # Used in missile names
- 'proton smartbomb' # Used in smartbomb names
- 'shrapnel bomb' # Used in bomb names
@@ -521,6 +521,9 @@ inv:
invul:
- 'invul'
- 'multispectrum shield hardener'
invuln:
- 'invuln'
- 'multispectrum shield hardener'
invulnerability:
- 'invulnerability'
- 'multispectrum shield hardener'

View File

@@ -407,6 +407,12 @@ class Market:
self.META_MAP["normal"] = frozenset((0, *(mg.ID for mg in eos.db.getMetaGroups() if mg.ID not in nonNormalMetas)))
self.META_MAP.move_to_end("normal", last=False)
self.META_MAP_REVERSE = {sv: k for k, v in self.META_MAP.items() for sv in v}
self.META_MAP_REVERSE_GROUPED = {}
i = 0
for mgids in self.META_MAP.values():
for mgid in mgids:
self.META_MAP_REVERSE_GROUPED[mgid] = i
i += 1
self.META_MAP_REVERSE_INDICES = self.__makeReverseMetaMapIndices()
self.SEARCH_CATEGORIES = (
"Drone",
@@ -794,7 +800,7 @@ class Market:
except KeyError:
return ""
return item.iconID if item.icon else ""
return item.iconID if getattr(item, "icon", None) else ""
elif self.getMarketGroupChildren(mg) > 0:
kids = self.getMarketGroupChildren(mg)
mktGroups = self.getIconByMarketGroup(kids)
@@ -939,3 +945,19 @@ class Market:
while len(recentlyUsedModules) >= 20:
recentlyUsedModules.pop(-1)
recentlyUsedModules.insert(0, itemID)
def itemSort(self, item, reverseMktGrp=False):
catname = self.getCategoryByItem(item).name
try:
mktgrpid = self.getMarketGroupByItem(item).ID
except AttributeError:
mktgrpid = -1
pyfalog.warning("unable to find market group for {}".format(item.name))
if reverseMktGrp:
mktgrpid = -mktgrpid
parentname = self.getParentItemByItem(item).name
# Get position of market group
metagrpid = self.getMetaGroupIdByItem(item)
metatab = self.META_MAP_REVERSE_GROUPED.get(metagrpid)
metalvl = item.metaLevel or 0
return catname, mktgrpid, parentname, metatab, metalvl, item.name