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.

93 lines
4.6 KiB

# • ▌ ▄ ·. ▄▄▄▄· ▄▄▄ .·▄▄▄▄ ▪ ▄▄▄▄▄ ▄▄▄ ▄▄▄·▄▄▄
# ·██ ▐███▪▐█ ▀█▪ ▀▄.▀·██▪ ██ ██ •██ ▪ ▀▄ █· ▐█ ▄█▀▄ █·▪
# ▐█ ▌▐▌▐█·▐█▀▀█▄ ▐▀▀▪▄▐█· ▐█▌▐█· ▐█.▪ ▄█▀▄ ▐▀▀▄ ██▀·▐▀▀▄ ▄█▀▄
# ██ ██▌▐█▌██▄▪▐█ ▐█▄▄▌██. ██ ▐█▌ ▐█▌·▐█▌.▐▌▐█•█▌ ▐█▪·•▐█•█▌▐█▌.▐▌
# ▀▀ █▪▀▀▀·▀▀▀▀ ▀▀▀ ▀▀▀▀▀• ▀▀▀ ▀▀▀ ▀█▄▀▪.▀ ▀ .▀ .▀ ▀ ▀█▄▀▪
# Magicbane Emulator Project © 2013 - 2022
# www.magicbane.com
from collections import OrderedDict
from arcane.enums.hashes import hash_to_string, string_to_hash
from arcane.enums.zone.arc_zone_goal import *
from arcane.util import ResStream
class ArcZoneGoalPoint:
def load_binary(self, stream: ResStream):
self.zone_goal_point_vectors = [stream.read_dword() for _ in range(6)]
self.zone_goal_point_location = stream.read_tuple()
def save_binary(self, stream: ResStream):
for i in range(6):
stream.write_dword(self.zone_goal_point_vectors[i])
stream.write_tuple(self.zone_goal_point_location)
def save_json(self):
data = OrderedDict()
data['zone_goal_point_vectors'] = self.zone_goal_point_vectors
data['zone_goal_point_location'] = self.zone_goal_point_location
return data
def load_json(self, data):
self.zone_goal_point_vectors = data['zone_goal_point_vectors']
self.zone_goal_point_location = data['zone_goal_point_location']
class ArcZoneGoal:
def load_binary(self, stream: ResStream):
self.zone_goal_type = stream.read_dword()
self.zone_goal_value = stream.read_dword()
self.zone_goal_name = stream.read_string()
self.zone_goal_delay = stream.read_dword()
self.zone_goal_has_teleport_registry = stream.read_bool()
if self.zone_goal_has_teleport_registry:
self.zone_goal_teleport_registry = stream.read_dword()
self.zone_goal_dungeon = stream.read_qword()
num_points = stream.read_dword()
self.zone_goal_points = [ArcZoneGoalPoint() for _ in range(num_points)]
for point in self.zone_goal_points:
point.load_binary(stream)
def save_binary(self, stream: ResStream):
stream.write_dword(self.zone_goal_type)
stream.write_dword(self.zone_goal_value)
stream.write_string(self.zone_goal_name)
stream.write_dword(self.zone_goal_delay)
stream.write_bool(self.zone_goal_has_teleport_registry)
if self.zone_goal_has_teleport_registry:
stream.write_dword(self.zone_goal_teleport_registry)
stream.write_qword(self.zone_goal_dungeon)
stream.write_dword(len(self.zone_goal_points))
for point in self.zone_goal_points:
point.save_binary(stream)
def save_json(self):
data = OrderedDict()
data['zone_goal_type'] = GOAL_TYPE_TO_STRING[self.zone_goal_type]
data['zone_goal_value'] = hash_to_string(self.zone_goal_value)
data['zone_goal_name'] = self.zone_goal_name
data['zone_goal_delay'] = self.zone_goal_delay
data['zone_goal_has_teleport_registry'] = self.zone_goal_has_teleport_registry
if self.zone_goal_has_teleport_registry:
data['zone_goal_teleport_registry'] = hash_to_string(self.zone_goal_teleport_registry)
data['zone_goal_dungeon'] = self.zone_goal_dungeon
data['zone_goal_points'] = []
for point in self.zone_goal_points:
data['zone_goal_points'].append(point.save_json())
return data
def load_json(self, data):
self.zone_goal_type = STRING_TO_GOAL_TYPE[data['zone_goal_type']]
self.zone_goal_value = string_to_hash(data['zone_goal_value'])
self.zone_goal_name = data['zone_goal_name']
self.zone_goal_delay = data['zone_goal_delay']
self.zone_goal_has_teleport_registry = data['zone_goal_has_teleport_registry']
if self.zone_goal_has_teleport_registry:
self.zone_goal_teleport_registry = string_to_hash(data['zone_goal_teleport_registry'])
self.zone_goal_dungeon = data['zone_goal_dungeon']
self.zone_goal_points = []
for point_data in data['zone_goal_points']:
point = ArcZoneGoalPoint()
point.load_json(point_data)
self.zone_goal_points.append(point)