新增水晶系统
This commit is contained in:
248
Plugins/WPSCrystalSystem/crystal_models.py
Normal file
248
Plugins/WPSCrystalSystem/crystal_models.py
Normal file
@@ -0,0 +1,248 @@
|
||||
"""Core data models and default configuration for the crystal system."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass, field
|
||||
from typing import Dict, List, Mapping, Optional, Sequence, Tuple
|
||||
|
||||
from Plugins.WPSAlchemyGame import WPSAlchemyGame
|
||||
from Plugins.WPSBackpackSystem import BackpackItemTier
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class CrystalItemDefinition:
|
||||
"""Definition of a crystal-related item."""
|
||||
|
||||
item_id: str
|
||||
name: str
|
||||
tier: BackpackItemTier
|
||||
description: str
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class CrystalRecipeStage:
|
||||
"""A single stage recipe that is registered into the alchemy system."""
|
||||
|
||||
identifier: str
|
||||
materials: Tuple[str, str, str]
|
||||
result_item: str
|
||||
fail_item: str
|
||||
base_success_rate: float
|
||||
description: str = ""
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class CrystalWaitStage:
|
||||
"""A stage describing a delayed transformation outside the alchemy system."""
|
||||
|
||||
identifier: str
|
||||
consumed_items: Mapping[str, int]
|
||||
produced_item: str
|
||||
delay_minutes: int
|
||||
message: str = ""
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class CrystalFinalFusion:
|
||||
"""Final fusion recipe that converts scrolls and base crystals to coloured crystals."""
|
||||
|
||||
identifier: str
|
||||
materials: Tuple[str, str, str]
|
||||
result_item: str
|
||||
fail_item: str
|
||||
base_success_rate: float
|
||||
description: str = ""
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class CrystalExchangeEntry:
|
||||
"""Definition of a crystal barter/exchange offer."""
|
||||
|
||||
identifier: str
|
||||
required_items: Mapping[str, int]
|
||||
reward_item: str
|
||||
reward_amount: int = 1
|
||||
metadata: Mapping[str, str] = field(default_factory=dict)
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class CrystalColorDefinition:
|
||||
"""Full definition for a colour pipeline."""
|
||||
|
||||
color_key: str
|
||||
display_name: str
|
||||
chain_stages: Sequence[CrystalRecipeStage]
|
||||
wait_stage: CrystalWaitStage
|
||||
final_fusion: CrystalFinalFusion
|
||||
|
||||
|
||||
CRYSTAL_BASE_ITEM_ID = "crystal_base_core"
|
||||
CRYSTAL_BASE_SCROLL_ID = "crystal_base_scroll"
|
||||
CRYSTAL_TINT_POWDER_ID = "crystal_tint_powder"
|
||||
CRYSTAL_RESONANCE_POWDER_ID = "crystal_resonance_powder"
|
||||
|
||||
|
||||
def _build_black_color_definition() -> CrystalColorDefinition:
|
||||
"""Construct default chain definition for black crystal."""
|
||||
|
||||
stage1 = CrystalRecipeStage(
|
||||
identifier="black_stage_1",
|
||||
materials=(
|
||||
WPSAlchemyGame.ASH_ITEM_ID,
|
||||
WPSAlchemyGame.ASH_ITEM_ID,
|
||||
CRYSTAL_TINT_POWDER_ID,
|
||||
),
|
||||
result_item="crystal_black_dust_stage1",
|
||||
fail_item=WPSAlchemyGame.ASH_ITEM_ID,
|
||||
base_success_rate=0.9,
|
||||
description="将炉灰与变色粉尘融合成初阶黑色粉尘。",
|
||||
)
|
||||
stage2 = CrystalRecipeStage(
|
||||
identifier="black_stage_2",
|
||||
materials=(
|
||||
stage1.result_item,
|
||||
stage1.result_item,
|
||||
CRYSTAL_RESONANCE_POWDER_ID,
|
||||
),
|
||||
result_item="crystal_black_dust_stage2",
|
||||
fail_item=WPSAlchemyGame.ASH_ITEM_ID,
|
||||
base_success_rate=0.75,
|
||||
description="压缩初阶粉尘并注入共鸣粉形成高阶粉尘。",
|
||||
)
|
||||
scroll_stage = CrystalRecipeStage(
|
||||
identifier="black_scroll_alchemy",
|
||||
materials=(
|
||||
stage2.result_item,
|
||||
stage2.result_item,
|
||||
CRYSTAL_BASE_SCROLL_ID,
|
||||
),
|
||||
result_item="crystal_black_scroll",
|
||||
fail_item=WPSAlchemyGame.ASH_ITEM_ID,
|
||||
base_success_rate=0.65,
|
||||
description="将高阶粉尘灌注到卷轴之上,得出黑色变色卷轴。",
|
||||
)
|
||||
|
||||
wait_stage = CrystalWaitStage(
|
||||
identifier="black_scroll_darkening",
|
||||
consumed_items={
|
||||
WPSAlchemyGame.ASH_ITEM_ID: 99,
|
||||
"crystal_black_scroll": 1,
|
||||
},
|
||||
produced_item="crystal_black_scroll_charged",
|
||||
delay_minutes=60,
|
||||
message="黑色变色卷轴正在吸收阴焰,预计一小时后完成。",
|
||||
)
|
||||
|
||||
final_fusion = CrystalFinalFusion(
|
||||
identifier="black_crystal_fusion",
|
||||
materials=(
|
||||
wait_stage.produced_item,
|
||||
wait_stage.produced_item,
|
||||
CRYSTAL_BASE_ITEM_ID,
|
||||
),
|
||||
result_item="crystal_black_core",
|
||||
fail_item=WPSAlchemyGame.ASH_ITEM_ID,
|
||||
base_success_rate=0.7,
|
||||
description="两张黑色卷轴共鸣后唤醒基础晶核,形成黑水晶。",
|
||||
)
|
||||
|
||||
return CrystalColorDefinition(
|
||||
color_key="black",
|
||||
display_name="黑色水晶",
|
||||
chain_stages=[stage1, stage2, scroll_stage],
|
||||
wait_stage=wait_stage,
|
||||
final_fusion=final_fusion,
|
||||
)
|
||||
|
||||
|
||||
DEFAULT_CRYSTAL_ITEMS: Dict[str, CrystalItemDefinition] = {
|
||||
CRYSTAL_BASE_ITEM_ID: CrystalItemDefinition(
|
||||
item_id=CRYSTAL_BASE_ITEM_ID,
|
||||
name="未调谐晶核",
|
||||
tier=BackpackItemTier.RARE,
|
||||
description="天然形成的晶核,等待注入颜色与秩序。",
|
||||
),
|
||||
CRYSTAL_BASE_SCROLL_ID: CrystalItemDefinition(
|
||||
item_id=CRYSTAL_BASE_SCROLL_ID,
|
||||
name="空白变色卷轴",
|
||||
tier=BackpackItemTier.RARE,
|
||||
description="允许运色粉尘封印其上,作为变色的载体。",
|
||||
),
|
||||
CRYSTAL_TINT_POWDER_ID: CrystalItemDefinition(
|
||||
item_id=CRYSTAL_TINT_POWDER_ID,
|
||||
name="变色粉尘",
|
||||
tier=BackpackItemTier.COMMON,
|
||||
description="常见的变色媒介,可与炉灰混合产生初阶粉尘。",
|
||||
),
|
||||
CRYSTAL_RESONANCE_POWDER_ID: CrystalItemDefinition(
|
||||
item_id=CRYSTAL_RESONANCE_POWDER_ID,
|
||||
name="共鸣粉末",
|
||||
tier=BackpackItemTier.RARE,
|
||||
description="能触发粉尘的共鸣性,有助于稳定高阶色谱。",
|
||||
),
|
||||
"crystal_black_dust_stage1": CrystalItemDefinition(
|
||||
item_id="crystal_black_dust_stage1",
|
||||
name="黑色粉尘-初阶",
|
||||
tier=BackpackItemTier.RARE,
|
||||
description="微量黑色素的粉尘,需要进一步压缩。",
|
||||
),
|
||||
"crystal_black_dust_stage2": CrystalItemDefinition(
|
||||
item_id="crystal_black_dust_stage2",
|
||||
name="黑色粉尘-高阶",
|
||||
tier=BackpackItemTier.EPIC,
|
||||
description="高纯度黑色粉尘,可用于制作黑色卷轴。",
|
||||
),
|
||||
"crystal_black_scroll": CrystalItemDefinition(
|
||||
item_id="crystal_black_scroll",
|
||||
name="黑色变色卷轴",
|
||||
tier=BackpackItemTier.EPIC,
|
||||
description="封装黑色粉尘力量的卷轴,但仍需阴焰淬炼。",
|
||||
),
|
||||
"crystal_black_scroll_charged": CrystalItemDefinition(
|
||||
item_id="crystal_black_scroll_charged",
|
||||
name="淬炼黑色卷轴",
|
||||
tier=BackpackItemTier.EPIC,
|
||||
description="经历阴焰淬炼的黑色卷轴,适合唤醒晶核。",
|
||||
),
|
||||
"crystal_black_core": CrystalItemDefinition(
|
||||
item_id="crystal_black_core",
|
||||
name="黑水晶",
|
||||
tier=BackpackItemTier.LEGENDARY,
|
||||
description="浓缩黑暗能量的晶体,可在多系统中作为高级材料。",
|
||||
),
|
||||
}
|
||||
|
||||
|
||||
DEFAULT_CRYSTAL_COLOR_MAP: Dict[str, CrystalColorDefinition] = {
|
||||
"black": _build_black_color_definition(),
|
||||
}
|
||||
|
||||
|
||||
DEFAULT_CRYSTAL_EXCHANGE_ENTRIES: Dict[str, CrystalExchangeEntry] = {
|
||||
"exchange_black_scroll": CrystalExchangeEntry(
|
||||
identifier="exchange_black_scroll",
|
||||
required_items={
|
||||
"crystal_black_dust_stage2": 2,
|
||||
"crystal_tint_powder": 5,
|
||||
},
|
||||
reward_item="crystal_black_scroll",
|
||||
metadata={
|
||||
"category": "scroll",
|
||||
"display_name": "黑色变色卷轴兑换",
|
||||
},
|
||||
),
|
||||
"exchange_black_core": CrystalExchangeEntry(
|
||||
identifier="exchange_black_core",
|
||||
required_items={
|
||||
"crystal_black_scroll_charged": 1,
|
||||
CRYSTAL_BASE_ITEM_ID: 1,
|
||||
"combat_material_crystal": 2,
|
||||
},
|
||||
reward_item="crystal_black_core",
|
||||
metadata={
|
||||
"category": "crystal",
|
||||
"display_name": "黑水晶兑换",
|
||||
},
|
||||
),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user