add seed_name to multidata and RoomInfo

This commit is contained in:
Fabian Dill 2021-04-12 09:36:45 +02:00
parent 764e6e7926
commit 2df7e4e537
6 changed files with 13 additions and 11 deletions

View File

@ -417,7 +417,8 @@ def main(args, seed=None):
for player in world.alttp_player_ids: for player in world.alttp_player_ids:
rom_futures.append(pool.submit(_gen_rom, team, player)) rom_futures.append(pool.submit(_gen_rom, team, player))
for player in world.factorio_player_ids: for player in world.factorio_player_ids:
mod_futures.append(pool.submit(generate_mod, world, player)) mod_futures.append(pool.submit(generate_mod, world, player,
str(args.outputname if args.outputname else world.seed)))
def get_entrance_to_region(region: Region): def get_entrance_to_region(region: Region):
for entrance in region.entrances: for entrance in region.entrances:
@ -524,6 +525,7 @@ def main(args, seed=None):
"version": tuple(_version_tuple), "version": tuple(_version_tuple),
"tags": ["AP"], "tags": ["AP"],
"minimum_versions": minimum_versions, "minimum_versions": minimum_versions,
"seed_name": str(args.outputname if args.outputname else world.seed)
}), 9) }), 9)
with open(output_path('%s.archipelago' % outfilebase), 'wb') as f: with open(output_path('%s.archipelago' % outfilebase), 'wb') as f:

View File

@ -112,6 +112,7 @@ class Context(Node):
self.tags = ['AP'] self.tags = ['AP']
self.games = {} self.games = {}
self.minimum_client_versions: typing.Dict[int, Utils.Version] = {} self.minimum_client_versions: typing.Dict[int, Utils.Version] = {}
self.seed_name = ""
def load(self, multidatapath: str, use_embedded_server_options: bool = False): def load(self, multidatapath: str, use_embedded_server_options: bool = False):
with open(multidatapath, 'rb') as f: with open(multidatapath, 'rb') as f:
@ -141,7 +142,7 @@ class Context(Node):
for team, names in enumerate(decoded_obj['names']): for team, names in enumerate(decoded_obj['names']):
for player, name in enumerate(names, 1): for player, name in enumerate(names, 1):
self.player_names[(team, player)] = name self.player_names[(team, player)] = name
self.seed_name = decoded_obj["seed_name"]
self.connect_names = decoded_obj['connect_names'] self.connect_names = decoded_obj['connect_names']
self.remote_items = decoded_obj['remote_items'] self.remote_items = decoded_obj['remote_items']
self.locations = decoded_obj['locations'] self.locations = decoded_obj['locations']
@ -152,6 +153,7 @@ class Context(Node):
server_options = decoded_obj.get("server_options", {}) server_options = decoded_obj.get("server_options", {})
self._set_options(server_options) self._set_options(server_options)
def get_players_package(self): def get_players_package(self):
return [NetworkPlayer(t, p, self.get_aliased_name(t, p), n) for (t, p), n in self.player_names.items()] return [NetworkPlayer(t, p, self.get_aliased_name(t, p), n) for (t, p), n in self.player_names.items()]
@ -367,7 +369,8 @@ async def on_client_connected(ctx: Context, client: Client):
'remaining_mode': ctx.remaining_mode, 'remaining_mode': ctx.remaining_mode,
'hint_cost': ctx.hint_cost, 'hint_cost': ctx.hint_cost,
'location_check_points': ctx.location_check_points, 'location_check_points': ctx.location_check_points,
'datapackage_version': network_data_package["version"] 'datapackage_version': network_data_package["version"],
'seed_name': ctx.seed_name
}]) }])

View File

@ -69,8 +69,8 @@ def main(args=None, callback=ERmain):
seed = get_seed(args.seed) seed = get_seed(args.seed)
random.seed(seed) random.seed(seed)
seedname = "M" + (f"{random.randint(0, pow(10, seeddigits) - 1)}".zfill(seeddigits)) seedname = f"{random.randint(0, pow(10, seeddigits) - 1)}".zfill(seeddigits)
print(f"Generating mystery for {args.multi} player{'s' if args.multi > 1 else ''}, {seedname} Seed {seed}") print(f"Generating for {args.multi} player{'s' if args.multi > 1 else ''}, {seedname} Seed {seed}")
if args.race: if args.race:
random.seed() # reset to time-based random source random.seed() # reset to time-based random source

View File

@ -12,7 +12,7 @@ class Version(typing.NamedTuple):
minor: int minor: int
build: int build: int
__version__ = "0.0.3" __version__ = "0.0.4"
_version_tuple = tuplize_version(__version__) _version_tuple = tuplize_version(__version__)
import builtins import builtins

View File

@ -27,7 +27,7 @@ base_info = {
"factorio_version": "1.1" "factorio_version": "1.1"
} }
def generate_mod(world: MultiWorld, player: int): def generate_mod(world: MultiWorld, player: int, seedname: str):
global template, locale_template global template, locale_template
with template_load_lock: with template_load_lock:
if not template: if not template:
@ -41,7 +41,7 @@ def generate_mod(world: MultiWorld, player: int):
for location in world.get_filled_locations(player): for location in world.get_filled_locations(player):
if not location.name.startswith("recipe-"): # introduce this as a new location property? if not location.name.startswith("recipe-"): # introduce this as a new location property?
locations.append((location.name, location.item.name, location.item.player)) locations.append((location.name, location.item.name, location.item.player))
mod_name = f"archipelago-client-{world.seed}-{player}" mod_name = f"archipelago-client-{seedname}-{player}"
tech_cost = {0: 0.1, tech_cost = {0: 0.1,
1: 0.25, 1: 0.25,
2: 0.5, 2: 0.5,

View File

@ -76,9 +76,6 @@ def get_shapes(world: MultiWorld, player: int) -> Dict[str, List[str]]:
# https://www.wolframalpha.com/input/?i=x+=+1/2+(n++++1)+(2++++n)+solve+for+n # https://www.wolframalpha.com/input/?i=x+=+1/2+(n++++1)+(2++++n)+solve+for+n
import math import math
slice_size = int(0.5*(math.sqrt(8*len(tech_names)+1)-3)) slice_size = int(0.5*(math.sqrt(8*len(tech_names)+1)-3))
import logging
logging.info(slice_size)
tech_names.sort() tech_names.sort()
world.random.shuffle(tech_names) world.random.shuffle(tech_names)
tech_names.sort(key=lambda tech_name: len(technology_table[tech_name].ingredients)) tech_names.sort(key=lambda tech_name: len(technology_table[tech_name].ingredients))