Made rich console global and all print methods now use it.
This commit is contained in:
parent
13073df432
commit
2fd9b573e5
117
sheditor.py
117
sheditor.py
|
@ -5,8 +5,7 @@ import datetime
|
|||
import csv
|
||||
from bs4 import BeautifulSoup
|
||||
|
||||
import rich
|
||||
from rich.console import Console
|
||||
import rich.console
|
||||
|
||||
# Only "normal storage" is used to insert requested items
|
||||
normal_storage_ids = [82, 632]
|
||||
|
@ -17,6 +16,8 @@ storage_ids = {
|
|||
3062: {"name": "Body storage", "capacity": 20},
|
||||
}
|
||||
|
||||
console = rich.console.Console(highlight=False)
|
||||
|
||||
|
||||
# A single item with its code, name, and quantity
|
||||
class Item:
|
||||
|
@ -97,7 +98,6 @@ class Character:
|
|||
with open(trait_filename, 'r') as trait_file:
|
||||
trait_reader = csv.reader(trait_file, delimiter='\t')
|
||||
for row in trait_reader:
|
||||
print(row)
|
||||
cls.trait_ids[int(row[0])] = row[1].strip()
|
||||
|
||||
if cls.condition_ids is None:
|
||||
|
@ -160,14 +160,11 @@ class Character:
|
|||
new_char.is_clone = True
|
||||
new_char.tag['name'] = new_name
|
||||
|
||||
new_skills = [s.copy() for s in self.skills]
|
||||
new_attributes = [a.copy() for a in self.attributes]
|
||||
new_char.skills = new_skills
|
||||
new_char.attributes = new_attributes
|
||||
new_char.skills = [s.copy() for s in self.skills]
|
||||
new_char.attributes = [a.copy() for a in self.attributes]
|
||||
return new_char
|
||||
|
||||
def print_summary(self):
|
||||
console = Console(highlight=False)
|
||||
console.print("Name: [bright_cyan]{}[/]".format(self.name))
|
||||
console.print()
|
||||
console.print("Skills:")
|
||||
|
@ -248,7 +245,7 @@ class GameData:
|
|||
ship_name = "UNNAMED (?fogged)"
|
||||
if ship_tag.has_attr('sname'):
|
||||
ship_name = ship_tag['sname']
|
||||
# print(ship_name)
|
||||
# console.print(ship_name)
|
||||
|
||||
# Forgotten - why did I specify owner as required here - what ships don't have owners?
|
||||
owner_node = ship_tag.find('settings', owner=True)
|
||||
|
@ -272,7 +269,7 @@ class GameData:
|
|||
item_quantity = int(s_tag['inStorage'])
|
||||
item = Item(item_code, item_name, item_quantity)
|
||||
storage_area.add_item(item)
|
||||
# print("{:4}: {} - {}".format(item_code, item_name, item_quantity))
|
||||
# console.print("{:4}: {} - {}".format(item_code, item_name, item_quantity))
|
||||
|
||||
# Step 4 - Character data
|
||||
for character_list in ship_tag.find_all('characters'):
|
||||
|
@ -339,7 +336,7 @@ class GameData:
|
|||
for character in ship.characters:
|
||||
# Cloned character tags have to be added to the list
|
||||
if character.is_clone:
|
||||
print("ADDING CLONED CHARACTER")
|
||||
console.print("ADDING CLONED CHARACTER")
|
||||
charlist_tag = ship.tag.find('characters')
|
||||
charlist_tag.append(character.tag)
|
||||
|
||||
|
@ -391,7 +388,6 @@ class GameData:
|
|||
return
|
||||
|
||||
def print_detailed_character_summary(self):
|
||||
console = Console(highlight=False)
|
||||
for ship in self.ships:
|
||||
console.print("Listing characters for ship [magenta]{}[/] (owned by [bright_cyan]{}[/], state [bright_cyan]{}[/]):".format(ship.name, ship.owner, ship.state))
|
||||
if len(ship.characters) == 0:
|
||||
|
@ -409,7 +405,6 @@ class GameData:
|
|||
console.print()
|
||||
|
||||
def print_detailed_item_summary(self):
|
||||
console = Console(highlight=False)
|
||||
for ship in self.ships:
|
||||
rich.print("Inventory for ship [#aa00ff]{}[/] (owned by [bright_cyan]{}[/], state [bright_cyan]{}[/]):".format(ship.name, ship.owner, ship.state))
|
||||
if len(ship.storage_areas) == 0:
|
||||
|
@ -442,18 +437,18 @@ class GameData:
|
|||
console.print()
|
||||
|
||||
def print_summary(self):
|
||||
print("Start game summary:")
|
||||
print(" Player currency: {}".format(self.player.currency))
|
||||
print(" Number of ships: {}".format(len(self.ships)))
|
||||
console.print("Start game summary:")
|
||||
console.print(" Player currency: {}".format(self.player.currency))
|
||||
console.print(" Number of ships: {}".format(len(self.ships)))
|
||||
|
||||
for ship in self.ships:
|
||||
print(" {} (owner {}, state {})".format(ship.name, ship.owner, ship.state))
|
||||
print(" Contains {} storage area(s):".format(len(ship.storage_areas)))
|
||||
console.print(" {} (owner {}, state {})".format(ship.name, ship.owner, ship.state))
|
||||
console.print(" Contains {} storage area(s):".format(len(ship.storage_areas)))
|
||||
for index, storage_area in enumerate(ship.storage_areas):
|
||||
print(" Storage area {} - contains {} item(s) - occupancy {} unit(s)".format(index, len(storage_area.items), storage_area.get_total_occupancy()))
|
||||
print(" Has {} character(s):".format(len(ship.characters)))
|
||||
console.print(" Storage area {} - contains {} item(s) - occupancy {} unit(s)".format(index, len(storage_area.items), storage_area.get_total_occupancy()))
|
||||
console.print(" Has {} character(s):".format(len(ship.characters)))
|
||||
for char in ship.characters:
|
||||
print(" {}".format(char.name))
|
||||
console.print(" {}".format(char.name))
|
||||
# char.print_summary()
|
||||
|
||||
|
||||
|
@ -461,30 +456,30 @@ def characters(soup):
|
|||
for character in soup.find_all('characters'):
|
||||
c_elems = character.find_all('c')
|
||||
if len(c_elems) > 0:
|
||||
print('Found some appropriate c-tags')
|
||||
console.print('Found some appropriate c-tags')
|
||||
for char_c in c_elems:
|
||||
# print(char_c['name'])
|
||||
# console.print(char_c['name'])
|
||||
if 'name' in char_c.attrs:
|
||||
print(char_c['name'])
|
||||
console.print(char_c['name'])
|
||||
# We have found a character tag!
|
||||
|
||||
# ---- SKILL UPRGRADING
|
||||
skill_tag = char_c.find('skills')
|
||||
print(skill_tag)
|
||||
console.print(skill_tag)
|
||||
# Experimental changing
|
||||
for sk_tag in skill_tag.find_all('s'):
|
||||
sk_tag['level'] = '5'
|
||||
sk_tag['mxn'] = '8'
|
||||
if 'mxp' in sk_tag.attrs:
|
||||
sk_tag['mxp'] = '8'
|
||||
print(skill_tag)
|
||||
console.print(skill_tag)
|
||||
|
||||
# ---- ATTRIBUTE UPGRADING
|
||||
attribute_tag = char_c.find('attr')
|
||||
print(attribute_tag)
|
||||
console.print(attribute_tag)
|
||||
for a_tag in attribute_tag.find_all('a'):
|
||||
a_tag['points'] = '6'
|
||||
print(attribute_tag)
|
||||
console.print(attribute_tag)
|
||||
|
||||
|
||||
def inventory(soup, add_code, add_quantity):
|
||||
|
@ -496,16 +491,16 @@ def inventory(soup, add_code, add_quantity):
|
|||
result = line.split()
|
||||
code = int(result[0])
|
||||
name = ' '.join(result[1:])
|
||||
# print(code, name)
|
||||
# console.print(code, name)
|
||||
id_dict[code] = name
|
||||
|
||||
# print(id_dict)
|
||||
# console.print(id_dict)
|
||||
|
||||
print("You have requested that {} unit(s) of {} be added to existing storage of this item (storage site will be selected at random)".format(add_quantity, id_dict[add_code]))
|
||||
console.print("You have requested that {} unit(s) of {} be added to existing storage of this item (storage site will be selected at random)".format(add_quantity, id_dict[add_code]))
|
||||
|
||||
item_tracking = {}
|
||||
|
||||
print('-----')
|
||||
console.print('-----')
|
||||
|
||||
storage_space_counter = 1
|
||||
|
||||
|
@ -519,20 +514,20 @@ def inventory(soup, add_code, add_quantity):
|
|||
for inv_tag in ship_tag.find_all('inv'):
|
||||
if inv_tag.parent.name != 'feat':
|
||||
continue
|
||||
print('Storage space {}'.format(storage_space_counter))
|
||||
print()
|
||||
console.print('Storage space {}'.format(storage_space_counter))
|
||||
console.print()
|
||||
quantity_total = 0
|
||||
for s_tag in inv_tag.find_all('s'):
|
||||
item_code = int(s_tag['elementaryId'])
|
||||
item_quantity = int(s_tag['inStorage'])
|
||||
item_name = id_dict[item_code]
|
||||
print("{:4}: {} - {}".format(item_code, item_name, item_quantity))
|
||||
console.print("{:4}: {} - {}".format(item_code, item_name, item_quantity))
|
||||
if item_code == add_code and not added_quantity:
|
||||
print(" Updating quantity with requested amount...")
|
||||
console.print(" Updating quantity with requested amount...")
|
||||
item_quantity += add_quantity
|
||||
s_tag['inStorage'] = item_quantity
|
||||
added_quantity = True
|
||||
print(" Item quantity is now {}".format(s_tag['inStorage']))
|
||||
console.print(" Item quantity is now {}".format(s_tag['inStorage']))
|
||||
quantity_total += item_quantity
|
||||
|
||||
if item_code not in item_tracking:
|
||||
|
@ -540,18 +535,18 @@ def inventory(soup, add_code, add_quantity):
|
|||
else:
|
||||
item_tracking[item_code] = item_tracking[item_code] + item_quantity
|
||||
|
||||
print()
|
||||
print('Total use of storage space {}: {}'.format(storage_space_counter, quantity_total))
|
||||
console.print()
|
||||
console.print('Total use of storage space {}: {}'.format(storage_space_counter, quantity_total))
|
||||
storage_space_counter += 1
|
||||
print('-----')
|
||||
console.print('-----')
|
||||
|
||||
print('Item total summary:')
|
||||
print()
|
||||
console.print('Item total summary:')
|
||||
console.print()
|
||||
for item in item_tracking.items():
|
||||
item_code = item[0]
|
||||
item_name = id_dict[item_code]
|
||||
item_quantity = item[1]
|
||||
print('{:4} - {} - {}'.format(item_code, item_name, item_quantity))
|
||||
console.print('{:4} - {} - {}'.format(item_code, item_name, item_quantity))
|
||||
|
||||
|
||||
def give_money(soup, amount):
|
||||
|
@ -578,8 +573,8 @@ def list_ships(soup):
|
|||
owner_node = ship_tag.find('settings', owner=True)
|
||||
ship_owner = owner_node['owner']
|
||||
ship_state = owner_node['state']
|
||||
print('Ship found: {} owned by {} (state: {})'.format(ship_name, ship_owner, ship_state))
|
||||
# print(settings_node)
|
||||
console.print('Ship found: {} owned by {} (state: {})'.format(ship_name, ship_owner, ship_state))
|
||||
# console.print(settings_node)
|
||||
|
||||
|
||||
def parse_item_file(filename):
|
||||
|
@ -614,29 +609,29 @@ def main():
|
|||
parser.add_argument('--replace_original', required=False, action='store_true', help='Replace original file instead of creating edited alternative. Renames original for backup, but USE WITH CAUTION')
|
||||
|
||||
args = parser.parse_args()
|
||||
# print(args)
|
||||
# console.print(args)
|
||||
|
||||
print("--- Space Haven Saved Game Inspector ---")
|
||||
print()
|
||||
console.print("--- Space Haven Saved Game Inspector ---")
|
||||
console.print()
|
||||
|
||||
filename = args.filename
|
||||
# print(filename)
|
||||
# console.print(filename)
|
||||
|
||||
full_text = ""
|
||||
|
||||
for line in open(filename):
|
||||
full_text += line
|
||||
|
||||
# print(full_text)
|
||||
# console.print(full_text)
|
||||
|
||||
soup = BeautifulSoup(full_text, "xml")
|
||||
|
||||
Item.load_ids('item_ids.tsv')
|
||||
print("Item code database successfully loaded.")
|
||||
print()
|
||||
console.print("Item code database successfully loaded.")
|
||||
console.print()
|
||||
Character.load_ids('char_skills.tsv', 'char_attributes.tsv', 'char_traits.tsv', 'char_conditions.tsv')
|
||||
print("Character code database successfully loaded.")
|
||||
print()
|
||||
console.print("Character code database successfully loaded.")
|
||||
console.print()
|
||||
|
||||
game_data = GameData(soup)
|
||||
game_data.populate()
|
||||
|
@ -664,10 +659,10 @@ def main():
|
|||
|
||||
if args.add_item_set:
|
||||
item_list = parse_item_file(args.add_item_set[0])
|
||||
# print(item_list)
|
||||
print("Items to be added:")
|
||||
# console.print(item_list)
|
||||
console.print("Items to be added:")
|
||||
for (item_code, item_quantity) in item_list:
|
||||
print("{} : {}".format(Item.get_name_from_code(item_code), item_quantity))
|
||||
console.print("{} : {}".format(Item.get_name_from_code(item_code), item_quantity))
|
||||
game_data.add_item(item_code, item_quantity)
|
||||
edits_made = True
|
||||
|
||||
|
@ -693,13 +688,13 @@ def main():
|
|||
|
||||
if edits_made:
|
||||
if args.replace_original:
|
||||
print('Renaming original file')
|
||||
console.print('Renaming original file')
|
||||
datetime_suffix = datetime.datetime.now().strftime('%Y-%m-%d-%H%M_%S_%f')
|
||||
new_filename = args.filename + "-" + datetime_suffix
|
||||
# print(datetime_suffix)
|
||||
# console.print(datetime_suffix)
|
||||
os.rename(args.filename, new_filename)
|
||||
|
||||
print('Now rewriting game file with new information')
|
||||
console.print('Now rewriting game file with new information')
|
||||
text = soup.prettify()
|
||||
# Delete XML header - game doesn't have it
|
||||
sansfirstline = '\n'.join(text.split('\n')[1:])
|
||||
|
@ -707,7 +702,7 @@ def main():
|
|||
f = open(args.filename, 'w')
|
||||
f.write(sansfirstline)
|
||||
f.close()
|
||||
print('Complete.')
|
||||
console.print('Complete.')
|
||||
else:
|
||||
text = soup.prettify()
|
||||
# Delete XML header - game doesn't have it
|
||||
|
|
Loading…
Reference in New Issue