Properly implemented cargo rebalancing.
This commit is contained in:
parent
f3dad818b2
commit
aa5515701d
|
@ -5,25 +5,25 @@
|
||||||
2539 Botany
|
2539 Botany
|
||||||
2559 Medical Bed
|
2559 Medical Bed
|
||||||
2563 Arcade Machine
|
2563 Arcade Machine
|
||||||
2564 Unknown
|
2564 Jukebox
|
||||||
2565 Solar Panel
|
2565 Solar Panel
|
||||||
2566 X2 Power Generator
|
2566 X2 Power Generator
|
||||||
2567 Unknown
|
2567 X3 Power Generator
|
||||||
2568 Power Capacity Node
|
2568 Power Capacity Node
|
||||||
2569 Item Fabricator
|
2569 Item Fabricator
|
||||||
2570 Unknown
|
2570 Microweaver
|
||||||
2571 Assembler
|
2571 Assembler
|
||||||
2572 Unknown
|
2572 Energy Refinery
|
||||||
2573 Unknown
|
2573 Chemical Refinery
|
||||||
2575 Unknown
|
2575 Advanced Assember
|
||||||
2576 Unknown
|
2576 Composter
|
||||||
2577 Unknown
|
2577 Hypersleep Chamber
|
||||||
2589 Weapons Console
|
2589 Weapons Console
|
||||||
2590 Shields Console
|
2590 Shields Console
|
||||||
2591 Unknown
|
2591 Rocket Turret
|
||||||
2592 Unknown
|
2592 Energy Turret
|
||||||
2594 X1 Power Generator
|
2594 X1 Power Generator
|
||||||
2595 Unknown
|
2595 X1 Hyperdrive
|
||||||
2596 Unknown
|
2596 Unknown
|
||||||
2597 Unknown
|
2597 Unknown
|
||||||
2598 Unknown
|
2598 Unknown
|
||||||
|
@ -32,24 +32,24 @@
|
||||||
2601 Targeting Jammer
|
2601 Targeting Jammer
|
||||||
2602 Unknown
|
2602 Unknown
|
||||||
2604 Unknown
|
2604 Unknown
|
||||||
2605 Unknown
|
2605 Logistics Robot Station
|
||||||
2606 Unknown
|
2606 Plasma Weapons
|
||||||
2607 Unknown
|
2607 Unknown
|
||||||
2612 Metal Refinery
|
2612 Metal Refinery
|
||||||
2613 Unknown
|
2613 Unknown
|
||||||
2614 Unknown
|
2614 Unknown
|
||||||
2617 Unknown
|
2617 Unknown
|
||||||
2619 Unknown
|
2619 Fibres
|
||||||
2622 Unknown
|
2622 Bulletproof Vest
|
||||||
2623 Unknown
|
2623 Autopsy Table
|
||||||
2626 Unknown
|
2626 Advanced Nutrition
|
||||||
2628 Unknown
|
2628 Artificial Meat
|
||||||
2629 Alcoholic Bar Machine
|
2629 Alcoholic Bar Machine
|
||||||
2630 Unknown
|
2630 Grains and Hops
|
||||||
2694 Optotronics Fabricator
|
2694 Optotronics Fabricator
|
||||||
2847 Unknown
|
2847 Unknown
|
||||||
3024 Unknown
|
3024 Laser Weapons
|
||||||
3025 Unknown
|
3025 Salvage Robot Station
|
||||||
3114 Unknown
|
3114 Unknown
|
||||||
3115 Research Workbench
|
3115 Research Workbench
|
||||||
3116 Unknown
|
3116 Unknown
|
||||||
|
@ -57,16 +57,16 @@
|
||||||
3122 Operations Console
|
3122 Operations Console
|
||||||
3124 Unknown
|
3124 Unknown
|
||||||
3125 Unknown
|
3125 Unknown
|
||||||
3127 Unknown
|
3127 Robotics 01
|
||||||
3128 Industry 01
|
3128 Industry 01
|
||||||
3129 Industry 02
|
3129 Industry 02
|
||||||
3130 Unknown
|
3130 Botany 02
|
||||||
3417 Unknown
|
3417 Armored Vest
|
||||||
3420 Unknown
|
3420 Unknown
|
||||||
3421 Unknown
|
3421 Unknown
|
||||||
3422 Unknown
|
3422 Unknown
|
||||||
3423 Unknown
|
3423 Unknown
|
||||||
3464 Unknown
|
3464 Sentry Gun X1
|
||||||
3704 Unknown
|
3704 Unknown
|
||||||
3705 Unknown
|
3705 Unknown
|
||||||
3706 Unknown
|
3706 Unknown
|
||||||
|
|
Can't render this file because it has a wrong number of fields in line 3.
|
65
sheditor.py
65
sheditor.py
|
@ -78,12 +78,13 @@ class ResearchItem:
|
||||||
def get_name_from_code(cls, code):
|
def get_name_from_code(cls, code):
|
||||||
return cls.research_ids.get(code, None) if cls.research_ids is not None else None
|
return cls.research_ids.get(code, None) if cls.research_ids is not None else None
|
||||||
|
|
||||||
def __init__(self, id, active_stage, paused, states):
|
def __init__(self, id, active_stage, paused, states, tag):
|
||||||
self.id = id
|
self.id = id
|
||||||
self.name = ResearchItem.get_name_from_code(id)
|
self.name = ResearchItem.get_name_from_code(id)
|
||||||
self.paused = paused
|
self.paused = paused
|
||||||
self.active_stage = active_stage
|
self.active_stage = active_stage
|
||||||
self.stage_states = states
|
self.stage_states = states
|
||||||
|
self.tag = tag
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "{} : {} : {}".format(self.id, self.name, self.active_stage)
|
return "{} : {} : {}".format(self.id, self.name, self.active_stage)
|
||||||
|
@ -112,6 +113,9 @@ class StorageArea:
|
||||||
def add_item(self, item):
|
def add_item(self, item):
|
||||||
self.items.append(item)
|
self.items.append(item)
|
||||||
|
|
||||||
|
def get_capacity(self):
|
||||||
|
return storage_ids[self.type_id]['capacity']
|
||||||
|
|
||||||
# Returns how full the storage area is based on its contents
|
# Returns how full the storage area is based on its contents
|
||||||
def get_total_occupancy(self):
|
def get_total_occupancy(self):
|
||||||
total_quantity = 0
|
total_quantity = 0
|
||||||
|
@ -279,6 +283,53 @@ class Ship:
|
||||||
console.print("Total used: {}".format(total))
|
console.print("Total used: {}".format(total))
|
||||||
console.print("Total actual capacity: {}".format(area_capacity))
|
console.print("Total actual capacity: {}".format(area_capacity))
|
||||||
|
|
||||||
|
# Consolidate items
|
||||||
|
console.print("Consolidating items for {}".format(self.name))
|
||||||
|
unique_codes = []
|
||||||
|
new_items = []
|
||||||
|
for area in normal_storage_areas:
|
||||||
|
console.print("----- New storage area")
|
||||||
|
for item in area.items:
|
||||||
|
if item.code not in unique_codes:
|
||||||
|
unique_codes.append(item.code)
|
||||||
|
console.print("Considering item with code {}".format(item.code))
|
||||||
|
old_item_found = False
|
||||||
|
for new_item in new_items:
|
||||||
|
if new_item.code == item.code:
|
||||||
|
new_item.quantity += item.quantity
|
||||||
|
old_item_found = True
|
||||||
|
# console.print("Adding new item with code {}".format(item.code))
|
||||||
|
if old_item_found is False:
|
||||||
|
new_items.append(item)
|
||||||
|
console.print("Total number of new items: {}".format(len(new_items)))
|
||||||
|
console.print("Total number of unique codes: {}".format(len(unique_codes)))
|
||||||
|
|
||||||
|
|
||||||
|
new_amount = 0
|
||||||
|
for item in new_items:
|
||||||
|
new_amount += item.quantity
|
||||||
|
console.print(new_amount)
|
||||||
|
|
||||||
|
for area in normal_storage_areas:
|
||||||
|
area.items = []
|
||||||
|
|
||||||
|
for item in new_items:
|
||||||
|
console.print("{} : {} : {}".format(item.code, item.name, item.quantity))
|
||||||
|
min_occupancy = 2000
|
||||||
|
min_area = None
|
||||||
|
for area in normal_storage_areas:
|
||||||
|
if area.get_total_occupancy() < min_occupancy:
|
||||||
|
min_area = area
|
||||||
|
min_area.items.append(item)
|
||||||
|
|
||||||
|
item_number = 0
|
||||||
|
for area in normal_storage_areas:
|
||||||
|
for item in area.items:
|
||||||
|
item_number += 1
|
||||||
|
console.print("{} : {} : {}".format(item.code, item.name, item.quantity))
|
||||||
|
console.print("Item number: {}".format(item_number))
|
||||||
|
|
||||||
|
|
||||||
def consolidate_weapons(self):
|
def consolidate_weapons(self):
|
||||||
normal_storage_areas = [sa for sa in self.storage_areas if sa.is_normal_storage]
|
normal_storage_areas = [sa for sa in self.storage_areas if sa.is_normal_storage]
|
||||||
for area in normal_storage_areas:
|
for area in normal_storage_areas:
|
||||||
|
@ -403,7 +454,7 @@ class GameData:
|
||||||
blocksdone = [int(blocksdone_tag['level1']), int(blocksdone_tag['level2']), int(blocksdone_tag['level3'])]
|
blocksdone = [int(blocksdone_tag['level1']), int(blocksdone_tag['level2']), int(blocksdone_tag['level3'])]
|
||||||
ris = ResearchItemState(done, stage_no, blocksdone)
|
ris = ResearchItemState(done, stage_no, blocksdone)
|
||||||
stages.append(ris)
|
stages.append(ris)
|
||||||
ri = ResearchItem(techId, active_stage, paused, stages)
|
ri = ResearchItem(techId, active_stage, paused, stages, item)
|
||||||
self.research.append(ri)
|
self.research.append(ri)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
@ -579,9 +630,9 @@ class GameData:
|
||||||
|
|
||||||
def redistribute(self):
|
def redistribute(self):
|
||||||
for ship in self.ships:
|
for ship in self.ships:
|
||||||
if ship.owner != 'Player':
|
if ship.owner != 'Player' or ship.state != 'Normal':
|
||||||
continue
|
continue
|
||||||
console.print(ship.name)
|
console.print(ship.name, ship.state)
|
||||||
ship.redistribute_storage()
|
ship.redistribute_storage()
|
||||||
|
|
||||||
def list_research(self):
|
def list_research(self):
|
||||||
|
@ -735,17 +786,17 @@ def main():
|
||||||
if edits_made:
|
if edits_made:
|
||||||
if args.replace_original:
|
if args.replace_original:
|
||||||
console.print('Renaming original file')
|
console.print('Renaming original file')
|
||||||
|
filename = os.path.join(DEFAULT_SAVEGAMEPATH, args.filename, "save", "game")
|
||||||
datetime_suffix = datetime.datetime.now().strftime('%Y-%m-%d-%H%M_%S_%f')
|
datetime_suffix = datetime.datetime.now().strftime('%Y-%m-%d-%H%M_%S_%f')
|
||||||
new_filename = args.filename + "-" + datetime_suffix
|
new_filename = os.path.join(DEFAULT_SAVEGAMEPATH, args.filename, "save", "game" + '-' + datetime_suffix)
|
||||||
# console.print(datetime_suffix)
|
# console.print(datetime_suffix)
|
||||||
# os.rename(args.filename, new_filename)
|
os.rename(filename, new_filename)
|
||||||
|
|
||||||
console.print('Now rewriting game file with new information')
|
console.print('Now rewriting game file with new information')
|
||||||
text = soup.prettify()
|
text = soup.prettify()
|
||||||
# Delete XML header - game doesn't have it
|
# Delete XML header - game doesn't have it
|
||||||
sansfirstline = '\n'.join(text.split('\n')[1:])
|
sansfirstline = '\n'.join(text.split('\n')[1:])
|
||||||
|
|
||||||
filename = os.path.join(DEFAULT_SAVEGAMEPATH, args.filename, "save", "game")
|
|
||||||
|
|
||||||
f = open(filename, 'w')
|
f = open(filename, 'w')
|
||||||
f.write(sansfirstline)
|
f.write(sansfirstline)
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
725 # Assault Rifle
|
||||||
|
728 # SMG
|
||||||
|
729 # Shotgun
|
||||||
|
760 # Five-Seven Pistol
|
||||||
|
3069 # Laser Rifle
|
||||||
|
3070 # Laser Pistol
|
||||||
|
3071 # Plasma Clustergun
|
||||||
|
3072 # Plasma Rifle
|
||||||
|
3383 # Bulletproof Vest
|
||||||
|
3384 # Armored Vest
|
Loading…
Reference in New Issue