mirror of
https://github.com/EDCD/EDMarketConnector.git
synced 2025-06-02 00:21:05 +03:00
Track cargo and materials
This commit is contained in:
parent
a1b163da96
commit
a16a8ac2b3
@ -625,6 +625,10 @@ class AppWindow:
|
|||||||
elif entry['event'] in ['ShipyardBuy', 'ShipyardSell']:
|
elif entry['event'] in ['ShipyardBuy', 'ShipyardSell']:
|
||||||
self.edsm.sellship(entry.get('SellShipID'))
|
self.edsm.sellship(entry.get('SellShipID'))
|
||||||
|
|
||||||
|
# Send materials info to EDSM on startup or change
|
||||||
|
if entry['event'] in ['StartUp', 'LoadGame', 'MaterialCollected', 'MaterialDiscarded', 'ScientificResearch', 'EngineerCraft', 'Synthesis']:
|
||||||
|
self.edsm.setmaterials(monitor.state['Raw'], monitor.state['Manufactured'], monitor.state['Encoded'])
|
||||||
|
|
||||||
# Send paintjob info to EDSM on change
|
# Send paintjob info to EDSM on change
|
||||||
if entry['event'] in ['ModuleBuy', 'ModuleSell'] and entry['Slot'] == 'PaintJob':
|
if entry['event'] in ['ModuleBuy', 'ModuleSell'] and entry['Slot'] == 'PaintJob':
|
||||||
self.edsm.updateship(monitor.state['ShipID'], monitor.state['ShipType'], [('paintJob', monitor.state['PaintJob'])])
|
self.edsm.updateship(monitor.state['ShipID'], monitor.state['ShipType'], [('paintJob', monitor.state['PaintJob'])])
|
||||||
|
7
edsm.py
7
edsm.py
@ -210,6 +210,13 @@ class EDSM:
|
|||||||
if balance is not None:
|
if balance is not None:
|
||||||
self.call('api-commander-v1/set-credits', '&balance=%d&loan=%d' % (balance, loan))
|
self.call('api-commander-v1/set-credits', '&balance=%d&loan=%d' % (balance, loan))
|
||||||
|
|
||||||
|
def setmaterials(self, raw, manufactured, encoded):
|
||||||
|
self.call('api-commander-v1/set-materials', "&type=data&values=%s" % json.dumps(encoded, separators = (',', ':')))
|
||||||
|
materials = {}
|
||||||
|
materials.update(raw)
|
||||||
|
materials.update(encoded)
|
||||||
|
self.call('api-commander-v1/set-materials', "&type=materials&values=%s" % json.dumps(materials, separators = (',', ':')))
|
||||||
|
|
||||||
def setshipid(self, shipid):
|
def setshipid(self, shipid):
|
||||||
if shipid is not None:
|
if shipid is not None:
|
||||||
self.call('api-commander-v1/set-ship-id', '&shipId=%d' % shipid)
|
self.call('api-commander-v1/set-ship-id', '&shipId=%d' % shipid)
|
||||||
|
61
monitor.py
61
monitor.py
@ -1,5 +1,5 @@
|
|||||||
import atexit
|
import atexit
|
||||||
from collections import OrderedDict
|
from collections import defaultdict, OrderedDict
|
||||||
import json
|
import json
|
||||||
import re
|
import re
|
||||||
import threading
|
import threading
|
||||||
@ -93,8 +93,12 @@ class EDLogs(FileSystemEventHandler):
|
|||||||
|
|
||||||
# Cmdr state shared with EDSM and plugins
|
# Cmdr state shared with EDSM and plugins
|
||||||
self.state = {
|
self.state = {
|
||||||
|
'Cargo' : defaultdict(int),
|
||||||
'Credits' : None,
|
'Credits' : None,
|
||||||
'Loan' : None,
|
'Loan' : None,
|
||||||
|
'Raw' : defaultdict(int),
|
||||||
|
'Manufactured' : defaultdict(int),
|
||||||
|
'Encoded' : defaultdict(int),
|
||||||
'PaintJob' : None,
|
'PaintJob' : None,
|
||||||
'Rank' : { 'Combat': None, 'Trade': None, 'Explore': None, 'Empire': None, 'Federation': None, 'CQC': None },
|
'Rank' : { 'Combat': None, 'Trade': None, 'Explore': None, 'Empire': None, 'Federation': None, 'CQC': None },
|
||||||
'ShipID' : None,
|
'ShipID' : None,
|
||||||
@ -253,18 +257,38 @@ class EDLogs(FileSystemEventHandler):
|
|||||||
self.live = False
|
self.live = False
|
||||||
self.version = entry['gameversion']
|
self.version = entry['gameversion']
|
||||||
self.is_beta = 'beta' in entry['gameversion'].lower()
|
self.is_beta = 'beta' in entry['gameversion'].lower()
|
||||||
|
self.cmdr = None
|
||||||
|
self.mode = None
|
||||||
|
self.group = None
|
||||||
|
self.body = None
|
||||||
|
self.system = None
|
||||||
|
self.station = None
|
||||||
|
self.coordinates = None
|
||||||
|
self.state = {
|
||||||
|
'Cargo' : defaultdict(int),
|
||||||
|
'Credits' : None,
|
||||||
|
'Loan' : None,
|
||||||
|
'Raw' : defaultdict(int),
|
||||||
|
'Manufactured' : defaultdict(int),
|
||||||
|
'Encoded' : defaultdict(int),
|
||||||
|
'PaintJob' : None,
|
||||||
|
'Rank' : { 'Combat': None, 'Trade': None, 'Explore': None, 'Empire': None, 'Federation': None, 'CQC': None },
|
||||||
|
'ShipID' : None,
|
||||||
|
'ShipIdent' : None,
|
||||||
|
'ShipName' : None,
|
||||||
|
'ShipType' : None,
|
||||||
|
}
|
||||||
elif entry['event'] == 'LoadGame':
|
elif entry['event'] == 'LoadGame':
|
||||||
self.live = True
|
self.live = True
|
||||||
self.cmdr = entry['Commander']
|
self.cmdr = entry['Commander']
|
||||||
self.mode = entry.get('GameMode') # 'Open', 'Solo', 'Group', or None for CQC
|
self.mode = entry.get('GameMode') # 'Open', 'Solo', 'Group', or None for CQC
|
||||||
self.group = entry.get('Group')
|
self.group = entry.get('Group')
|
||||||
self.state = {
|
self.state.update({
|
||||||
'Credits' : entry['Credits'],
|
'Credits' : entry['Credits'],
|
||||||
'Loan' : entry['Loan'],
|
'Loan' : entry['Loan'],
|
||||||
'PaintJob' : None,
|
|
||||||
'Rank' : { 'Combat': None, 'Trade': None, 'Explore': None, 'Empire': None, 'Federation': None, 'CQC': None },
|
'Rank' : { 'Combat': None, 'Trade': None, 'Explore': None, 'Empire': None, 'Federation': None, 'CQC': None },
|
||||||
'ShipID' : entry.get('ShipID') if entry.get('Ship') not in ['TestBuggy', 'Empire_Fighter', 'Federation_Fighter', 'Independent_Fighter'] else None # None in CQC or if game starts in SRV/fighter
|
'ShipID' : entry.get('ShipID') if entry.get('Ship') not in ['TestBuggy', 'Empire_Fighter', 'Federation_Fighter', 'Independent_Fighter'] else None # None in CQC or if game starts in SRV/fighter
|
||||||
}
|
})
|
||||||
self.state['ShipIdent'] = self.state['ShipID'] and entry.get('ShipIdent')
|
self.state['ShipIdent'] = self.state['ShipID'] and entry.get('ShipIdent')
|
||||||
self.state['ShipName'] = self.state['ShipID'] and entry.get('ShipName')
|
self.state['ShipName'] = self.state['ShipID'] and entry.get('ShipName')
|
||||||
self.state['ShipType'] = self.state['ShipID'] and entry.get('Ship').lower()
|
self.state['ShipType'] = self.state['ShipID'] and entry.get('Ship').lower()
|
||||||
@ -329,6 +353,35 @@ class EDLogs(FileSystemEventHandler):
|
|||||||
if self.state['Rank'].get(k) is not None:
|
if self.state['Rank'].get(k) is not None:
|
||||||
self.state['Rank'][k] = (self.state['Rank'][k][0], min(v, 100)) # perhaps not taken promotion mission yet
|
self.state['Rank'][k] = (self.state['Rank'][k][0], min(v, 100)) # perhaps not taken promotion mission yet
|
||||||
|
|
||||||
|
elif entry['event'] == 'Cargo':
|
||||||
|
self.live = True # First event in 2.3
|
||||||
|
self.state['Cargo'] = defaultdict(int)
|
||||||
|
self.state['Cargo'].update({ x['Name']: x['Count'] for x in entry['Inventory'] })
|
||||||
|
elif entry['event'] in ['CollectCargo', 'MarketBuy', 'MiningRefined']:
|
||||||
|
self.state['Cargo'][entry['Type']] += entry.get('Count', 1)
|
||||||
|
elif entry['event'] in ['EjectCargo', 'MarketSell']:
|
||||||
|
self.state['Cargo'][entry['Type']] -= entry.get('Count', 1)
|
||||||
|
if self.state['Cargo'][entry['Type']] <= 0:
|
||||||
|
self.state['Cargo'].pop(entry['Type'])
|
||||||
|
|
||||||
|
elif entry['event'] == 'Materials':
|
||||||
|
for category in ['Raw', 'Manufactured', 'Encoded']:
|
||||||
|
self.state[category] = defaultdict(int)
|
||||||
|
self.state[category].update({ x['Name']: x['Count'] for x in entry.get(category, []) })
|
||||||
|
elif entry['event'] == 'MaterialCollected':
|
||||||
|
self.state[entry['Category']][entry['Name']] += entry['Count']
|
||||||
|
elif entry['event'] in ['MaterialDiscarded', 'ScientificResearch']:
|
||||||
|
self.state[entry['Category']][entry['Name']] -= entry['Count']
|
||||||
|
if self.state[entry['Category']][entry['Name']] <= 0:
|
||||||
|
self.state[entry['Category']].pop(entry['Name'])
|
||||||
|
elif entry['event'] in ['EngineerCraft', 'Synthesis']:
|
||||||
|
for category in ['Raw', 'Manufactured', 'Encoded']:
|
||||||
|
for x in entry[entry['event'] == 'EngineerCraft' and 'Ingredients' or 'Materials']:
|
||||||
|
if x['Name'] in self.state[category]:
|
||||||
|
self.state[category][x['Name']] -= x['Count']
|
||||||
|
if self.state[category][x['Name']] <= 0:
|
||||||
|
self.state[category].pop(x['Name'])
|
||||||
|
|
||||||
return entry
|
return entry
|
||||||
except:
|
except:
|
||||||
if __debug__:
|
if __debug__:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user