Added research writeback (not fully tested).
This commit is contained in:
parent
e0ffb4aa7b
commit
f96a7d1d7e
56
sheditor.py
56
sheditor.py
|
@ -77,12 +77,13 @@ class ResearchRequirement:
|
|||
name = row[1]
|
||||
workbench_items = None
|
||||
if row[2] != '-':
|
||||
workbench_items = {}
|
||||
workbench_items = []
|
||||
wb_items = row[2].split(',')
|
||||
for wbi in wb_items:
|
||||
quantity = int(wbi[0])
|
||||
code = int(wbi[2:])
|
||||
workbench_items[Item.get_name_from_code(code)] = quantity
|
||||
# Items are expected to be in a specific order by the game
|
||||
workbench_items.append((code, quantity))
|
||||
first_level_research = row[3] if row[3] != '-' else None
|
||||
second_level_research = row[4] if row[4] != '-' else None
|
||||
req = ResearchRequirement(id, name, workbench_items, first_level_research, second_level_research)
|
||||
|
@ -97,8 +98,8 @@ class ResearchRequirement:
|
|||
for k, v in cls.requirements.items():
|
||||
console.print("{} : {} : {} : {}".format(k, v.name, v.first_level_research, v.second_level_research))
|
||||
if v.workbench_items is not None:
|
||||
for x, y in v.workbench_items.items():
|
||||
console.print("{} : {}".format(x, y))
|
||||
for item_set in v.workbench_items:
|
||||
console.print("{} : {}".format(Item.get_name_from_code(item_set[0]), item_set[1]))
|
||||
|
||||
def __init__(self, id, name, workbench_items, first_level_research, second_level_research):
|
||||
self.id = id
|
||||
|
@ -125,18 +126,19 @@ class ResearchItem:
|
|||
# Do not forgot the <benchTaskStates> which appears to be related to the state of research workbench pre-research requirements
|
||||
|
||||
def __str__(self):
|
||||
return "{} : {} : {} : {}".format(self.id, self.name, self.num_stages, self.active_stage)
|
||||
return "{} : {} : {} : {} : {}".format(self.id, self.name, self.paused, self.num_stages, self.active_stage)
|
||||
|
||||
|
||||
class ResearchItemState:
|
||||
|
||||
def __init__(self, done, stage, blocksdone):
|
||||
def __init__(self, done, stage, blocksdone, workbench_items):
|
||||
self.done = done
|
||||
self.stage = int(stage)
|
||||
self.blocksdone = blocksdone
|
||||
self.workbench_items = workbench_items
|
||||
|
||||
def __str__(self):
|
||||
return " {} : {} : {}".format(self.done, self.stage, self.blocksdone)
|
||||
return " {} : {} : {} : {}".format(self.done, self.stage, self.blocksdone, self.workbench_items)
|
||||
|
||||
|
||||
# A single storage area, with a list of contents (Items)
|
||||
|
@ -490,7 +492,16 @@ class GameData:
|
|||
blocksdone = None
|
||||
if blocksdone_tag is not None:
|
||||
blocksdone = [int(blocksdone_tag['level1']), int(blocksdone_tag['level2']), int(blocksdone_tag['level3'])]
|
||||
ris = ResearchItemState(done, stage_no, blocksdone)
|
||||
workbench_items = None
|
||||
workbench_items_tag = stage.find('benchTaskStates')
|
||||
if workbench_items_tag is not None:
|
||||
workbench_items = []
|
||||
wbis = workbench_items_tag.find_all('l')
|
||||
for wbi in sorted(wbis, key=lambda x: int(x['taskId'])):
|
||||
# console.print(wbi)
|
||||
workbench_items.append(wbi['done'])
|
||||
|
||||
ris = ResearchItemState(done, stage_no, blocksdone, workbench_items)
|
||||
stages.append(ris)
|
||||
ri = ResearchItem(techId, len(stages), active_stage, paused, stages, item)
|
||||
self.research.append(ri)
|
||||
|
@ -572,8 +583,29 @@ class GameData:
|
|||
area_tag.append(new_tag)
|
||||
|
||||
# Step 3 - Update research
|
||||
for research_item in self.research:
|
||||
pass
|
||||
console.print('Updating research')
|
||||
top_research_tag = self.soup.find('research', treeId=True)
|
||||
top_research_tag.clear()
|
||||
for research_item in sorted(self.research, key=lambda x:x.id):
|
||||
base_tag = self.soup.new_tag('l', attrs={'techId':research_item.id, 'paused':research_item.paused, 'activeStageIndex':research_item.active_stage})
|
||||
stage_states_tag = self.soup.new_tag('stageStates')
|
||||
base_tag.append(stage_states_tag)
|
||||
console.print(len(research_item.stage_states))
|
||||
for i, stage_state in enumerate(research_item.stage_states):
|
||||
state_tag = self.soup.new_tag('l', attrs={'stage':i+1, 'done':stage_state.done})
|
||||
stage_states_tag.append(state_tag)
|
||||
if stage_state.blocksdone is not None:
|
||||
blocks_tag = self.soup.new_tag('blocksDone', attrs={'level1':stage_state.blocksdone[0], 'level2':stage_state.blocksdone[1], 'level3':stage_state.blocksdone[2]})
|
||||
state_tag.append(blocks_tag)
|
||||
if stage_state.workbench_items is not None:
|
||||
bench_task_tag = self.soup.new_tag('benchTaskStates')
|
||||
for x, item in enumerate(stage_state.workbench_items):
|
||||
# console.print(item)
|
||||
item_tag = self.soup.new_tag('l', attrs={'taskId':x+1, 'scheduled':'0', 'done':item})
|
||||
bench_task_tag.append(item_tag)
|
||||
state_tag.append(bench_task_tag)
|
||||
console.print(base_tag)
|
||||
top_research_tag.append(base_tag)
|
||||
|
||||
def add_item(self, item_code, item_quantity):
|
||||
item_name = self.item_database.get_name_from_code(item_code)
|
||||
|
@ -677,7 +709,6 @@ class GameData:
|
|||
ship.redistribute_storage()
|
||||
|
||||
def list_research(self):
|
||||
return
|
||||
for research in sorted(self.research, key=lambda item: item.id):
|
||||
console.print(research)
|
||||
for ris in research.stage_states:
|
||||
|
@ -806,7 +837,7 @@ def main():
|
|||
|
||||
if args.list_research:
|
||||
console.print("Listing research status...")
|
||||
# game_data.list_research()
|
||||
game_data.list_research()
|
||||
console.print(len(ResearchRequirement.requirements))
|
||||
|
||||
if args.consolidate_weapons:
|
||||
|
@ -841,7 +872,6 @@ def main():
|
|||
# Delete XML header - game doesn't have it
|
||||
sansfirstline = '\n'.join(text.split('\n')[1:])
|
||||
|
||||
|
||||
f = open(filename, 'w')
|
||||
f.write(sansfirstline)
|
||||
f.close()
|
||||
|
|
Loading…
Reference in New Issue