1
0
mirror of https://github.com/EDCD/EDMarketConnector.git synced 2025-04-14 00:07:14 +03:00

Handle new ship ident, name and paintjob info from journal

This commit is contained in:
Jonathan Harris 2017-02-26 14:27:07 +00:00
parent 9c6b9e71f7
commit a1b163da96
2 changed files with 36 additions and 3 deletions

View File

@ -518,7 +518,10 @@ class AppWindow:
]
if monitor.state['PaintJob'] is None:
# Companion API server can lag, so prefer Journal. But paintjob only reported in Journal on change.
monitor.state['ShipID'] = data['ship']['id']
if monitor.state['ShipID'] != data['ship']['id']:
monitor.state['ShipID'] = data['ship']['id']
monitor.state['ShipIdent'] = None
monitor.state['ShipName'] = None
monitor.state['ShipType'] = data['ship']['name'].lower()
monitor.state['PaintJob'] = data['ship']['modules']['PaintJob'] and data['ship']['modules']['PaintJob']['module']['name'].lower() or ''
props.append(('paintJob', monitor.state['PaintJob']))
@ -609,9 +612,16 @@ class AppWindow:
self.edsm.setranks(monitor.state['Rank'])
# Send ship info to EDSM on startup or change
if entry['event'] in ['StartUp', 'LoadGame', 'ShipyardNew', 'ShipyardSwap'] and monitor.state['ShipID']:
if entry['event'] in ['StartUp', 'Loadout', 'LoadGame', 'SetUserShipName'] and monitor.cmdr and monitor.state['ShipID']:
self.edsm.setshipid(monitor.state['ShipID'])
self.edsm.updateship(monitor.state['ShipID'], monitor.state['ShipType'], monitor.state['PaintJob'] is not None and [('paintJob', monitor.state['PaintJob'])] or [])
props = []
if monitor.state['ShipIdent'] is not None:
props.append(('shipIdent', monitor.state['ShipIdent']))
if monitor.state['ShipName'] is not None:
props.append(('shipName', monitor.state['ShipName']))
if monitor.state['PaintJob'] is not None:
props.append(('paintJob', monitor.state['PaintJob']))
self.edsm.updateship(monitor.state['ShipID'], monitor.state['ShipType'], props)
elif entry['event'] in ['ShipyardBuy', 'ShipyardSell']:
self.edsm.sellship(entry.get('SellShipID'))

View File

@ -98,6 +98,8 @@ class EDLogs(FileSystemEventHandler):
'PaintJob' : None,
'Rank' : { 'Combat': None, 'Trade': None, 'Explore': None, 'Empire': None, 'Federation': None, 'CQC': None },
'ShipID' : None,
'ShipIdent' : None,
'ShipName' : None,
'ShipType' : None,
}
@ -263,6 +265,8 @@ class EDLogs(FileSystemEventHandler):
'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
}
self.state['ShipIdent'] = self.state['ShipID'] and entry.get('ShipIdent')
self.state['ShipName'] = self.state['ShipID'] and entry.get('ShipName')
self.state['ShipType'] = self.state['ShipID'] and entry.get('Ship').lower()
self.body = None
self.system = None
@ -271,14 +275,33 @@ class EDLogs(FileSystemEventHandler):
elif entry['event'] == 'NewCommander':
self.cmdr = entry['Name']
self.group = None
elif entry['event'] == 'SetUserShipName':
self.state['ShipID'] = entry['ShipID']
self.state['ShipIdent'] = entry.get('UserShipId')
self.state['ShipName'] = entry.get('UserShipName')
self.state['ShipType'] = entry['Ship'].lower()
elif entry['event'] == 'ShipyardNew':
self.state['ShipID'] = entry['NewShipID']
self.state['ShipIdent'] = None
self.state['ShipName'] = None
self.state['ShipType'] = entry['ShipType'].lower()
self.state['PaintJob'] = None
elif entry['event'] == 'ShipyardSwap':
self.state['ShipID'] = entry['ShipID']
self.state['ShipIdent'] = None
self.state['ShipName'] = None
self.state['ShipType'] = entry['ShipType'].lower()
self.state['PaintJob'] = None
elif entry['event'] == 'Loadout': # Note: Precedes LoadGame, but also sent after changing ship
self.state['ShipID'] = entry['ShipID']
self.state['ShipIdent'] = entry['ShipIdent']
self.state['ShipName'] = entry['ShipName']
self.state['ShipType'] = entry['Ship'].lower()
# Ignore other Modules since they're missing Engineer modification details
self.state['PaintJob'] = ''
for module in entry['Modules']:
if module.get('Slot') == 'PaintJob' and module.get('Item'):
self.state['PaintJob'] = module['Item'].lower()
elif entry['event'] in ['ModuleBuy', 'ModuleSell'] and entry['Slot'] == 'PaintJob':
symbol = re.match('\$(.+)_name;', entry.get('BuyItem', ''))
self.state['PaintJob'] = symbol and symbol.group(1).lower() or entry.get('BuyItem', '')