Merge branch 'singularity'
This commit is contained in:
151
service/ammo.py
Normal file
151
service/ammo.py
Normal 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)}
|
||||
96
service/conversions/releaseJun2020.py
Normal file
96
service/conversions/releaseJun2020.py
Normal 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",
|
||||
}
|
||||
@@ -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'
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user