mirror of
https://github.com/Steffo99/lihzahrd.git
synced 2024-11-21 23:54:23 +00:00
Complete world loading
This commit is contained in:
parent
49382e811c
commit
317d5d5190
3 changed files with 41 additions and 10 deletions
3
lihzahrd/townmanager/__init__.py
Normal file
3
lihzahrd/townmanager/__init__.py
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
from .room import Room
|
||||||
|
|
||||||
|
__all__ = ["Room"]
|
11
lihzahrd/townmanager/room.py
Normal file
11
lihzahrd/townmanager/room.py
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
from ..fileutils import Coordinates
|
||||||
|
from ..npcs import EntityType
|
||||||
|
|
||||||
|
|
||||||
|
class Room:
|
||||||
|
def __init__(self, npc: EntityType, position: Coordinates):
|
||||||
|
self.npc: EntityType = npc
|
||||||
|
self.position: Coordinates = position
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return f"<Room for {self.npc} at {self.position}>"
|
|
@ -9,6 +9,7 @@ from .signs import *
|
||||||
from .npcs import *
|
from .npcs import *
|
||||||
from .tileentities import *
|
from .tileentities import *
|
||||||
from .pressureplates import *
|
from .pressureplates import *
|
||||||
|
from .townmanager import *
|
||||||
from .timer import Timer
|
from .timer import Timer
|
||||||
|
|
||||||
|
|
||||||
|
@ -52,6 +53,7 @@ class World:
|
||||||
mobs: typing.List[Mob],
|
mobs: typing.List[Mob],
|
||||||
tile_entities: typing.List[TileEntity],
|
tile_entities: typing.List[TileEntity],
|
||||||
weighed_pressure_plates: typing.List[WeighedPressurePlate],
|
weighed_pressure_plates: typing.List[WeighedPressurePlate],
|
||||||
|
rooms: typing.List[Room],
|
||||||
unknown_file_format_data: bytes = b"",
|
unknown_file_format_data: bytes = b"",
|
||||||
unknown_world_header_data: bytes = b"",
|
unknown_world_header_data: bytes = b"",
|
||||||
unknown_world_tiles_data: bytes = b"",
|
unknown_world_tiles_data: bytes = b"",
|
||||||
|
@ -60,8 +62,7 @@ class World:
|
||||||
unknown_npcs_data: bytes = b"",
|
unknown_npcs_data: bytes = b"",
|
||||||
unknown_tile_entities_data: bytes = b"",
|
unknown_tile_entities_data: bytes = b"",
|
||||||
unknown_pressure_plates_data: bytes = b"",
|
unknown_pressure_plates_data: bytes = b"",
|
||||||
unknown_town_manager_data: bytes = b"",
|
unknown_town_manager_data: bytes = b""):
|
||||||
unknown_footer_data: bytes = b""):
|
|
||||||
|
|
||||||
self.version: Version = version
|
self.version: Version = version
|
||||||
"""The game version when this savefile was last saved."""
|
"""The game version when this savefile was last saved."""
|
||||||
|
@ -165,6 +166,7 @@ class World:
|
||||||
self.weighed_pressure_plates: typing.List[WeighedPressurePlate] = weighed_pressure_plates
|
self.weighed_pressure_plates: typing.List[WeighedPressurePlate] = weighed_pressure_plates
|
||||||
"""A list of all Weighed Pressure Plates in the world."""
|
"""A list of all Weighed Pressure Plates in the world."""
|
||||||
|
|
||||||
|
self.rooms: typing.List[Room] = rooms
|
||||||
self.clouds: Clouds = clouds
|
self.clouds: Clouds = clouds
|
||||||
self.cultist_delay: int = cultist_delay
|
self.cultist_delay: int = cultist_delay
|
||||||
self.unknown_file_format_data: bytes = unknown_file_format_data
|
self.unknown_file_format_data: bytes = unknown_file_format_data
|
||||||
|
@ -176,7 +178,6 @@ class World:
|
||||||
self.unknown_tile_entities_data: bytes = unknown_tile_entities_data
|
self.unknown_tile_entities_data: bytes = unknown_tile_entities_data
|
||||||
self.unknown_pressure_plates_data: bytes = unknown_pressure_plates_data
|
self.unknown_pressure_plates_data: bytes = unknown_pressure_plates_data
|
||||||
self.unknown_town_manager_data: bytes = unknown_town_manager_data
|
self.unknown_town_manager_data: bytes = unknown_town_manager_data
|
||||||
self.unknown_footer_data: bytes = unknown_footer_data
|
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f'<World "{self.name}">'
|
return f'<World "{self.name}">'
|
||||||
|
@ -290,10 +291,10 @@ class World:
|
||||||
with Timer("World Header", display=True):
|
with Timer("World Header", display=True):
|
||||||
name = f.string()
|
name = f.string()
|
||||||
|
|
||||||
generator = GeneratorInfo(f.string(), f.int4())
|
generator = GeneratorInfo(f.string(), f.uint8())
|
||||||
|
|
||||||
uuid_ = f.uuid()
|
uuid_ = f.uuid()
|
||||||
id_ = f.int8()
|
id_ = f.int4()
|
||||||
bounds = f.rect()
|
bounds = f.rect()
|
||||||
world_size = Coordinates(y=f.int4(), x=f.int4())
|
world_size = Coordinates(y=f.int4(), x=f.int4())
|
||||||
is_expert = f.bool()
|
is_expert = f.bool()
|
||||||
|
@ -624,8 +625,15 @@ class World:
|
||||||
|
|
||||||
unknown_pressure_plates_data = f.read_until(pointers.town_manager)
|
unknown_pressure_plates_data = f.read_until(pointers.town_manager)
|
||||||
|
|
||||||
# with Timer("Town Manager", display=True):
|
with Timer("Town Manager", display=True):
|
||||||
|
rooms_count = f.int4()
|
||||||
|
rooms = []
|
||||||
|
|
||||||
|
for _ in range(rooms_count):
|
||||||
|
room = Room(npc=EntityType(f.int4()), position=Coordinates(f.int4(), f.int4()))
|
||||||
|
rooms.append(room)
|
||||||
|
|
||||||
|
unknown_town_manager_data = f.read_until(pointers.footer)
|
||||||
|
|
||||||
world = World(version=version, savefile_type=savefile_type, revision=revision, is_favorite=is_favorite,
|
world = World(version=version, savefile_type=savefile_type, revision=revision, is_favorite=is_favorite,
|
||||||
name=name, generator=generator, uuid_=uuid_, id_=id_, bounds=bounds, size=world_size,
|
name=name, generator=generator, uuid_=uuid_, id_=id_, bounds=bounds, size=world_size,
|
||||||
|
@ -634,8 +642,9 @@ class World:
|
||||||
time=time, events=events, dungeon_point=dungeon_point, world_evil=world_evil,
|
time=time, events=events, dungeon_point=dungeon_point, world_evil=world_evil,
|
||||||
saved_npcs=saved_npcs, altars_smashed=altars_smashed, is_hardmode=is_hardmode,
|
saved_npcs=saved_npcs, altars_smashed=altars_smashed, is_hardmode=is_hardmode,
|
||||||
shadow_orbs=shadow_orbs, bosses_defeated=bosses_defeated, anglers_quest=anglers_quest,
|
shadow_orbs=shadow_orbs, bosses_defeated=bosses_defeated, anglers_quest=anglers_quest,
|
||||||
clouds=clouds, cultist_delay=cultist_delay, tiles=tiles, chests=chests, npcs=npcs, mobs=mobs,
|
clouds=clouds, cultist_delay=cultist_delay, tiles=tiles, chests=chests, signs=signs,
|
||||||
tile_entities=tile_entities, weighed_pressure_plates=weighed_pressure_plates,
|
npcs=npcs, mobs=mobs, tile_entities=tile_entities,
|
||||||
|
weighed_pressure_plates=weighed_pressure_plates, rooms=rooms,
|
||||||
unknown_file_format_data=unknown_file_format_data,
|
unknown_file_format_data=unknown_file_format_data,
|
||||||
unknown_world_header_data=unknown_world_header_data,
|
unknown_world_header_data=unknown_world_header_data,
|
||||||
unknown_world_tiles_data=unknown_world_tiles_data,
|
unknown_world_tiles_data=unknown_world_tiles_data,
|
||||||
|
@ -644,6 +653,14 @@ class World:
|
||||||
unknown_npcs_data=unknown_npcs_data,
|
unknown_npcs_data=unknown_npcs_data,
|
||||||
unknown_tile_entities_data=unknown_tile_entities_data,
|
unknown_tile_entities_data=unknown_tile_entities_data,
|
||||||
unknown_pressure_plates_data=unknown_pressure_plates_data,
|
unknown_pressure_plates_data=unknown_pressure_plates_data,
|
||||||
unknown_town_manager_data=unknown_town_manager_data,
|
unknown_town_manager_data=unknown_town_manager_data)
|
||||||
unknown_footer_data=unknown_footer_data)
|
|
||||||
|
with Timer("Footer", display=True):
|
||||||
|
if not f.bool():
|
||||||
|
raise Exception("Invalid footer")
|
||||||
|
if not f.string() == world.name:
|
||||||
|
raise Exception("Invalid footer")
|
||||||
|
if not f.int4() == world.id:
|
||||||
|
raise Exception("Invalid footer")
|
||||||
|
|
||||||
return world
|
return world
|
||||||
|
|
Loading…
Reference in a new issue