diff --git a/generate.py b/generate.py index eabe959..d976816 100644 --- a/generate.py +++ b/generate.py @@ -312,7 +312,27 @@ def get_correct_text_sizes(draw, text: str, font: ImageFont.FreeTypeFont): return (label_width, label_height) -def generate_main(char: dict): +def get_char_data_from_dndb(char_id: int): + headers = { + 'Content-Type': 'text/json', + 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0', + 'Referer': 'https://www.dndbeyond.com/' + } + + for i in range(3): + response = requests.get(f"{DNDB_BASE_URL}/{char_id}?includeCustomItems=true", headers=headers) + if response.status_code == 200: + data = response.json()['data'] + break + sleep(1) + + else: + print("Error: Failed to retrieve data from URL.") + return False + + return data + +def generate_main(char: dict, scene: str = "main"): STATS_DICT = { 1: { "name": "strength", @@ -340,31 +360,14 @@ def generate_main(char: dict): }, } - headers = { - 'Content-Type': 'text/json', - 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0', - 'Referer': 'https://www.dndbeyond.com/' - } - - for i in range(3): - response = requests.get(f"{DNDB_BASE_URL}/{char['characterId']}?includeCustomItems=true", headers=headers) - if response.status_code == 200: - data = response.json()['data'] - break - sleep(1) - - else: - print("Error: Failed to retrieve data from URL.") - return False - ch = CharacterService() print(f"Chars name: {char['characterName']}") - max_hp = ch.get_max_hp(data) - current_hp = max_hp - int(data['removedHitPoints']) - print(f"CHARS HEALTH: {max_hp-int(data['removedHitPoints'])}/{max_hp}") + max_hp = ch.get_max_hp(char['data']) + current_hp = max_hp - int(char['data']['removedHitPoints']) + print(f"CHARS HEALTH: {current_hp}/{max_hp}") # Load the background image - background = Image.open("parts/background-main.png") + background = Image.open(f"parts/background-{scene}.png") # Load the image to be placed on top foreground = Image.open(f"parts/{char['portraitName']}-main.png") @@ -380,7 +383,7 @@ def generate_main(char: dict): draw_width, _ = draw.im.size # pyright: ignore[reportGeneralTypeIssues] for stat in ch.stat_map.keys(): - final_stat = ch.get_stat_mod(data, stat) + final_stat = ch.get_stat_mod(char['data'], stat) # Define the font and font size for the text labels stats_font = ImageFont.truetype("fonts/NotoSerif-Regular.ttf", 30) @@ -419,7 +422,10 @@ def generate_main(char: dict): if not os.path.exists(results_dir): os.makedirs(results_dir) - background.save(f"results/{char['portraitName']}-main.png") + if scene == "battle": + background = background.resize((553, 320)) + + background.save(f"results/{char['portraitName']}-{scene}.png") return True @@ -431,4 +437,6 @@ empty_image.save("results/transparent.png") # generate_main(DNDB_CHARS[1]) for char in DNDB_CHARS: - generate_main(char) + char['data'] = get_char_data_from_dndb(char['characterId']) + generate_main(char, "main") + generate_main(char, "battle") diff --git a/parts/background-battle.png b/parts/background-battle.png new file mode 100644 index 0000000..711ed23 Binary files /dev/null and b/parts/background-battle.png differ