Minor changes

This commit is contained in:
Carter Hesterman
2024-08-06 14:11:42 -06:00
parent 52b64d4f27
commit 5cbbe9a0b1
7 changed files with 33 additions and 44 deletions

View File

@@ -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)]

View File

@@ -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()

View File

@@ -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)

View File

@@ -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:

View File

@@ -1,6 +1,5 @@
import asyncio
from logging import Logger
import select
import socket
ADDRESS = "127.0.0.1"

View File

@@ -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

View File

@@ -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