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

Fixes plugins/coriolis.py to appear in settings, and confirms click-through works

*) Code and imports brought in line with edsy plugin
  *) 'Coriolis' now appears in Settings > Configuration > Shipyard
    dropdown
  *) Confirmed that with this active a valid build opens on coriolis.io
This commit is contained in:
Athanasius 2019-09-12 11:56:04 +01:00
parent a4e95d6ac4
commit f1462ef151

View File

@ -1,105 +1,28 @@
#!/usr/bin/python
#
# build ship and module databases from https://github.com/EDCD/coriolis-data/
#
# Coriolis ship export
from __future__ import print_function
from future import standard_library
standard_library.install_aliases()
from builtins import str
from builtins import range
import csv
import base64
from collections import OrderedDict
import pickle
import gzip
import json
from traceback import print_exc
import io
# Migrate settings from <= 3.01
from config import config
import outfitting
import companion
if not config.get('shipyard_provider') and config.getint('shipyard'):
config.set('shipyard_provider', 'Coriolis')
config.delete('shipyard')
if __name__ == "__main__":
def plugin_start():
return 'Coriolis'
def add(modules, name, attributes):
assert name not in modules or modules[name] == attributes, '%s: %s!=%s' % (name, modules.get(name), attributes)
assert name not in modules, name
modules[name] = attributes
# Return a URL for the current ship
def shipyard_url(loadout, is_beta):
string = json.dumps(loadout, ensure_ascii=False, sort_keys=True, separators=(',', ':')).encode('utf-8') # most compact representation
if not string:
return False
out = io.BytesIO()
with gzip.GzipFile(fileobj=out, mode='w') as f:
f.write(string)
data = json.load(open('coriolis-data/dist/index.json'))
# Map Coriolis's names to names displayed in the in-game shipyard
coriolis_ship_map = {
'Cobra Mk III' : 'Cobra MkIII',
'Cobra Mk IV' : 'Cobra MkIV',
'Krait Mk II' : 'Krait MkII',
'Viper' : 'Viper MkIII',
'Viper Mk IV' : 'Viper MkIV',
}
# Symbolic name from in-game name
reverse_ship_map = {v: k for k, v in companion.ship_map.items()}
bulkheads = list(outfitting.armour_map.keys())
ships = {}
modules = {}
# Ship and armour masses
for m in list(data['Ships'].values()):
name = coriolis_ship_map.get(m['properties']['name'], str(m['properties']['name']))
assert name in reverse_ship_map, name
ships[name] = { 'hullMass' : m['properties']['hullMass'] }
for i in range(len(bulkheads)):
modules['_'.join([reverse_ship_map[name], 'armour', bulkheads[i]])] = { 'mass': m['bulkheads'][i]['mass'] }
ships = OrderedDict([(k,ships[k]) for k in sorted(ships)]) # sort for easier diffing
pickle.dump(ships, open('ships.p', 'wb'))
# Module masses
for cat in list(data['Modules'].values()):
for grp, mlist in cat.items():
for m in mlist:
assert 'symbol' in m, m
key = str(m['symbol'].lower())
if grp == 'fsd':
modules[key] = {
'mass' : m['mass'],
'optmass' : m['optmass'],
'maxfuel' : m['maxfuel'],
'fuelmul' : m['fuelmul'],
'fuelpower' : m['fuelpower'],
}
elif grp == 'gfsb':
modules[key] = {
'mass' : m['mass'],
'jumpboost' : m['jumpboost'],
}
else:
modules[key] = { 'mass': m.get('mass', 0) } # Some modules don't have mass
# Pre 3.3 modules
add(modules, 'int_stellarbodydiscoveryscanner_standard', { 'mass': 2 })
add(modules, 'int_stellarbodydiscoveryscanner_intermediate', { 'mass': 2 })
add(modules, 'int_stellarbodydiscoveryscanner_advanced', { 'mass': 2 })
# Missing
add(modules, 'hpt_mining_subsurfdispmisle_fixed_small', { 'mass': 2 })
add(modules, 'hpt_mining_subsurfdispmisle_fixed_medium', { 'mass': 4 })
add(modules, 'hpt_multicannon_fixed_small_advanced', { 'mass': 2 })
add(modules, 'hpt_multicannon_fixed_medium_advanced', { 'mass': 4 })
modules = OrderedDict([(k,modules[k]) for k in sorted(modules)]) # sort for easier diffing
pickle.dump(modules, open('modules.p', 'wb'))
# Check data is present for all modules
with open('outfitting.csv') as csvfile:
reader = csv.DictReader(csvfile, restval='')
for row in reader:
try:
module = outfitting.lookup({ 'id': row['id'], 'name': row['symbol'] }, companion.ship_map)
except:
print(row['symbol'])
print_exc()
return (is_beta and 'https://beta.coriolis.io/import?data=' or 'https://coriolis.io/import?data=') + base64.urlsafe_b64encode(out.getvalue()).decode().replace('=', '%3D')