User:Sten/Legacy to spreadsheet
From Wildermyth Wiki
This is a Python script to export a player's legacy into a spreadsheet. You need a Python installation to run it.
Usage
Copy the code in the box below into a text file named legacy_table.py (or whatever you want) inside the Wildermyth/Players/<player ID> directory. Then run it by calling python legacy_table.py from the command line. It will create a text file called legacy_table.txt, which is tab-delimited and can be loaded by any spreadsheet software or viewed in a text editor.
| legacy_table.py |
import json
from zipfile import ZipFile
from glob import glob
mod_paths = ['../..'] + glob('../../mods/builtIn/*') + glob('../../mods/user/*') + glob('../../../../workshop/content/763890/*')
dictionary = {}
for m in mod_paths:
try:
with open(m + '/assets/text/aspects/aspects.properties','r',encoding='utf8') as f:
lines = f.readlines()
for line in lines:
if line[0] == '#':
continue
try:
key,val = line.split('=')
except:
continue
try:
key_split = key.split('.')
except:
continue
if len(key_split) != 2 or key_split[-1] != 'name':
continue
dictionary[key_split[0]] = val[:-1]
except:
continue
def test_ability(string):
if string in ['hunterGreenhorn_silkstep']:
return False
for prefix in ['mystic','hunter','warrior','common']:
for suffix in ['Deck','Special','Greenhorn','Goldhorn']:
if string.startswith(prefix+suffix):
return True
if string.startswith('theme') and '_upgrade' in string:
return True
return False
snapshot = -1
with ZipFile('legacy.json.zip') as zf:
with zf.open('legacy.json') as f:
data = json.load(f)
names = []
tiers = []
classes = []
themes = []
playables = []
hooks = []
abilities = []
weapons = []
offhands = []
for i_entry, entry in enumerate(data['entries']):
hook = 0
themes_ = []
abilities_ = []
class_ = ''
weapons_ = []
offhand = ''
try:
tier = int(entry['tier'])+1
except:
tier = 1
try:
if entry['usage'] == 'background':
playable = 'N'
else:
raise
except:
playable = 'Y'
entities = entry['snapshots'][snapshot]['entities']
for j in range(len(entities)):
if 'individual' in entities[j]:
for i in range(len(entities[j])):
if entities[j][i] == 'status':
name = entities[j][i+1]['name']
print('reading entry %d: %s'%(i_entry,name))
for entry_ in entities[j][i+1]['aspects']['entries']:
if entry_[0] in ['hunter','warrior','mystic'] and entry_[1]['value'] == 1:
class_ = entry_[0]
elif entry_[0].startswith('themePiece_') and entry_[1]['value'] == 1:
try:
theme = dictionary[entry_[0]]
except:
theme = entry_[0]
themes_ += [theme]
elif entry_[0].startswith('hookResolved_retirementAgeBoost') and entry_[1]['value'] == 1:
hook += 1
elif test_ability(entry_[0]) and entry_[1]['value'] == 1:
try:
ability = dictionary[entry_[0]]
except:
ability = entry_[0]
abilities_ += [ability]
elif 'item' in entities[j]:
for i in range(len(entities[j])):
if entities[j][i] == 'status':
itemName = entities[j][i+1]['name']
itemID = entities[j][i+1]['localizableName'].split('.')[-1]
elif entities[j][i] == 'item':
if 'MAIN_HAND' in entities[j][i+1]['slots']:
try:
if entities[j][i+1]['artifact']:
weapons_ += [itemName]
else:
raise
except:
weapons_ += [itemID]
elif 'OFF_HAND' in entities[j][i+1]['slots'] and 'MAIN_HAND' not in entities[j][i+1]['slots']:
offhand = itemName
names += [name]
tiers += [tier]
classes += [class_]
playables += [playable]
themes += [themes_]
abilities += [abilities_]
hooks += [hook]
weapons += [weapons_]
offhands += [offhand]
with open('legacy_table.txt', 'w') as f:
f.write('Name\tPlayable\tTier\tClass\tHooks\tThemes\tWeapons\tOffhand\tAbilities\n')
for i,name in enumerate(names):
f.write('%s\t%s\t%d\t%s\t%d\t'%(name,playables[i],tiers[i],classes[i],hooks[i]) + ', '.join(themes[i]) + '\t' + ', '.join(weapons[i]) + '\t' + offhands[i] + '\t' + ', '.join(abilities[i]) + '\n')
print('Done. Press ENTER to close.\n')
input()
|
Output
This script does not make any changes to the legacy.
The following fields appear in the output table (legacy_table.txt):
- Name
- Playable (Y/N)
- Legacy tier
- Class
- Number of hooks resolved
- Themes
- Weapons
- Offhand item
- Abilities
