diff --git a/resources/parsers/defense.py b/resources/parsers/defense.py index 738217599d3fae97f5f97073f1551725a53cfec9..e010dba0e95e458ca866ddb8dec7f72c0c1876da 100644 --- a/resources/parsers/defense.py +++ b/resources/parsers/defense.py @@ -40,7 +40,10 @@ class DefenseParser: self.filter_file.write("# ====================== #\n") self.filter_file.write("\n") - # Handle for all present weapon types. Note that parse order is order that values show up in filter. + # Parse all defence drops for low level socket connections. + self.parse_low_level_sockets() + + # Handle for all present armor types. Note that parse order is order that values show up in filter. if "A" in self.defense_types: self.parse_subnum += 1 self.parse_a() @@ -65,6 +68,140 @@ class DefenseParser: self.parse_subnum += 1 self.parse_en_a() + def parse_low_level_sockets(self): + """ + Parses low level armor for linked sockets. + """ + if self.debug: + logger.info("Parsing low level armor sockets.") + + self.parse_subnum += 1 + parse_subnum = str(self.parse_subnum).zfill(2) + section_name = "Early Armor Socket Links" + padding_count = len(section_name) - 1 + + three_link_armor_slots = [ + "Shields", + "Helmets", + "Body Armours", + "Gloves", + "Boots", + ] + + # Section Start. + self.filter_file.write("\n") + self.filter_file.write("# --------------------{0} #\n".format("-" * padding_count)) + self.filter_file.write("# --- [{0}.{1}] - {2} --- #\n".format(self.parse_num, parse_subnum, section_name)) + self.filter_file.write("# --------------------{0} #\n".format("-" * padding_count)) + self.filter_file.write("\n") + self.filter_file.write("# Displays more variety of low-level gear with good early socket connections.\n") + self.filter_file.write("# To help builds out early game.\n") + self.filter_file.write("\n") + + # Filter for 3-socket max items early on. + self.template.common_item( + description="Early 3-Linked-Socket Linked RGB", + class_text=three_link_armor_slots, + item_level="<= 25", + socket_group='"RGB"', + border_color=display_dict["notable_border"], + font_size=display_dict["rare_font_size"], + ) + self.template.rare_item( + description="Early 3-Linked-Socket Slot Rares", + class_text=three_link_armor_slots, + item_level="<= 25", + linked_sockets="3", + border_color=display_dict["notable_border"], + font_size=display_dict["important_font_size"], + ) + self.template.uncommon_item( + description="Early 3-Linked-Socket Slot Uncommons", + class_text=three_link_armor_slots, + item_level="<= 25", + linked_sockets="3", + border_color=display_dict["notable_border"], + font_size=display_dict["rare_font_size"], + ) + self.template.common_item( + description="Early 3-Linked-Socket Slot Normals", + class_text=three_link_armor_slots, + item_level="<= 25", + linked_sockets="3", + border_color=display_dict["notable_border"], + font_size=display_dict["uncommon_font_size"], + ) + + # Filter for 4-socket max items early on. + self.template.common_item( + description="Early 4-Linked-Socket Linked RGB", + class_text="Body Armours", + item_level="<= 40", + socket_group='"RGB"', + linked_sockets="4", + border_color=display_dict["notable_border"], + font_size=display_dict["rare_font_size"], + ) + self.template.rare_item( + description="Early 4-Linked-Socket Slot Rares", + class_text="Body Armours", + item_level="<= 40", + linked_sockets="4", + border_color=display_dict["notable_border"], + font_size=display_dict["important_font_size"], + ) + self.template.uncommon_item( + description="Early 4-Linked-Socket Slot Uncommons", + class_text="Body Armours", + item_level="<= 40", + linked_sockets="4", + border_color=display_dict["notable_border"], + font_size=display_dict["rare_font_size"], + ) + self.template.common_item( + description="Early 4-Linked-Socket Slot Normals", + class_text="Body Armours", + item_level="<= 40", + linked_sockets="4", + border_color=display_dict["notable_border"], + font_size=display_dict["uncommon_font_size"], + ) + + # Filter for 5-socket max items early on. + self.template.common_item( + description="Early 5-Linked-Socket Linked RGB", + class_text="Body Armours", + item_level="<= 60", + socket_group='"RGB"', + linked_sockets="5", + border_color=display_dict["notable_border"], + font_size=display_dict["important_font_size"], + ) + self.template.rare_item( + description="Early 5-Linked-Socket Slot Rares", + class_text="Body Armours", + item_level="<= 60", + linked_sockets="5", + border_color=display_dict["notable_border"], + font_size=display_dict["important_font_size"], + ) + self.template.uncommon_item( + description="Early 5-Linked-Socket Slot Uncommons", + class_text="Body Armours", + item_level="<= 60", + linked_sockets="5", + border_color=display_dict["notable_border"], + font_size=display_dict["rare_font_size"], + ) + self.template.common_item( + description="Early 5-Linked-Socket Slot Normals", + class_text="Body Armours", + item_level="<= 60", + linked_sockets="5", + border_color=display_dict["notable_border"], + font_size=display_dict["uncommon_font_size"], + ) + def parse_section(self, def_type, subnum): """ Parses a full armor type section. @@ -261,17 +398,20 @@ class DefenseParser: """ drop_level = filter_dict["base_drop_level"] + filter_dict["level_rarity_modifier"] - if item["MaxLevel"] is True: - self.template.uncommon_item( - base_text=item["Name"], - background_color=display_dict[def_type], - ) - else: - self.template.uncommon_item( - base_text=item["Name"], - item_level="<= {0}".format(item["DropLevel"] + drop_level), - background_color=display_dict[def_type], - ) + # Only show uncommons if low level. + # Otherwise, they'll show up as currency drops if relevant. + if item["DropLevel"] <= 25: + if item["MaxLevel"] is True: + self.template.uncommon_item( + base_text=item["Name"], + background_color=display_dict[def_type], + ) + else: + self.template.uncommon_item( + base_text=item["Name"], + item_level="<= {0}".format(item["DropLevel"] + drop_level), + background_color=display_dict[def_type], + ) def parse_item_base(self, def_type, item): """ diff --git a/resources/parsers/other.py b/resources/parsers/other.py index db07a3223b3dc33cb6d80048f8c4b5fc52af2a2d..1c5d5b6da7d91a71299a0f4a1f42bd53b955a408 100644 --- a/resources/parsers/other.py +++ b/resources/parsers/other.py @@ -471,6 +471,7 @@ class FinalParser: "Daggers", "Claws", "One Hand Swords", + "Thrusting One Hand Swords", "Two Hand Swords", "Bows", "Quivers", diff --git a/resources/parsers/table_of_contents.py b/resources/parsers/table_of_contents.py index e106b0be279732bc166cd8f9624f2e8d7d6c7d77..60f2de9e8034d62ae2bd9f0ca51841e8c2ef832a 100644 --- a/resources/parsers/table_of_contents.py +++ b/resources/parsers/table_of_contents.py @@ -114,10 +114,19 @@ class TableOfContentsGenerator: self.filter_file.write("# [{0}.03] - Rings\n".format(str(parse_num).zfill(3))) self.filter_file.write("#\n") + # Weapon Toc. parse_num += 1 + parse_subnum = 0 self.filter_file.write("# [{0}] - Weapons\n".format(str(parse_num).zfill(3))) - parse_subnum = 0 + parse_subnum += 1 + self.filter_file.write( + "# [{0}.{1}] - Early Weapon Socket Links\n".format( + str(parse_num).zfill(3), + str(parse_subnum).zfill(2), + ), + ) + if "OneHandMaces" in self.weapon_types: parse_subnum += 1 self.filter_file.write( @@ -316,12 +325,21 @@ class TableOfContentsGenerator: self.filter_file.write("#\n") + # Armor ToC. parse_num += 1 + parse_subnum = 0 self.filter_file.write( "# [{0}] - Armors\n".format(str(parse_num).zfill(3)), ) - parse_subnum = 0 + parse_subnum += 1 + self.filter_file.write( + "# [{0}.{1}] - Early Armor Socket Links\n".format( + str(parse_num).zfill(3), + str(parse_subnum).zfill(2), + ), + ) + if "A" in self.defense_types: parse_subnum += 1 self.filter_file.write( diff --git a/resources/parsers/weapons.py b/resources/parsers/weapons.py index fbd08d924bdacf8887377e44821ad708e320d0a9..601d3928abf6cafa485872c730cb6d34226641a7 100644 --- a/resources/parsers/weapons.py +++ b/resources/parsers/weapons.py @@ -43,6 +43,9 @@ class WeaponParser: self.filter_file.write("# ======================= #\n") self.filter_file.write("\n") + # Parse all weapon drops on selected weapons for low level socket connections. + self.parse_low_level_sockets(weapon_types) + # Handle for all present weapon types. Note that parse order is order that values show up in filter. if "OneHandMaces" in self.weapon_types: self.parse_one_hand_maces() @@ -89,6 +92,227 @@ class WeaponParser: if "Shields" in self.weapon_types: self.parse_shields() + def parse_low_level_sockets(self, weapon_types): + """ + Parses low level armor for linked sockets. + """ + if self.debug: + logger.info("Parsing low level armor sockets.") + + self.parse_subnum += 1 + parse_subnum = str(self.parse_subnum).zfill(2) + section_name = "Early Weapon Socket Links" + padding_count = len(section_name) - 1 + + for weapon in weapon_types: + logger.info("WEAPON: {0}".format(weapon)) + + three_link_weapon_slots = {} + six_link_weapon_slots = {} + selected_weapon_classes = [] + + # Weapons tend to be directly tied to skills. + # So only display linked weapons as indicated by the select type. + if "OneHandMaces" in weapon_types: + selected_weapon_classes.append("One Hand Maces") + three_link_weapon_slots["One Hand Maces"] = "A" + + if "TwoHandMaces" in weapon_types: + selected_weapon_classes.append("Two Hand Maces") + three_link_weapon_slots["Two Hand Maces"] = "A" + six_link_weapon_slots["Two Hand Maces"] = "A" + + if "OneHandAxes" in weapon_types: + selected_weapon_classes.append("One Hand Axes") + three_link_weapon_slots["One Hand Axes"] = "A/Ev" + + if "TwoHandAxes" in weapon_types: + selected_weapon_classes.append("Two Hand Axes") + three_link_weapon_slots["Two Hand Axes"] = "A/Ev" + six_link_weapon_slots["Two Hand Axes"] = "A/Ev" + + if "Daggers" in weapon_types: + selected_weapon_classes.append("Daggers") + three_link_weapon_slots["Daggers"] = "Ev/En" + + if "OneHandSwords" in weapon_types: + selected_weapon_classes.append("One Hand Swords") + three_link_weapon_slots["One Hand Swords"] = "A/Ev" + + if "OneHandThrustingSwords" in weapon_types: + selected_weapon_classes.append("Thrusting One Hand Swords") + three_link_weapon_slots["Thrusting One Hand Swords"] = "Ev" + + if "TwoHandSwords" in weapon_types: + selected_weapon_classes.append("Two Hand Swords") + three_link_weapon_slots["Two Hand Swords"] = "A/Ev" + six_link_weapon_slots["Two Hand Swords"] = "A/Ev" + + if "Claws" in weapon_types: + selected_weapon_classes.append("Claws") + three_link_weapon_slots["Claws"] = "Ev/En" + + if "Bows" in weapon_types: + selected_weapon_classes.append("Bows") + three_link_weapon_slots["Bows"] = "Ev" + six_link_weapon_slots["Bows"] = "Ev" + + if "Sceptres" in weapon_types: + selected_weapon_classes.append("Sceptres") + three_link_weapon_slots["Sceptres"] = "En/A" + + if "Wands" in weapon_types: + selected_weapon_classes.append("Wands") + three_link_weapon_slots["Wands"] = "En" + + if "Staves" in weapon_types: + selected_weapon_classes.append("Staves") + three_link_weapon_slots["Staves"] = "En/A" + six_link_weapon_slots["Staves"] = "En/A" + + if "Shields" in weapon_types: + selected_weapon_classes.append("Shields") + three_link_weapon_slots["Shields"] = None + + # Section Start. + self.filter_file.write("\n") + self.filter_file.write("# --------------------{0} #\n".format("-" * padding_count)) + self.filter_file.write("# --- [{0}.{1}] - {2} --- #\n".format(self.parse_num, parse_subnum, section_name)) + self.filter_file.write("# --------------------{0} #\n".format("-" * padding_count)) + self.filter_file.write("\n") + self.filter_file.write("# Displays more variety of low-level gear with good early socket connections.\n") + self.filter_file.write("# To help builds out early game.\n") + self.filter_file.write("\n") + + for weapon_class in selected_weapon_classes: + weapon_class_attr = three_link_weapon_slots[weapon_class] + + # Filter for 3-socket max items early on. + self.template.common_item( + description="Early 3-Linked-Socket Linked RGB", + class_text=weapon_class, + item_level="<= 25", + socket_group='"RGB"', + background_color=display_dict[weapon_class_attr] if weapon_class_attr else None, + border_color=display_dict["notable_border"], + font_size=display_dict["rare_font_size"], + ) + self.template.rare_item( + description="Early 3-Linked-Socket Slot Rares", + class_text=weapon_class, + item_level="<= 25", + linked_sockets="3", + background_color=display_dict[weapon_class_attr] if weapon_class_attr else None, + border_color=display_dict["notable_border"], + font_size=display_dict["important_font_size"], + ) + self.template.uncommon_item( + description="Early 3-Linked-Socket Slot Uncommons", + class_text=weapon_class, + item_level="<= 25", + linked_sockets="3", + background_color=display_dict[weapon_class_attr] if weapon_class_attr else None, + border_color=display_dict["notable_border"], + font_size=display_dict["rare_font_size"], + ) + self.template.common_item( + description="Early 3-Linked-Socket Slot Normals", + class_text=weapon_class, + item_level="<= 25", + linked_sockets="3", + background_color=display_dict[weapon_class_attr] if weapon_class_attr else None, + border_color=display_dict["notable_border"], + font_size=display_dict["uncommon_font_size"], + ) + + # Weapons of 6 socket size. + if len(six_link_weapon_slots) > 0: + + try: + weapon_class_attr = six_link_weapon_slots[weapon_class] + + # Filter for 4-socket max items early on. + self.template.common_item( + description="Early 4-Linked-Socket Linked RGB", + class_text=weapon_class, + item_level="<= 40", + socket_group='"RGB"', + linked_sockets="4", + background_color=display_dict[weapon_class_attr], + border_color=display_dict["notable_border"], + font_size=display_dict["rare_font_size"], + ) + self.template.rare_item( + description="Early 4-Linked-Socket Slot Rares", + class_text=weapon_class, + item_level="<= 40", + linked_sockets="4", + background_color=display_dict[weapon_class_attr], + border_color=display_dict["notable_border"], + font_size=display_dict["important_font_size"], + ) + self.template.uncommon_item( + description="Early 4-Linked-Socket Slot Uncommons", + class_text=weapon_class, + item_level="<= 40", + linked_sockets="4", + background_color=display_dict[weapon_class_attr], + border_color=display_dict["notable_border"], + font_size=display_dict["rare_font_size"], + ) + self.template.common_item( + description="Early 4-Linked-Socket Slot Normals", + class_text=weapon_class, + item_level="<= 40", + linked_sockets="4", + background_color=display_dict[weapon_class_attr], + border_color=display_dict["notable_border"], + font_size=display_dict["uncommon_font_size"], + ) + + # Filter for 5-socket max items early on. + self.template.common_item( + description="Early 5-Linked-Socket Linked RGB", + class_text=weapon_class, + item_level="<= 60", + socket_group='"RGB"', + linked_sockets="5", + background_color=display_dict[weapon_class_attr], + border_color=display_dict["notable_border"], + font_size=display_dict["important_font_size"], + ) + self.template.rare_item( + description="Early 5-Linked-Socket Slot Rares", + class_text=weapon_class, + item_level="<= 60", + linked_sockets="5", + background_color=display_dict[weapon_class_attr], + border_color=display_dict["notable_border"], + font_size=display_dict["important_font_size"], + ) + self.template.uncommon_item( + description="Early 5-Linked-Socket Slot Uncommons", + class_text=weapon_class, + item_level="<= 60", + linked_sockets="5", + background_color=display_dict[weapon_class_attr], + border_color=display_dict["notable_border"], + font_size=display_dict["rare_font_size"], + ) + self.template.common_item( + description="Early 5-Linked-Socket Slot Normals", + class_text=weapon_class, + item_level="<= 60", + linked_sockets="5", + background_color=display_dict[weapon_class_attr], + border_color=display_dict["notable_border"], + font_size=display_dict["uncommon_font_size"], + ) + + except KeyError: + # If we made it here, then weapon type only went up to 3 sockets max. + pass + def parse_item(self, item, background_color): """ Parses an individual item. @@ -198,17 +422,20 @@ class WeaponParser: """ drop_level = filter_dict["base_drop_level"] + filter_dict["level_rarity_modifier"] - if item["MaxLevel"] is True: - self.template.uncommon_item( - base_text=item["Name"], - background_color=background_color, - ) - else: - self.template.uncommon_item( - base_text=item["Name"], - background_color=background_color, - item_level="<= {0}".format(item["DropLevel"] + drop_level), - ) + # Only explicitly show uncommons if low level. + # Otherwise, they'll show up as currency drops if relevant. + if item["DropLevel"] <= 25: + if item["MaxLevel"] is True: + self.template.uncommon_item( + base_text=item["Name"], + background_color=background_color, + ) + else: + self.template.uncommon_item( + base_text=item["Name"], + background_color=background_color, + item_level="<= {0}".format(item["DropLevel"] + drop_level), + ) def parse_item_base(self, item, background_color): """