Skip to content

Commit

Permalink
Add bunch of overrides to make sure hardwirings are upgraded as expected
Browse files Browse the repository at this point in the history
  • Loading branch information
DarkFenX committed Mar 4, 2019
1 parent c3e03f2 commit 8641c41
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 24 deletions.
Binary file modified eve.db
Binary file not shown.
43 changes: 35 additions & 8 deletions scripts/jsonToSql.py
Original file line number Diff line number Diff line change
Expand Up @@ -194,14 +194,16 @@ def compareAttrs(attrs1, attrs2, attrHig):
if all(attrs1[aid] == attrs2[aid] for aid in attrs1):
return 2
if all(
(attrs1[aid] <= attrs2[aid] and not attrHig[aid]) or
(attrs1[aid] >= attrs2[aid] and attrHig[aid])
(attrs1[aid] <= attrs2[aid] and attrHig[aid] == 0) or
(attrs1[aid] >= attrs2[aid] and attrHig[aid] == 1) or
(attrs1[aid] == attrs2[aid] and attrHig[aid] == 2)
for aid in attrs1
):
return 3
if all(
(attrs2[aid] <= attrs1[aid] and not attrHig[aid]) or
(attrs2[aid] >= attrs1[aid] and attrHig[aid])
(attrs2[aid] <= attrs1[aid] and attrHig[aid] == 0) or
(attrs2[aid] >= attrs1[aid] and attrHig[aid] == 1) or
(attrs2[aid] == attrs1[aid] and attrHig[aid] == 2)
for aid in attrs1
):
return 4
Expand Down Expand Up @@ -269,11 +271,36 @@ def compareAttrs(attrs1, attrs2, attrHig):
# Format: {type ID: 0 if high is bad, 1 if high is good, 2 if neither}
attrHig = {}
for row in tables['dgmattribs']:
attrHig[row['attributeID']] = bool(row['highIsGood'])
attrHig[row['attributeID']] = 1 if row['highIsGood'] else 0
# As CCP data is not really consistent, do some overrides
attrHig[4] = False # mass
attrHig[151] = False # agilityBonus
attrHig[161] = False # volume
attrHig[4] = 0 # mass
# Sometimes high is positive, sometimes it's not (e.g. AB cycle bonus vs smartbomb cycle bonus)
attrHig[66] = 2 # durationBonus
# Sometimes high is positive, sometimes it's not (e.g. invuln cycle vs rep cycle)
attrHig[73] = 2 # duration
attrHig[151] = 0 # agilityBonus
attrHig[161] = 0 # volume
attrHig[293] = 0 # rofBonus
attrHig[310] = 0 # cpuNeedBonus
attrHig[312] = 0 # durationSkillBonus
attrHig[314] = 0 # capRechargeBonus
attrHig[317] = 0 # capNeedBonus
attrHig[319] = 0 # warpCapacitorNeedBonus
attrHig[323] = 0 # powerNeedBonus
attrHig[331] = 2 # implantness
attrHig[338] = 0 # rechargeratebonus
attrHig[440] = 0 # manufacturingTimeBonus
attrHig[441] = 0 # turretSpeeBonus
attrHig[452] = 0 # copySpeedBonus
attrHig[453] = 0 # blueprintmanufactureTimeBonus
attrHig[468] = 0 # mineralNeedResearchBonus
attrHig[780] = 0 # iceHarvestCycleBonus
attrHig[848] = 0 # aoeCloudSizeBonus
attrHig[927] = 0 # miningUpgradeCPUReductionBonus
attrHig[1087] = 2 # boosterness
attrHig[1125] = 0 # boosterChanceBonus
attrHig[1126] = 0 # boosterAttributeModifier
attrHig[1156] = 0 # maxScanDeviationModifier
# Format: {group ID: category ID}
groupCategories = {}
for row in tables['evegroups']:
Expand Down
32 changes: 16 additions & 16 deletions service/price.py
Original file line number Diff line number Diff line change
Expand Up @@ -204,44 +204,44 @@ def clearPriceCache(self):
def findCheaperReplacements(self, items, callback, includeBetter, fetchTimeout=10):
sMkt = Market.getInstance()

potential = {} # All possible item replacements
replacementsAll = {} # All possible item replacements
for item in items:
if item in potential:
if item in replacementsAll:
continue
itemRepls = sMkt.getReplacements(item, includeBetter)
if itemRepls:
potential[item] = itemRepls
itemsToFetch = {i for i in chain(potential.keys(), *potential.values())}
replacementsAll[item] = itemRepls
itemsToFetch = {i for i in chain(replacementsAll.keys(), *replacementsAll.values())}

def cb(requests):
def makeCheapMapCb(requests):
# Decide what we are going to replace
actual = {} # Items which should be replaced
for replacee, replacers in potential.items():
replacementsCheaper = {} # Items which should be replaced
for replacee, replacers in replacementsAll.items():
replacer = min(replacers, key=lambda i: i.price.price or math.inf)
if (replacer.price.price or math.inf) < (replacee.price.price or math.inf):
actual[replacee] = replacer
replacementsCheaper[replacee] = replacer
try:
callback(actual)
callback(replacementsCheaper)
except Exception as e:
pyfalog.critical("Execution of callback from findCheaperReplacements failed.")
pyfalog.critical(e)

# Prices older than 2 hours have to be refetched
validityOverride = 2 * 60 * 60
self.getPrices(itemsToFetch, cb, fetchTimeout=fetchTimeout, validityOverride=validityOverride)
self.getPrices(itemsToFetch, makeCheapMapCb, fetchTimeout=fetchTimeout, validityOverride=validityOverride)

def optimizeFitPrice(self, fit, callback, includeBetter, fetchTimeout=10):

def cb(replacementMap):
def updateFitCb(replacementsCheaper):
changes = False
for container in (fit.modules, fit.drones, fit.fighters, fit.implants, fit.boosters, fit.cargo):
for obj in container:
charge = getattr(obj, 'charge', None)
if charge is not None and charge in replacementMap:
obj.charge = replacementMap[charge]
if charge is not None and charge in replacementsCheaper:
obj.charge = replacementsCheaper[charge]
changes = True
if obj.item in replacementMap:
obj.rebase(replacementMap[obj.item])
if obj.item in replacementsCheaper:
obj.rebase(replacementsCheaper[obj.item])
changes = True
if changes:
Fit.getInstance().refreshFit(fit.ID)
Expand All @@ -252,7 +252,7 @@ def cb(replacementMap):
pyfalog.critical(e)

fitItems = {i for i in self.fitItemIter(fit) if i is not fit.ship.item}
self.findCheaperReplacements(fitItems, cb, includeBetter, fetchTimeout=fetchTimeout)
self.findCheaperReplacements(fitItems, updateFitCb, includeBetter, fetchTimeout=fetchTimeout)


class PriceWorkerThread(threading.Thread):
Expand Down

0 comments on commit 8641c41

Please sign in to comment.