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
130 lines
6.8 KiB
2 years ago
|
# • ▌ ▄ ·. ▄▄▄▄· ▄▄▄ .·▄▄▄▄ ▪ ▄▄▄▄▄ ▄▄▄ ▄▄▄·▄▄▄
|
||
|
# ·██ ▐███▪▐█ ▀█▪ ▀▄.▀·██▪ ██ ██ •██ ▪ ▀▄ █· ▐█ ▄█▀▄ █·▪
|
||
|
# ▐█ ▌▐▌▐█·▐█▀▀█▄ ▐▀▀▪▄▐█· ▐█▌▐█· ▐█.▪ ▄█▀▄ ▐▀▀▄ ██▀·▐▀▀▄ ▄█▀▄
|
||
|
# ██ ██▌▐█▌██▄▪▐█ ▐█▄▄▌██. ██ ▐█▌ ▐█▌·▐█▌.▐▌▐█•█▌ ▐█▪·•▐█•█▌▐█▌.▐▌
|
||
|
# ▀▀ █▪▀▀▀·▀▀▀▀ ▀▀▀ ▀▀▀▀▀• ▀▀▀ ▀▀▀ ▀█▄▀▪.▀ ▀ .▀ .▀ ▀ ▀█▄▀▪
|
||
|
# Magicbane Emulator Project © 2013 - 2022
|
||
|
# www.magicbane.com
|
||
2 years ago
|
|
||
|
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)
|