|
因为个人需求让AI写了一个这种脚本,考虑到可能会有其他需要的人遂发布
使用方法见注释,可以判断因为什么条件结束而决定是否赋予下一个状态
[code]# encoding: utf-8#==============================================================================# ■ 状态连锁(State Chain)#------------------------------------------------------------------------------# 让一个状态在解除时,自动为同一个角色/敌人附加另一个状态。## ◆ 备注写法(写在备注栏里)## 该状态解除后,附加 2 号状态# 只有满足 Type 指定的解除原因时才附加## 省略时等同于 。# 可以写多个 ID,用逗号隔开,例如 。## ◆ Type调用:## 0 任何方式解除都连锁(默认)# 1 战斗结束解除 / 回合数到期解除 / 步数到期解除# 2 受到伤害解除 / 因行动限制解除# 3 使用物品或技能治愈(「状态解除」效果)## ◆ 注意## · ~ 只是「连锁的触发条件」,# 状态本身何时解除,仍由数据库里的勾选项决定。# 例如要触发「受到伤害解除」,需要勾选「受到伤害时解除」;# 要触发「因行动限制解除」,需要勾选「因行动限制而解除」。## · 战斗不能、撤退、完全恢复会直接清空状态表,# 不经过逐个解除,因此不会触发连锁。## · 目标状态能否附加成功,仍受「状态有效度」等抗性影响;# 角色处于战斗不能状态时也不会附加。## · 连锁不会在同一个状态上无限循环(有次数上限保护)。##==============================================================================module StateChain #-------------------------------------------------------------------------- # ● 备注标签 #-------------------------------------------------------------------------- NEXT_PATTERN = //i TYPE_PATTERN = //i #-------------------------------------------------------------------------- # ● 解除原因的名称(仅用于调试输出) #-------------------------------------------------------------------------- REASON_NAMES = { :battle_end => "战斗结束", :turn => "回合到期", :step => "步数到期", :damage => "受到伤害", :restrict => "行动限制", :cure => "物品/技能治愈", :other => "其他方式", } #-------------------------------------------------------------------------- # ● 每种 Type 允许的解除原因(nil 表示不限制) #-------------------------------------------------------------------------- TRIGGERS = { 0 => nil, 1 => [:battle_end, :turn, :step], 2 => [:damage, :restrict], 3 => [:cure], } #-------------------------------------------------------------------------- # ● 设定 #-------------------------------------------------------------------------- # 目标状态已经存在时,是否重新计算持续时间 REFRESH_EXISTING = false # 角色处于战斗不能状态时,是否仍然附加 APPLY_WHEN_DEAD = false # 一次连锁最多处理多少个状态(防止 A → B → A 的死循环) MAX_TRANSFER = 32 # 是否在控制台输出调试信息 DEBUG = false class |