mirror of
https://github.com/ArchipelagoMW/Archipelago.git
synced 2026-03-26 06:03:21 -07:00
Minor changes
This commit is contained in:
@@ -1,14 +1,11 @@
|
||||
from enum import Enum
|
||||
import json
|
||||
import os
|
||||
import pkgutil
|
||||
import random
|
||||
from typing import Dict, List, Optional
|
||||
import typing
|
||||
from typing import Dict, List, Optional, TYPE_CHECKING, List
|
||||
from BaseClasses import Item, ItemClassification
|
||||
from .Data import get_era_required_items_data, get_existing_civics_data, get_existing_techs_data, get_goody_hut_rewards_data, get_progressive_districts_data
|
||||
from .Enum import CivVICheckType, EraType
|
||||
from .Enum import CivVICheckType
|
||||
from .ProgressiveDistricts import get_flat_progressive_districts
|
||||
if TYPE_CHECKING:
|
||||
from . import CivVIWorld
|
||||
CIV_VI_AP_ITEM_ID_BASE = 5041000
|
||||
|
||||
NON_PROGRESSION_DISTRICTS = [
|
||||
@@ -98,7 +95,7 @@ class CivVIItemData:
|
||||
progression_name: Optional[str]
|
||||
civ_name: Optional[str]
|
||||
|
||||
def __init__(self, name, civ_vi_id: int, cost: int, item_type: CivVICheckType, id_offset: int, classification: ItemClassification, progression_name: Optional[str], civ_name: Optional[str] = None):
|
||||
def __init__(self, name, civ_vi_id: int, cost: int, item_type: CivVICheckType, id_offset: int, classification: ItemClassification, progression_name: Optional[str], civ_name: Optional[str] = None):
|
||||
self.classification = classification
|
||||
self.civ_vi_id = civ_vi_id
|
||||
self.name = name
|
||||
@@ -125,7 +122,7 @@ def format_item_name(name: str) -> str:
|
||||
return " ".join([part.capitalize() for part in name_parts])
|
||||
|
||||
|
||||
def get_item_by_civ_name(item_name: typing.List[str], item_table: typing.Dict[str, 'CivVIItemData']) -> 'CivVIItemData':
|
||||
def get_item_by_civ_name(item_name: List[str], item_table: Dict[str, 'CivVIItemData']) -> 'CivVIItemData':
|
||||
"""Gets the names of the items in the item_table"""
|
||||
for item in item_table.values():
|
||||
if item_name == item.civ_name:
|
||||
@@ -291,9 +288,9 @@ def get_items_by_type(item_type: CivVICheckType, item_table: Dict[str, CivVIItem
|
||||
return [item for item in item_table.values() if item.item_type == item_type]
|
||||
|
||||
|
||||
def get_random_filler_by_rarity(rarity: FillerItemRarity, item_table: Dict[str, CivVIItemData]) -> CivVIItemData:
|
||||
def get_random_filler_by_rarity(world: 'CivVIWorld', rarity: FillerItemRarity, item_table: Dict[str, CivVIItemData]) -> CivVIItemData:
|
||||
"""
|
||||
Returns a random filler item by rarity
|
||||
"""
|
||||
items = [item for item in get_filler_item_data().values() if item.rarity == rarity]
|
||||
return items[random.randint(0, len(items) - 1)]
|
||||
return items[world.random.randint(0, len(items) - 1)]
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
from dataclasses import dataclass
|
||||
from typing import Any, List, Optional, Dict
|
||||
from typing import List, Optional, Dict
|
||||
from BaseClasses import Location, LocationProgressType, Region
|
||||
|
||||
from .Data import get_boosts_data, get_new_civic_prereqs_data, get_new_civics_data, get_new_tech_prereqs_data, get_new_techs_data
|
||||
@@ -106,8 +105,6 @@ class CivVILocation(Location):
|
||||
self.progress_type = LocationProgressType.EXCLUDED
|
||||
|
||||
|
||||
|
||||
|
||||
def generate_flat_location_table() -> Dict[str, CivVILocationData]:
|
||||
"""
|
||||
Generates a flat location table in the following format:
|
||||
@@ -182,8 +179,8 @@ def generate_era_location_table() -> Dict[EraType, Dict[str, CivVILocationData]]
|
||||
id_base += 1
|
||||
# Goody Huts, defaults to 10 goody huts as location checks (rarely will a player get more than this)
|
||||
for i in range(10):
|
||||
era_locations[EraType.ERA_ANCIENT.value]["GOODY_HUT_" + str(i+1)] = CivVILocationData(
|
||||
"GOODY_HUT_" + str(i+1), 0, 0, id_base, EraType.ERA_ANCIENT, CivVICheckType.GOODY)
|
||||
era_locations[EraType.ERA_ANCIENT.value]["GOODY_HUT_" + str(i + 1)] = CivVILocationData(
|
||||
"GOODY_HUT_" + str(i + 1), 0, 0, id_base, EraType.ERA_ANCIENT, CivVICheckType.GOODY)
|
||||
id_base += 1
|
||||
# Boosts
|
||||
boosts = get_boosts_data()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import typing
|
||||
from typing import TYPE_CHECKING, Dict, List
|
||||
from BaseClasses import CollectionState, LocationProgressType, Region
|
||||
from .Data import get_era_required_items_data, get_progressive_districts_data
|
||||
from .Items import format_item_name, get_item_by_civ_name
|
||||
@@ -7,7 +7,7 @@ from .Locations import CivVILocation
|
||||
from .ProgressiveDistricts import get_flat_progressive_districts
|
||||
from .Options import CivVIOptions
|
||||
|
||||
if typing.TYPE_CHECKING:
|
||||
if TYPE_CHECKING:
|
||||
from . import CivVIWorld
|
||||
from Items import CivVIItemData
|
||||
|
||||
@@ -19,7 +19,7 @@ def get_required_items_for_era(era: EraType):
|
||||
return era_required_items[era.value]
|
||||
|
||||
|
||||
def get_cumulative_prereqs_for_era(end_era: EraType, exclude_progressive_items: bool = True, item_table: typing.Dict[str, 'CivVIItemData'] = None) -> typing.List['CivVIItemData']:
|
||||
def get_cumulative_prereqs_for_era(end_era: EraType, exclude_progressive_items: bool = True, item_table: Dict[str, 'CivVIItemData'] = None) -> List['CivVIItemData']:
|
||||
"""Gets the specific techs/civics that are required for the specified era as well as all previous eras"""
|
||||
cumulative_prereqs = []
|
||||
era_required_items = {}
|
||||
@@ -58,7 +58,7 @@ def has_required_progressive_districts(state: CollectionState, era: EraType, pla
|
||||
# Verify we have the correct amount of progressive items
|
||||
all_previous_items = get_cumulative_prereqs_for_era(
|
||||
era, False, item_table)
|
||||
required_counts: typing.Dict[str, int] = {}
|
||||
required_counts: Dict[str, int] = {}
|
||||
|
||||
for key, value in progressive_districts.items():
|
||||
required_counts[key] = 0
|
||||
@@ -109,7 +109,7 @@ def create_regions(world: 'CivVIWorld', options: CivVIOptions, player: int):
|
||||
has_goody_huts = options.shuffle_goody_hut_rewards.value
|
||||
has_boosts = options.boostsanity.value
|
||||
|
||||
regions: typing.List[Region] = []
|
||||
regions: List[Region] = []
|
||||
for era in EraType:
|
||||
era_region = Region(era.value, player, world.multiworld)
|
||||
era_locations = {location.name: location.code for key,
|
||||
@@ -137,37 +137,37 @@ def create_regions(world: 'CivVIWorld', options: CivVIOptions, player: int):
|
||||
)
|
||||
|
||||
world.get_region(EraType.ERA_CLASSICAL.value).connect(
|
||||
world.get_region(EraType.ERA_MEDIEVAL.value), None, lambda state: has_required_items(
|
||||
world.get_region(EraType.ERA_MEDIEVAL.value), None, lambda state: has_required_items(
|
||||
state, EraType.ERA_CLASSICAL, player, has_progressive_items, has_progressive_eras)
|
||||
)
|
||||
|
||||
world.get_region(EraType.ERA_MEDIEVAL.value).connect(
|
||||
world.get_region(EraType.ERA_RENAISSANCE.value), None, lambda state: has_required_items(
|
||||
world.get_region(EraType.ERA_RENAISSANCE.value), None, lambda state: has_required_items(
|
||||
state, EraType.ERA_MEDIEVAL, player, has_progressive_items, has_progressive_eras)
|
||||
)
|
||||
|
||||
world.get_region(EraType.ERA_RENAISSANCE.value).connect(
|
||||
world.get_region(EraType.ERA_INDUSTRIAL.value), None, lambda state: has_required_items(
|
||||
world.get_region(EraType.ERA_INDUSTRIAL.value), None, lambda state: has_required_items(
|
||||
state, EraType.ERA_RENAISSANCE, player, has_progressive_items, has_progressive_eras)
|
||||
)
|
||||
|
||||
world.get_region(EraType.ERA_INDUSTRIAL.value).connect(
|
||||
world.get_region(EraType.ERA_MODERN.value), None, lambda state: has_required_items(
|
||||
world.get_region(EraType.ERA_MODERN.value), None, lambda state: has_required_items(
|
||||
state, EraType.ERA_INDUSTRIAL, player, has_progressive_items, has_progressive_eras)
|
||||
)
|
||||
|
||||
world.get_region(EraType.ERA_MODERN.value).connect(
|
||||
world.get_region(EraType.ERA_ATOMIC.value), None, lambda state: has_required_items(
|
||||
world.get_region(EraType.ERA_ATOMIC.value), None, lambda state: has_required_items(
|
||||
state, EraType.ERA_MODERN, player, has_progressive_items, has_progressive_eras)
|
||||
)
|
||||
|
||||
world.get_region(EraType.ERA_ATOMIC.value).connect(
|
||||
world.get_region(EraType.ERA_INFORMATION.value), None, lambda state: has_required_items(
|
||||
world.get_region(EraType.ERA_INFORMATION.value), None, lambda state: has_required_items(
|
||||
state, EraType.ERA_ATOMIC, player, has_progressive_items, has_progressive_eras)
|
||||
)
|
||||
|
||||
world.get_region(EraType.ERA_INFORMATION.value).connect(
|
||||
world.get_region(EraType.ERA_FUTURE.value), None, lambda state: has_required_items(state, EraType.ERA_INFORMATION, player, has_progressive_items, has_progressive_eras))
|
||||
world.get_region(EraType.ERA_FUTURE.value), None, lambda state: has_required_items(state, EraType.ERA_INFORMATION, player, has_progressive_items, has_progressive_eras))
|
||||
|
||||
world.multiworld.completion_condition[player] = lambda state: state.can_reach(
|
||||
EraType.ERA_FUTURE.value, "Region", player)
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import typing
|
||||
|
||||
from typing import TYPE_CHECKING, List, Dict
|
||||
from BaseClasses import CollectionState
|
||||
from .Items import get_item_by_civ_name
|
||||
from .Data import get_boosts_data
|
||||
@@ -9,11 +8,11 @@ from .ProgressiveDistricts import convert_items_to_have_progression
|
||||
from worlds.generic.Rules import forbid_item, set_rule
|
||||
|
||||
|
||||
if typing.TYPE_CHECKING:
|
||||
if TYPE_CHECKING:
|
||||
from . import CivVIWorld
|
||||
|
||||
|
||||
def generate_has_required_items_lambda(prereqs: typing.List[str], required_count: int, has_progressive_items: bool, player: int):
|
||||
def generate_has_required_items_lambda(prereqs: List[str], required_count: int, has_progressive_items: bool, player: int):
|
||||
def has_required_items_lambda(state: CollectionState):
|
||||
return has_required_items(state, prereqs, required_count, has_progressive_items, player)
|
||||
return has_required_items_lambda
|
||||
@@ -35,10 +34,10 @@ def create_boost_rules(world: 'CivVIWorld'):
|
||||
)
|
||||
|
||||
|
||||
def has_required_items(state: CollectionState, prereqs: typing.List[str], required_count: int, has_progressive_items: bool, player: int):
|
||||
def has_required_items(state: CollectionState, prereqs: List[str], required_count: int, has_progressive_items: bool, player: int):
|
||||
if has_progressive_items:
|
||||
items = [get_item_by_civ_name(item, state.multiworld.worlds[player].item_table).name for item in convert_items_to_have_progression(prereqs)]
|
||||
progressive_items: typing.Dict[str, int] = {}
|
||||
progressive_items: Dict[str, int] = {}
|
||||
count = 0
|
||||
for item in items:
|
||||
if "Progressive" in item:
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import asyncio
|
||||
from logging import Logger
|
||||
import select
|
||||
import socket
|
||||
|
||||
ADDRESS = "127.0.0.1"
|
||||
|
||||
@@ -1,13 +1,10 @@
|
||||
import math
|
||||
import os
|
||||
import random
|
||||
from typing import Dict, Optional
|
||||
import typing
|
||||
from typing import Dict, Optional, Set
|
||||
|
||||
from .Data import get_boosts_data
|
||||
|
||||
from .Rules import create_boost_rules
|
||||
import Utils
|
||||
from .Container import CivVIContainer, generate_goody_hut_sql, generate_new_items, generate_setup_file, generate_update_boosts_sql
|
||||
from .Enum import CivVICheckType
|
||||
from .Items import BOOSTSANITY_PROGRESSION_ITEMS, FILLER_DISTRIBUTION, CivVIItemData, FillerItemRarity, generate_item_table, CivVIItem, get_random_filler_by_rarity
|
||||
@@ -77,7 +74,7 @@ class CivVIWorld(World):
|
||||
self.location_table[location.name] = location
|
||||
|
||||
def get_filler_item_name(self):
|
||||
return get_random_filler_by_rarity(FillerItemRarity.COMMON, self.item_table).name
|
||||
return get_random_filler_by_rarity(self, FillerItemRarity.COMMON, self.item_table).name
|
||||
|
||||
def create_regions(self):
|
||||
create_regions(self, self.options, self.player)
|
||||
@@ -145,7 +142,7 @@ class CivVIWorld(World):
|
||||
if total_created >= num_filler_items:
|
||||
break
|
||||
self.multiworld.itempool += [self.create_item(
|
||||
get_random_filler_by_rarity(rarity, self.item_table).name)]
|
||||
get_random_filler_by_rarity(self, rarity, self.item_table).name)]
|
||||
total_created += 1
|
||||
|
||||
def post_fill(self):
|
||||
@@ -158,7 +155,7 @@ class CivVIWorld(World):
|
||||
ItemClassification.filler: self.options.pre_hint_items.current_key == "all",
|
||||
}
|
||||
|
||||
start_location_hints: typing.Set[str] = self.options.start_location_hints.value
|
||||
start_location_hints: Set[str] = self.options.start_location_hints.value
|
||||
for location_name, location_data in self.location_table.items():
|
||||
if location_data.location_type != CivVICheckType.CIVIC and location_data.location_type != CivVICheckType.TECH:
|
||||
continue
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from typing import Dict
|
||||
from BaseClasses import ItemClassification
|
||||
from Fill import distribute_items_restrictive
|
||||
from ..Items import FILLER_DISTRIBUTION, FillerItemRarity, get_filler_item_data
|
||||
from ..Items import FillerItemRarity, get_filler_item_data
|
||||
from . import CivVITestBase
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user