add seed_name to multidata and RoomInfo
This commit is contained in:
parent
764e6e7926
commit
2df7e4e537
4
Main.py
4
Main.py
|
@ -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:
|
||||||
|
|
|
@ -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
|
||||||
}])
|
}])
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
2
Utils.py
2
Utils.py
|
@ -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
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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))
|
||||||
|
|
Loading…
Reference in New Issue