2025-11-11 23:48:50 +08:00
|
|
|
|
"""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
|
2025-11-12 00:42:35 +08:00
|
|
|
|
from Plugins.WPSGardenSystem import GardenCropDefinition, GardenExtraReward
|
2025-11-11 23:48:50 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@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"
|
2025-11-12 00:42:35 +08:00
|
|
|
|
CRYSTAL_TREE_SEED_ID = "crystal_seed_tree"
|
|
|
|
|
|
CRYSTAL_TREE_FRUIT_ID = "crystal_fruit_glimmer"
|
|
|
|
|
|
CRYSTAL_TREE_DISPLAY_NAME = "水晶树"
|
2025-11-11 23:48:50 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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,
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-11-14 23:12:19 +08:00
|
|
|
|
def _build_green_color_definition() -> CrystalColorDefinition:
|
|
|
|
|
|
"""Construct default chain definition for green crystal."""
|
|
|
|
|
|
|
|
|
|
|
|
stage1 = CrystalRecipeStage(
|
|
|
|
|
|
identifier="green_stage_1",
|
|
|
|
|
|
materials=(
|
|
|
|
|
|
"combat_fruit_battle_flower",
|
|
|
|
|
|
"combat_fruit_battle_flower",
|
|
|
|
|
|
CRYSTAL_TINT_POWDER_ID,
|
|
|
|
|
|
),
|
|
|
|
|
|
result_item="crystal_green_dust_stage1",
|
|
|
|
|
|
fail_item=WPSAlchemyGame.ASH_ITEM_ID,
|
|
|
|
|
|
base_success_rate=0.9,
|
|
|
|
|
|
description="将战斗之花果实与变色粉尘融合成初阶绿色粉尘。",
|
|
|
|
|
|
)
|
|
|
|
|
|
stage2 = CrystalRecipeStage(
|
|
|
|
|
|
identifier="green_stage_2",
|
|
|
|
|
|
materials=(
|
|
|
|
|
|
stage1.result_item,
|
|
|
|
|
|
stage1.result_item,
|
|
|
|
|
|
CRYSTAL_RESONANCE_POWDER_ID,
|
|
|
|
|
|
),
|
|
|
|
|
|
result_item="crystal_green_dust_stage2",
|
|
|
|
|
|
fail_item=WPSAlchemyGame.ASH_ITEM_ID,
|
|
|
|
|
|
base_success_rate=0.75,
|
|
|
|
|
|
description="压缩初阶粉尘并注入共鸣粉形成高阶粉尘。",
|
|
|
|
|
|
)
|
|
|
|
|
|
scroll_stage = CrystalRecipeStage(
|
|
|
|
|
|
identifier="green_scroll_alchemy",
|
|
|
|
|
|
materials=(
|
|
|
|
|
|
stage2.result_item,
|
|
|
|
|
|
stage2.result_item,
|
|
|
|
|
|
CRYSTAL_BASE_SCROLL_ID,
|
|
|
|
|
|
),
|
|
|
|
|
|
result_item="crystal_green_scroll",
|
|
|
|
|
|
fail_item=WPSAlchemyGame.ASH_ITEM_ID,
|
|
|
|
|
|
base_success_rate=0.65,
|
|
|
|
|
|
description="将高阶粉尘灌注到卷轴之上,得出绿色变色卷轴。",
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
wait_stage = CrystalWaitStage(
|
|
|
|
|
|
identifier="green_scroll_nurturing",
|
|
|
|
|
|
consumed_items={
|
|
|
|
|
|
"combat_fruit_battle_flower": 3,
|
|
|
|
|
|
"crystal_green_scroll": 1,
|
|
|
|
|
|
},
|
|
|
|
|
|
produced_item="crystal_green_scroll_charged",
|
|
|
|
|
|
delay_minutes=40,
|
|
|
|
|
|
message="绿色变色卷轴正在吸收自然能量,预计40分钟后完成。",
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
final_fusion = CrystalFinalFusion(
|
|
|
|
|
|
identifier="green_crystal_fusion",
|
|
|
|
|
|
materials=(
|
|
|
|
|
|
wait_stage.produced_item,
|
|
|
|
|
|
wait_stage.produced_item,
|
|
|
|
|
|
CRYSTAL_BASE_ITEM_ID,
|
|
|
|
|
|
),
|
|
|
|
|
|
result_item="crystal_green_core",
|
|
|
|
|
|
fail_item=WPSAlchemyGame.ASH_ITEM_ID,
|
|
|
|
|
|
base_success_rate=0.7,
|
|
|
|
|
|
description="两张绿色卷轴共鸣后唤醒基础晶核,形成绿水晶。",
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
return CrystalColorDefinition(
|
|
|
|
|
|
color_key="green",
|
|
|
|
|
|
display_name="绿色水晶",
|
|
|
|
|
|
chain_stages=[stage1, stage2, scroll_stage],
|
|
|
|
|
|
wait_stage=wait_stage,
|
|
|
|
|
|
final_fusion=final_fusion,
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _build_orange_color_definition() -> CrystalColorDefinition:
|
|
|
|
|
|
"""Construct default chain definition for orange crystal."""
|
|
|
|
|
|
|
|
|
|
|
|
stage1 = CrystalRecipeStage(
|
|
|
|
|
|
identifier="orange_stage_1",
|
|
|
|
|
|
materials=(
|
|
|
|
|
|
"combat_material_essence",
|
|
|
|
|
|
"combat_material_essence",
|
|
|
|
|
|
CRYSTAL_TINT_POWDER_ID,
|
|
|
|
|
|
),
|
|
|
|
|
|
result_item="crystal_orange_dust_stage1",
|
|
|
|
|
|
fail_item=WPSAlchemyGame.ASH_ITEM_ID,
|
|
|
|
|
|
base_success_rate=0.85,
|
|
|
|
|
|
description="将精华与变色粉尘融合成初阶橙色粉尘。",
|
|
|
|
|
|
)
|
|
|
|
|
|
stage2 = CrystalRecipeStage(
|
|
|
|
|
|
identifier="orange_stage_2",
|
|
|
|
|
|
materials=(
|
|
|
|
|
|
stage1.result_item,
|
|
|
|
|
|
stage1.result_item,
|
|
|
|
|
|
CRYSTAL_RESONANCE_POWDER_ID,
|
|
|
|
|
|
),
|
|
|
|
|
|
result_item="crystal_orange_dust_stage2",
|
|
|
|
|
|
fail_item=WPSAlchemyGame.ASH_ITEM_ID,
|
|
|
|
|
|
base_success_rate=0.75,
|
|
|
|
|
|
description="压缩初阶粉尘并注入共鸣粉形成高阶粉尘。",
|
|
|
|
|
|
)
|
|
|
|
|
|
scroll_stage = CrystalRecipeStage(
|
|
|
|
|
|
identifier="orange_scroll_alchemy",
|
|
|
|
|
|
materials=(
|
|
|
|
|
|
stage2.result_item,
|
|
|
|
|
|
stage2.result_item,
|
|
|
|
|
|
CRYSTAL_BASE_SCROLL_ID,
|
|
|
|
|
|
),
|
|
|
|
|
|
result_item="crystal_orange_scroll",
|
|
|
|
|
|
fail_item=WPSAlchemyGame.ASH_ITEM_ID,
|
|
|
|
|
|
base_success_rate=0.65,
|
|
|
|
|
|
description="将高阶粉尘灌注到卷轴之上,得出橙色变色卷轴。",
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
wait_stage = CrystalWaitStage(
|
|
|
|
|
|
identifier="orange_scroll_energizing",
|
|
|
|
|
|
consumed_items={
|
|
|
|
|
|
"combat_material_essence": 2,
|
|
|
|
|
|
"crystal_orange_scroll": 1,
|
|
|
|
|
|
},
|
|
|
|
|
|
produced_item="crystal_orange_scroll_charged",
|
|
|
|
|
|
delay_minutes=55,
|
|
|
|
|
|
message="橙色变色卷轴正在吸收活力能量,预计55分钟后完成。",
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
final_fusion = CrystalFinalFusion(
|
|
|
|
|
|
identifier="orange_crystal_fusion",
|
|
|
|
|
|
materials=(
|
|
|
|
|
|
wait_stage.produced_item,
|
|
|
|
|
|
wait_stage.produced_item,
|
|
|
|
|
|
CRYSTAL_BASE_ITEM_ID,
|
|
|
|
|
|
),
|
|
|
|
|
|
result_item="crystal_orange_core",
|
|
|
|
|
|
fail_item=WPSAlchemyGame.ASH_ITEM_ID,
|
|
|
|
|
|
base_success_rate=0.7,
|
|
|
|
|
|
description="两张橙色卷轴共鸣后唤醒基础晶核,形成橙水晶。",
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
return CrystalColorDefinition(
|
|
|
|
|
|
color_key="orange",
|
|
|
|
|
|
display_name="橙色水晶",
|
|
|
|
|
|
chain_stages=[stage1, stage2, scroll_stage],
|
|
|
|
|
|
wait_stage=wait_stage,
|
|
|
|
|
|
final_fusion=final_fusion,
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-11-11 23:48:50 +08:00
|
|
|
|
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="能触发粉尘的共鸣性,有助于稳定高阶色谱。",
|
|
|
|
|
|
),
|
2025-11-12 00:42:35 +08:00
|
|
|
|
CRYSTAL_TREE_SEED_ID: CrystalItemDefinition(
|
|
|
|
|
|
item_id=CRYSTAL_TREE_SEED_ID,
|
|
|
|
|
|
name=f"{CRYSTAL_TREE_DISPLAY_NAME}的种子",
|
|
|
|
|
|
tier=BackpackItemTier.LEGENDARY,
|
|
|
|
|
|
description=f"{CRYSTAL_TREE_DISPLAY_NAME}的种子,可在菜园培育晶体之树。",
|
|
|
|
|
|
),
|
|
|
|
|
|
CRYSTAL_TREE_FRUIT_ID: CrystalItemDefinition(
|
|
|
|
|
|
item_id=CRYSTAL_TREE_FRUIT_ID,
|
|
|
|
|
|
name=f"{CRYSTAL_TREE_DISPLAY_NAME}的果实",
|
|
|
|
|
|
tier=BackpackItemTier.LEGENDARY,
|
|
|
|
|
|
description=f"{CRYSTAL_TREE_DISPLAY_NAME}结出的果实,可作为高级炼金材料。",
|
|
|
|
|
|
),
|
2025-11-11 23:48:50 +08:00
|
|
|
|
"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="浓缩黑暗能量的晶体,可在多系统中作为高级材料。",
|
|
|
|
|
|
),
|
2025-11-14 23:12:19 +08:00
|
|
|
|
# 绿色水晶相关物品
|
|
|
|
|
|
"crystal_green_dust_stage1": CrystalItemDefinition(
|
|
|
|
|
|
item_id="crystal_green_dust_stage1",
|
|
|
|
|
|
name="绿色粉尘-初阶",
|
|
|
|
|
|
tier=BackpackItemTier.RARE,
|
|
|
|
|
|
description="微量绿色素的粉尘,需要进一步压缩。",
|
|
|
|
|
|
),
|
|
|
|
|
|
"crystal_green_dust_stage2": CrystalItemDefinition(
|
|
|
|
|
|
item_id="crystal_green_dust_stage2",
|
|
|
|
|
|
name="绿色粉尘-高阶",
|
|
|
|
|
|
tier=BackpackItemTier.EPIC,
|
|
|
|
|
|
description="高纯度绿色粉尘,可用于制作绿色卷轴。",
|
|
|
|
|
|
),
|
|
|
|
|
|
"crystal_green_scroll": CrystalItemDefinition(
|
|
|
|
|
|
item_id="crystal_green_scroll",
|
|
|
|
|
|
name="绿色变色卷轴",
|
|
|
|
|
|
tier=BackpackItemTier.EPIC,
|
|
|
|
|
|
description="封装绿色粉尘力量的卷轴,但仍需自然能量淬炼。",
|
|
|
|
|
|
),
|
|
|
|
|
|
"crystal_green_scroll_charged": CrystalItemDefinition(
|
|
|
|
|
|
item_id="crystal_green_scroll_charged",
|
|
|
|
|
|
name="淬炼绿色卷轴",
|
|
|
|
|
|
tier=BackpackItemTier.EPIC,
|
|
|
|
|
|
description="经历自然能量淬炼的绿色卷轴,适合唤醒晶核。",
|
|
|
|
|
|
),
|
|
|
|
|
|
"crystal_green_core": CrystalItemDefinition(
|
|
|
|
|
|
item_id="crystal_green_core",
|
|
|
|
|
|
name="绿水晶",
|
|
|
|
|
|
tier=BackpackItemTier.LEGENDARY,
|
|
|
|
|
|
description="浓缩自然能量的晶体,可在多系统中作为高级材料。",
|
|
|
|
|
|
),
|
|
|
|
|
|
# 橙色水晶相关物品
|
|
|
|
|
|
"crystal_orange_dust_stage1": CrystalItemDefinition(
|
|
|
|
|
|
item_id="crystal_orange_dust_stage1",
|
|
|
|
|
|
name="橙色粉尘-初阶",
|
|
|
|
|
|
tier=BackpackItemTier.RARE,
|
|
|
|
|
|
description="微量橙色素的粉尘,需要进一步压缩。",
|
|
|
|
|
|
),
|
|
|
|
|
|
"crystal_orange_dust_stage2": CrystalItemDefinition(
|
|
|
|
|
|
item_id="crystal_orange_dust_stage2",
|
|
|
|
|
|
name="橙色粉尘-高阶",
|
|
|
|
|
|
tier=BackpackItemTier.EPIC,
|
|
|
|
|
|
description="高纯度橙色粉尘,可用于制作橙色卷轴。",
|
|
|
|
|
|
),
|
|
|
|
|
|
"crystal_orange_scroll": CrystalItemDefinition(
|
|
|
|
|
|
item_id="crystal_orange_scroll",
|
|
|
|
|
|
name="橙色变色卷轴",
|
|
|
|
|
|
tier=BackpackItemTier.EPIC,
|
|
|
|
|
|
description="封装橙色粉尘力量的卷轴,但仍需活力能量淬炼。",
|
|
|
|
|
|
),
|
|
|
|
|
|
"crystal_orange_scroll_charged": CrystalItemDefinition(
|
|
|
|
|
|
item_id="crystal_orange_scroll_charged",
|
|
|
|
|
|
name="淬炼橙色卷轴",
|
|
|
|
|
|
tier=BackpackItemTier.EPIC,
|
|
|
|
|
|
description="经历活力能量淬炼的橙色卷轴,适合唤醒晶核。",
|
|
|
|
|
|
),
|
|
|
|
|
|
"crystal_orange_core": CrystalItemDefinition(
|
|
|
|
|
|
item_id="crystal_orange_core",
|
|
|
|
|
|
name="橙水晶",
|
|
|
|
|
|
tier=BackpackItemTier.LEGENDARY,
|
|
|
|
|
|
description="浓缩活力能量的晶体,可在多系统中作为高级材料。",
|
|
|
|
|
|
),
|
2025-11-11 23:48:50 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DEFAULT_CRYSTAL_COLOR_MAP: Dict[str, CrystalColorDefinition] = {
|
|
|
|
|
|
"black": _build_black_color_definition(),
|
2025-11-14 23:12:19 +08:00
|
|
|
|
"green": _build_green_color_definition(),
|
|
|
|
|
|
"orange": _build_orange_color_definition(),
|
2025-11-11 23:48:50 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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": "黑水晶兑换",
|
|
|
|
|
|
},
|
|
|
|
|
|
),
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-11-12 00:42:35 +08:00
|
|
|
|
|
|
|
|
|
|
def build_default_crystal_crops() -> List[GardenCropDefinition]:
|
|
|
|
|
|
"""Return the default crystal-themed garden crops."""
|
|
|
|
|
|
|
|
|
|
|
|
crystal_tree = GardenCropDefinition(
|
|
|
|
|
|
seed_id=CRYSTAL_TREE_SEED_ID,
|
|
|
|
|
|
fruit_id=CRYSTAL_TREE_FRUIT_ID,
|
|
|
|
|
|
display_name=CRYSTAL_TREE_DISPLAY_NAME,
|
|
|
|
|
|
tier="legendary",
|
|
|
|
|
|
growth_minutes=480,
|
|
|
|
|
|
seed_price=600,
|
|
|
|
|
|
base_yield=2,
|
|
|
|
|
|
extra_reward=GardenExtraReward(
|
|
|
|
|
|
kind="points",
|
|
|
|
|
|
payload={"min": 300, "max": 900},
|
|
|
|
|
|
base_rate=0.35,
|
|
|
|
|
|
),
|
|
|
|
|
|
extra_item_id=None,
|
|
|
|
|
|
wine_item_id=None,
|
|
|
|
|
|
wine_tier=None,
|
|
|
|
|
|
)
|
|
|
|
|
|
return [crystal_tree]
|
|
|
|
|
|
|