Repository for mbEditorPro 2.0
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

130 lines
6.8 KiB

# • ▌ ▄ ·. ▄▄▄▄· ▄▄▄ .·▄▄▄▄ ▪ ▄▄▄▄▄ ▄▄▄ ▄▄▄·▄▄▄
# ·██ ▐███▪▐█ ▀█▪ ▀▄.▀·██▪ ██ ██ •██ ▪ ▀▄ █· ▐█ ▄█▀▄ █·▪
# ▐█ ▌▐▌▐█·▐█▀▀█▄ ▐▀▀▪▄▐█· ▐█▌▐█· ▐█.▪ ▄█▀▄ ▐▀▀▄ ██▀·▐▀▀▄ ▄█▀▄
# ██ ██▌▐█▌██▄▪▐█ ▐█▄▄▌██. ██ ▐█▌ ▐█▌·▐█▌.▐▌▐█•█▌ ▐█▪·•▐█•█▌▐█▌.▐▌
# ▀▀ █▪▀▀▀·▀▀▀▀ ▀▀▀ ▀▀▀▀▀• ▀▀▀ ▀▀▀ ▀█▄▀▪.▀ ▀ .▀ .▀ ▀ ▀█▄▀▪
# Magicbane Emulator Project © 2013 - 2022
# www.magicbane.com
from arcane.util import ResStream
from .MerchantInfo import MerchantInfo
class Product:
def load_binary(self, stream: ResStream):
self.product_cost = stream.read_dword()
self.product_base_time = stream.read_dword()
self.product_min_rank = stream.read_dword()
self.product_is_complete = stream.read_bool()
self.product_is_pending = stream.read_bool()
self.product_order_num = stream.read_dword()
self.product_time_mod = stream.read_dword()
self.product_enchantment = stream.read_dword()
self.product_action_prefix_id = stream.read_dword()
self.product_action_suffix_id = stream.read_dword()
self.product_u = stream.read_dword()
self.product_u = stream.read_bool()
self.product_id = stream.read_qword()
self.product_pending_id = stream.read_qword()
self.product_item_type_id = stream.read_qword()
self.product_next_complete = [stream.read_dword() for _ in range(6)]
class MinionElement:
def load_binary(self, stream: ResStream):
self.minion_element_id = stream.read_qword()
self.minion_element_type = stream.read_qword()
self.minion_element_lookup = stream.read_qword()
self.minion_element_base_time = stream.read_dword()
self.minion_element_mod_time = stream.read_dword()
self.minion_element_u = stream.read_dword()
self.minion_element_is_complete = stream.read_bool()
self.minion_element_next_complete = [stream.read_dword() for _ in range(6)]
self.minion_element_name = stream.read_string()
self.minion_element_u = stream.read_string()
self.minion_element_rank = stream.read_dword()
self.minion_element_category = stream.read_dword()
self.minion_element_u = stream.read_string()
self.minion_element_u = stream.read_string()
class ServiceElement:
def load_binary(self, stream: ResStream):
self.service_element_id = stream.read_qword()
self.service_element_keyword = stream.read_dword()
self.service_element_key_value = stream.read_dword()
self.service_element_description = stream.read_string()
self.service_element_unit_description = stream.read_string()
self.service_element_cost = stream.read_dword()
self.service_element_unit_value = stream.read_dword()
self.service_element_min_rank = stream.read_dword()
class HirelingMod:
def load_binary(self, stream: ResStream):
self.hireling_mod_type = stream.read_dword()
self.hireling_mod_rank = stream.read_dword()
self.hireling_mod_quantity = stream.read_dword()
self.hireling_mod_percent = stream.read_float()
class JunkerBasics:
def load_binary(self, stream: ResStream):
self.junker_auto_junk = stream.read_bool()
self.junker_auto_junk_magic = stream.read_bool()
self.junker_auto_junk_int = stream.read_dword()
self.junker_auto_junk_magic_int = stream.read_dword()
class HirelingInfo(MerchantInfo):
def load_binary(self, stream: ResStream):
super().load_binary(stream)
self.hireling_all_items = stream.read_bool()
self.hireling_rank = stream.read_dword()
self.hireling_title = stream.read_string()
self.hireling_salary = stream.read_dword()
self.hireling_upgrade_cost = stream.read_dword()
self.hireling_upgrade_time = stream.read_dword()
self.hireling_can_upgrade = stream.read_bool()
self.hireling_use_specified_location = stream.read_bool()
self.hireling_category = stream.read_dword()
num_npc_features = stream.read_dword()
self.hireling_npc_features = [stream.read_dword() for _ in range(num_npc_features)]
num_item_types = stream.read_dword()
self.hireling_item_types = [stream.read_dword() for _ in range(num_item_types)]
num_products = stream.read_dword()
self.hireling_products = [Product() for _ in range(num_products)]
num_stocks = stream.read_dword()
self.hireling_stocks = [Product() for _ in range(num_stocks)]
num_minions = stream.read_dword()
self.hireling_minions = [MinionElement() for _ in range(num_minions)]
num_servies = stream.read_dword()
self.hireling_servies = [ServiceElement() for _ in range(num_servies)]
num_orders = stream.read_dword()
self.hireling_orders = [[
stream.read_dword() for _ in range(4)
] for _ in range(num_orders)]
num_starting_formulas = stream.read_dword()
self.hireling_starting_formulas = [stream.read_qword() for _ in range(num_starting_formulas)]
num_valid_formula_types = stream.read_dword()
self.hireling_valid_formula_types = [stream.read_dword() for _ in range(num_valid_formula_types)]
num_valid_formula_categories = stream.read_dword()
self.hireling_valid_formula_category = [stream.read_dword() for _ in range(num_valid_formula_categories)]
num_enchantment_types = stream.read_dword()
self.hireling_enchantment_types = [stream.read_dword() for _ in range(num_enchantment_types)]
num_valid_weapons = stream.read_dword()
self.hireling_valid_weapons = [stream.read_dword() for _ in range(num_valid_weapons)]
num_valid_armors = stream.read_dword()
self.hireling_valid_armors = [stream.read_dword() for _ in range(num_valid_armors)]
num_valid_slaves = stream.read_dword()
self.hireling_valid_slaves = [stream.read_dword() for _ in range(num_valid_slaves)]
num_mods = stream.read_dword()
self.hireling_mods = [HirelingMod() for _ in range(num_mods)]
for mod in self.hireling_mods:
mod.load_binary(stream)
self.hireling_max_items_stocked = stream.read_dword()
self.hireling_has_junker = stream.read_bool()
if self.hireling_has_junker:
self.hireling_junker = JunkerBasics()
self.hireling_junker.load_binary(stream)