refactor conversation

This commit is contained in:
bridge
2025-12-18 21:52:00 +08:00
parent 3ca5333246
commit acf7d9dd35
36 changed files with 109 additions and 51 deletions

View File

@@ -18,8 +18,9 @@ if TYPE_CHECKING:
@cooldown_action
class Assassinate(InstantAction):
COMMENT = "暗杀目标,失败则变为战斗"
DOABLES_REQUIREMENTS = "任何时候都可以执行;需要冷却"
ACTION_NAME = "暗杀"
DESC = "暗杀目标,失败则变为战斗"
DOABLES_REQUIREMENTS = "无限制;需要冷却"
PARAMS = {"avatar_name": "AvatarName"}
ACTION_CD_MONTHS = 12

View File

@@ -11,8 +11,9 @@ from src.classes.death_reason import DeathReason
from src.classes.kill_and_grab import kill_and_grab
class Attack(InstantAction):
COMMENT = "攻击目标,进行对战"
DOABLES_REQUIREMENTS = "任何时候都可以执行"
ACTION_NAME = "发起战斗"
DESC = "攻击目标,进行对战"
DOABLES_REQUIREMENTS = "无限制"
PARAMS = {"avatar_name": "AvatarName"}
# 提供用于故事生成的提示词:不出现血量/伤害等数值描述
STORY_PROMPT: str | None = (

View File

@@ -25,7 +25,8 @@ class Breakthrough(TimedAction):
失败时按 `CultivationProgress.get_breakthrough_fail_reduce_lifespan()` 减少寿元(年)。
"""
COMMENT = "尝试突破境界(成功增加寿元上限,失败折损寿元上限;境界越高,成功率越低。)"
ACTION_NAME = "突破"
DESC = "尝试突破境界(成功增加寿元上限,失败折损寿元上限;境界越高,成功率越低。)"
DOABLES_REQUIREMENTS = "角色处于瓶颈时;不能连续执行"
PARAMS = {}
# 冷却突破应当有CD避免连刷

View File

@@ -23,7 +23,8 @@ class Catch(TimedAction):
- 按动物境界映射成功率尝试捕捉,成功则成为灵兽(覆盖旧灵兽)。
"""
COMMENT = "尝试驯服一只灵兽,成为自身灵兽。只能有一只灵兽,但是可以高级替换低级。"
ACTION_NAME = "御兽"
DESC = "尝试驯服一只灵兽,成为自身灵兽。只能有一只灵兽,但是可以高级替换低级。"
DOABLES_REQUIREMENTS = "仅百兽宗;在有动物的普通区域;目标动物境界不高于角色"
PARAMS = {}

View File

@@ -7,7 +7,7 @@ def cooldown_action(cls: type) -> type:
- 仅当类定义了 ACTION_CD_MONTHS 且 >0 时生效
- 在 can_start 前置检查冷却;在 finish 后记录冷却开始月戳
- 冷却记录存放于 avatar._action_cd_last_months[ClassName]
- 同时在 COMMENT 中追加“冷却X月”便于 UI 显示
- 同时在 DESC 中追加“冷却X月”便于 UI 显示
"""
cd = int(getattr(cls, "ACTION_CD_MONTHS", 0) or 0)

View File

@@ -11,7 +11,8 @@ class Cultivate(TimedAction):
修炼动作,可以增加修仙进度。
"""
COMMENT = "修炼,增进修为。在修炼区域(洞府)且灵气匹配时效果最佳,否则效果很差。"
ACTION_NAME = "修炼"
DESC = "修炼,增进修为。在修炼区域(洞府)且灵气匹配时效果最佳,否则效果很差。"
DOABLES_REQUIREMENTS = "角色未到瓶颈;若在洞府区域,则该洞府需无主或归自己所有。"
PARAMS = {}

View File

@@ -10,7 +10,8 @@ class DevourMortals(TimedAction):
吞噬凡人:需持有万魂幡,吞噬魂魄可较多增加战力。
"""
COMMENT = "吞噬凡人,较多增加战力"
ACTION_NAME = "吞噬凡人"
DESC = "吞噬凡人,较多增加战力"
DOABLES_REQUIREMENTS = "持有万魂幡"
PARAMS = {}

View File

@@ -14,8 +14,9 @@ class Escape(InstantAction):
失败:抢占并进入 Attack。
"""
COMMENT = "逃离对方(基于成功率判定)"
DOABLES_REQUIREMENTS = "任何时候都可以执行"
ACTION_NAME = "逃离"
DESC = "逃离对方(基于成功率判定)"
DOABLES_REQUIREMENTS = "无限制"
PARAMS = {"avatar_name": "AvatarName"}
def _find_avatar_by_name(self, name: str) -> "Avatar|None":

View File

@@ -12,7 +12,8 @@ class Harvest(TimedAction):
可以获得植物对应的物品
"""
COMMENT = "在当前区域采集植物,获取植物材料"
ACTION_NAME = "采集"
DESC = "在当前区域采集植物,获取植物材料"
DOABLES_REQUIREMENTS = "在有植物的普通区域且avatar的境界必须大于等于植物的境界"
PARAMS = {}

View File

@@ -12,7 +12,8 @@ class HelpMortals(TimedAction):
仅正阵营可执行。
"""
COMMENT = "在城镇帮助凡人,消耗少量灵石"
ACTION_NAME = "帮助凡人"
DESC = "在城镇帮助凡人,消耗少量灵石"
DOABLES_REQUIREMENTS = "仅限城市区域,且角色阵营为‘正’,并且灵石足够"
PARAMS = {}
COST = 10

View File

@@ -12,7 +12,8 @@ class Hunt(TimedAction):
可以获得动物对应的物品
"""
COMMENT = "在当前区域狩猎动物,获取动物材料"
ACTION_NAME = "狩猎"
DESC = "在当前区域狩猎动物,获取动物材料"
DOABLES_REQUIREMENTS = "在有动物的普通区域且avatar的境界必须大于等于动物的境界"
PARAMS = {}

View File

@@ -9,7 +9,8 @@ class Move(DefineAction, ChunkActionMixin):
最基础的移动动作在tile之间进行切换。
"""
COMMENT = "移动到某个相对位置"
ACTION_NAME = "移动"
DESC = "移动到某个相对位置"
PARAMS = {"delta_x": "int", "delta_y": "int"}
def _execute(self, delta_x: int, delta_y: int) -> None:

View File

@@ -17,8 +17,9 @@ class MoveAwayFromAvatar(TimedAction):
- 任何时候都可以启动
"""
COMMENT = "持续远离指定角色"
DOABLES_REQUIREMENTS = "任何时候都可以执行"
ACTION_NAME = "远离角色"
DESC = "持续远离指定角色"
DOABLES_REQUIREMENTS = "无限制"
PARAMS = {"avatar_name": "AvatarName"}
def _find_avatar_by_name(self, name: str) -> "Avatar | None":

View File

@@ -8,8 +8,9 @@ from src.utils.distance import euclidean_distance
class MoveAwayFromRegion(InstantAction):
COMMENT = "离开指定区域"
DOABLES_REQUIREMENTS = "任何时候都可以执行"
ACTION_NAME = "离开区域"
DESC = "离开指定区域"
DOABLES_REQUIREMENTS = "无限制"
PARAMS = {"region": "RegionName"}
def _execute(self, region: str) -> None:

View File

@@ -13,8 +13,9 @@ class MoveToAvatar(DefineAction, ActualActionMixin):
朝另一个角色当前位置移动。
"""
COMMENT = "移动到某个角色所在位置"
DOABLES_REQUIREMENTS = "任何时候都可以执行"
ACTION_NAME = "移动到角色"
DESC = "移动到某个角色所在位置"
DOABLES_REQUIREMENTS = "无限制"
PARAMS = {"avatar_name": "str"}
def _get_target(self, avatar_name: str):

View File

@@ -57,8 +57,9 @@ class MoveToDirection(DefineAction, ActualActionMixin):
向某个方向移动探索固定时长6个月
"""
COMMENT = "向某个方向探索未知区域"
DOABLES_REQUIREMENTS = "任何时候都可以执行"
ACTION_NAME = "移动探索"
DESC = "向某个方向探索未知区域"
DOABLES_REQUIREMENTS = "无限制"
PARAMS = {"direction": "direction (North/South/East/West)"}
IS_MAJOR = False

View File

@@ -14,8 +14,9 @@ class MoveToRegion(DefineAction, ActualActionMixin):
移动到某个region
"""
COMMENT = "移动到某个区域"
DOABLES_REQUIREMENTS = "任何时候都可以执行"
ACTION_NAME = "移动到区域"
DESC = "移动到某个区域"
DOABLES_REQUIREMENTS = "无限制"
PARAMS = {"region": "region_name"}
def __init__(self, avatar, world):

View File

@@ -10,8 +10,9 @@ class NurtureWeapon(TimedAction):
温养兵器:花时间温养兵器,可以较多增加熟练度
"""
COMMENT = "温养兵器,增加兵器熟练度"
DOABLES_REQUIREMENTS = "任何时候都可以执行"
ACTION_NAME = "温养兵器"
DESC = "温养兵器,增加兵器熟练度"
DOABLES_REQUIREMENTS = "无限制"
PARAMS = {}
duration_months = 3

View File

@@ -9,8 +9,9 @@ class Play(TimedAction):
消遣动作,持续半年时间
"""
COMMENT = "消遣,放松身心"
DOABLES_REQUIREMENTS = "任何时候都可以执行"
ACTION_NAME = "消遣"
DESC = "消遣,放松身心"
DOABLES_REQUIREMENTS = "无限制"
PARAMS = {}
duration_months = 6

View File

@@ -12,7 +12,8 @@ class PlunderMortals(TimedAction):
仅邪阵营可执行。
"""
COMMENT = "在城镇搜刮凡人,获取少量灵石"
ACTION_NAME = "搜刮凡人"
DESC = "在城镇搜刮凡人,获取少量灵石"
DOABLES_REQUIREMENTS = "仅限城市区域,且角色阵营为‘邪’"
PARAMS = {}
GAIN = 20

View File

@@ -11,7 +11,8 @@ class SelfHeal(TimedAction):
单月动作执行后HP直接回满。
"""
COMMENT = "在宗门总部静养疗伤回满HP"
ACTION_NAME = "疗伤"
DESC = "在宗门总部静养疗伤回满HP"
DOABLES_REQUIREMENTS = "自己是宗门弟子且位于本宗门总部区域且当前HP未满"
PARAMS = {}

View File

@@ -14,7 +14,8 @@ class SellItems(InstantAction):
收益为 item_price * item_num动作耗时1个月。
"""
COMMENT = "在城镇出售持有的某类物品的全部"
ACTION_NAME = "出售物品"
DESC = "在城镇出售持有的某类物品的全部"
DOABLES_REQUIREMENTS = "在城镇且背包非空"
PARAMS = {"item_name": "str"}

View File

@@ -13,7 +13,8 @@ class SwitchWeapon(InstantAction):
熟练度重置为0。
"""
COMMENT = "切换到指定类型的凡品兵器或卸下兵器。当前兵器会丧失熟练度会重置为0。适用于想要更换兵器类型或从头修炼新兵器的情况。"
ACTION_NAME = "切换兵器"
DESC = "切换到指定类型的凡品兵器或卸下兵器。当前兵器会丧失熟练度会重置为0。适用于想要更换兵器类型或从头修炼新兵器的情况。"
DOABLES_REQUIREMENTS = "无前置条件"
PARAMS = {"weapon_type_name": "str"}