add choice helper
This commit is contained in:
@@ -25,13 +25,11 @@ class Auxiliary:
|
||||
# 特殊属性(用于存储实例特定数据)
|
||||
special_data: dict = field(default_factory=dict)
|
||||
|
||||
def get_info(self) -> str:
|
||||
"""获取简略信息"""
|
||||
suffix = ""
|
||||
# 万魂幡特殊显示
|
||||
if self.name == "万魂幡" and self.special_data.get("devoured_souls", 0) > 0:
|
||||
suffix = f"(吞噬魂魄:{self.special_data['devoured_souls']})"
|
||||
return f"{self.name}{suffix}"
|
||||
def get_info(self, detailed: bool = False) -> str:
|
||||
"""获取信息"""
|
||||
if detailed:
|
||||
return self.get_detailed_info()
|
||||
return f"{self.name}"
|
||||
|
||||
def get_detailed_info(self) -> str:
|
||||
"""获取详细信息"""
|
||||
|
||||
@@ -150,7 +150,7 @@ def _find_potential_master(avatar: Avatar) -> Optional[Avatar]:
|
||||
|
||||
|
||||
def _can_get_weapon(avatar: Avatar) -> bool:
|
||||
"""检查是否可以获得兵器奇遇:当前兵器是练气级(凡品)时可触发"""
|
||||
"""检查是否可以获得兵器奇遇:当前兵器是练气级(练气)时可触发"""
|
||||
if avatar.weapon is None:
|
||||
return True
|
||||
return avatar.weapon.realm == Realm.Qi_Refinement
|
||||
@@ -395,7 +395,7 @@ async def try_trigger_fortune(avatar: Avatar) -> list[Event]:
|
||||
|
||||
|
||||
# 导入单选决策模块
|
||||
from src.classes.single_choice import make_decision
|
||||
from src.classes.single_choice import make_decision, format_swap_choice_desc
|
||||
|
||||
async def _resolve_choice(
|
||||
new_obj: Any,
|
||||
@@ -414,16 +414,17 @@ async def try_trigger_fortune(avatar: Avatar) -> list[Event]:
|
||||
return True, f"{avatar.name} 获得{new_grade_val}{type_label}『{new_name}』"
|
||||
|
||||
old_name = old_obj.name
|
||||
old_grade_val = getattr(old_obj, "grade", getattr(old_obj, "realm", None)).value
|
||||
|
||||
swap_desc = format_swap_choice_desc(new_obj, old_obj, type_label)
|
||||
|
||||
options = [
|
||||
{
|
||||
"key": "A",
|
||||
"desc": f"保留原{type_label}『{old_name}』({old_grade_val}),放弃新{type_label}『{new_name}』({new_grade_val})。"
|
||||
"desc": f"保留原{type_label}『{old_name}』,放弃新{type_label}『{new_name}』。"
|
||||
},
|
||||
{
|
||||
"key": "B",
|
||||
"desc": f"卖掉原{type_label}『{old_name}』换取灵石,接受新{type_label}『{new_name}』({new_grade_val})。"
|
||||
"desc": f"卖掉原{type_label}『{old_name}』换取灵石,接受新{type_label}『{new_name}』。\n{swap_desc}"
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ from __future__ import annotations
|
||||
from typing import TYPE_CHECKING
|
||||
import random
|
||||
|
||||
from src.classes.single_choice import make_decision
|
||||
from src.classes.single_choice import make_decision, format_swap_choice_desc
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from src.classes.avatar import Avatar
|
||||
@@ -49,14 +49,15 @@ async def kill_and_grab(winner: Avatar, loser: Avatar) -> str:
|
||||
else:
|
||||
# 其他情况下都让 AI 决策
|
||||
# 构建详细描述,包含效果
|
||||
item_desc = loot_item.get_detailed_info()
|
||||
current_desc = winner_current.get_detailed_info()
|
||||
|
||||
context = f"战斗胜利,{loser.name} 身死道消,留下了一件{loot_item.realm.value}{'兵器' if loot_type == 'weapon' else '辅助装备'}『{item_desc}』。"
|
||||
item_label = '兵器' if loot_type == 'weapon' else '辅助装备'
|
||||
context = f"战斗胜利,{loser.name} 身死道消,留下了一件{loot_item.realm.value}{item_label}『{loot_item.name}』。"
|
||||
|
||||
swap_desc = format_swap_choice_desc(loot_item, winner_current, item_label)
|
||||
|
||||
options = [
|
||||
{
|
||||
"key": "A",
|
||||
"desc": f"夺取『{loot_item.name}』,卖掉身上的『{winner_current.name}』换取灵石。\n - 新装备:{item_desc}\n - 原装备:{current_desc}"
|
||||
"desc": f"夺取『{loot_item.name}』,卖掉身上的『{winner_current.name}』换取灵石。\n{swap_desc}"
|
||||
},
|
||||
{
|
||||
"key": "B",
|
||||
|
||||
@@ -80,3 +80,25 @@ async def make_decision(
|
||||
choice = options[0]["key"]
|
||||
|
||||
return choice
|
||||
|
||||
|
||||
def format_swap_choice_desc(new_item: Any, old_item: Any | None, item_type_name: str) -> str:
|
||||
"""
|
||||
生成替换装备/功法时的决策描述文本。
|
||||
|
||||
Args:
|
||||
new_item: 新获得的物品对象(必须实现 get_info(detailed=True))
|
||||
old_item: 当前持有的物品对象(可能为 None)
|
||||
item_type_name: 物品类型名称(如"兵器"、"功法")
|
||||
"""
|
||||
new_info = item.get_info(detailed=True)
|
||||
|
||||
if old_item:
|
||||
old_info = item.get_info(detailed=True)
|
||||
return (
|
||||
f"现有{item_type_name}:{old_info}\n"
|
||||
f"新{item_type_name}:{new_info}\n"
|
||||
f"(选择替换将卖出旧{item_type_name})"
|
||||
)
|
||||
else:
|
||||
return f"新{item_type_name}:{new_info}"
|
||||
@@ -73,7 +73,9 @@ class Technique:
|
||||
return True
|
||||
return bool(eval(self.condition, {"__builtins__": {}}, {"avatar": avatar, "Alignment": Alignment}))
|
||||
|
||||
def get_info(self) -> str:
|
||||
def get_info(self, detailed: bool = False) -> str:
|
||||
if detailed:
|
||||
return self.get_detailed_info()
|
||||
return f"{self.name}({self.attribute}){self.grade.value}"
|
||||
|
||||
def get_detailed_info(self) -> str:
|
||||
|
||||
@@ -30,8 +30,10 @@ class Weapon:
|
||||
# 特殊属性(如万魂幡的吞噬魂魄计数)
|
||||
special_data: dict = field(default_factory=dict)
|
||||
|
||||
def get_info(self) -> str:
|
||||
"""获取简略信息"""
|
||||
def get_info(self, detailed: bool = False) -> str:
|
||||
"""获取信息"""
|
||||
if detailed:
|
||||
return self.get_detailed_info()
|
||||
return f"{self.name}"
|
||||
|
||||
def get_detailed_info(self) -> str:
|
||||
|
||||
@@ -155,7 +155,7 @@ protagonist_configs = [
|
||||
"level": 65,
|
||||
"sect": 14, # 噬魔宗
|
||||
"technique": 28, # 燃血大法 (自残修仙)
|
||||
"weapon": 1001, # 凡品剑 (红中)
|
||||
"weapon": 1001, # 练气剑 (红中)
|
||||
"auxiliary": 2008, # 菩提子 (清心压制)
|
||||
"personas": ["无常", "好斗", "忠诚"],
|
||||
"appearance": 20,
|
||||
|
||||
Reference in New Issue
Block a user