本文最后更新于17 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
中毒状态:类型、持续时间、叠加方式、伤害数值
各种状态的叠加使得策略更加丰富生动
类型:1.增益效果 2.减益效果 3.中性效果——本身没有好坏,但是可以与其它技能产生互动。比如“印记”,施加多少层印记可以进行一次引爆产生大量伤害
持续时间:1.回合数 2.无限的 持续时间可以用来平衡不同buff的强弱设计
叠加机制:不可叠加 刷新持续时间 增加持续时间 增加层数(状态效果与层数挂钩
)
效果的载荷——skillEffectData
比如:冰霜护盾 1.初始效果造成小范围的伤害 2.持续效果:在状态有效期间持续生效或者周期生效比如每回合回复n点护甲值
一言概之,一个技能的状态效果就是由多个技能效果组合而成
1. 脚本运行机制分析
1.1 apply_status_processor.gd 运行机制
加载时机:
- 作为效果处理器,在战斗系统初始化时被加载
- 可能通过 EffectProcessor 基类的注册机制被战斗管理器识别和管理
初始化流程:
- 继承自 EffectProcessor 基类
- 通过
get_processor_id()方法注册处理器 ID 为 “status” - 无需额外初始化逻辑,依赖基类初始化
主要执行路径:
- 战斗管理器调用
can_process_effect()判断是否可处理特定效果 - 若可处理,调用
process_effect()执行状态效果应用逻辑 - 执行状态应用几率判定
- 调用目标角色的
apply_skill_status()方法 - 处理状态应用结果,触发初始效果和视觉效果
与其他系统模块交互:
- 与 BattleManager 交互:触发初始效果、请求视觉效果
- 与 Character 交互:调用
apply_skill_status()方法 - 与 SkillEffectData 交互:读取效果配置数据
- 与 SkillStatusData 交互:处理状态模板和实例
1.2 skill_status_data.gd 运行机制
加载时机:
- 作为资源文件,在需要时被加载(如技能配置引用时)
- 运行时通过
duplicate(true)创建实例
初始化流程:
- 继承自 Resource 基类
- 通过
_init()方法初始化运行时变量: - source_char = null
- target_char = null
- left_duration = duration (使用默认持续时间)
- stacks = 1 (默认叠加层数)
主要执行路径:
- 作为模板被技能配置引用
- 运行时通过
duplicate(true)创建实例 - 实例被 Character 类管理,处理持续时间、叠加等逻辑
- 触发初始效果、持续效果和结束效果
与其他系统模块交互:
- 与 Character 交互:被角色管理和应用
- 与 SkillEffectData 交互:包含初始/持续/结束效果
- 与 BattleManager 交互:通过效果触发与战斗系统交互
2. 功能作用解析
2.1 apply_status_processor.gd 功能定位
核心功能:
- 专门处理状态效果类型的技能效果
- 负责状态效果的应用流程管理
- 处理状态应用的几率判定
- 触发状态的初始效果和视觉反馈
业务逻辑:
- 验证状态模板有效性
- 执行几率判定
- 调用角色方法应用状态
- 处理应用结果并反馈
- 触发相关效果和视觉表现
2.2 skill_status_data.gd 功能定位
核心功能:
- 定义状态效果的数据结构和行为
- 作为状态效果的模板配置和运行时实例
- 管理状态的属性修改、效果触发和交互规则
业务逻辑:
- 存储状态的基本信息(ID、名称、描述、图标)
- 定义状态的行为规则(持续时间、叠加行为、类型)
- 管理状态的效果(初始、持续、结束)
- 处理状态间的交互(覆盖、抵抗)
- 定义行动限制规则
3. 逻辑流程分析
3.1 apply_status_processor.gd 逻辑流程
- can_process_effect():
- 检查效果类型是否为 STATUS 类型
- 返回布尔值表示是否可处理
- process_effect():
- 初始化结果字典
- 验证状态模板有效性
- 记录尝试应用的状态 ID
- 等待一帧(可能为了同步)
- 获取状态应用几率并执行判定
- 若几率判定失败,返回失败结果
- 调用目标角色的 apply_skill_status() 方法
- 根据应用结果更新结果字典
- 若应用成功:
- 更新成功原因
- 触发状态的初始效果
- 播放成功视觉效果
- 输出成功消息
- 若应用失败:
- 播放失败视觉效果
- 输出失败消息
- 返回结果字典
- _check_if_can_apply_status_by_chance():
- 生成随机数与几率比较
- 返回布尔值表示是否通过几率判定
3.2 skill_status_data.gd 逻辑流程
- _init():
- 初始化运行时变量
- 设置默认值
- get_full_description():
- 构建状态的完整描述文本
- 包含名称、描述、持续时间、叠加信息和效果信息
- is_countered_by():
- 检查是否被其他状态抵抗
- overrides_other_status():
- 检查是否覆盖其他状态
4. 数据交互分析
4.1 数据传递方式
apply_status_processor.gd → skill_status_data.gd:
- 通过
effect_data.status_to_apply获取状态模板 - 调用
target.apply_skill_status(status_template_to_apply, source, effect_data)传递状态模板
skill_status_data.gd → apply_status_processor.gd:
- 通过
application_result返回状态实例 - 通过
get_initial_effects()提供初始效果数据
4.2 依赖关系
apply_status_processor.gd依赖skill_status_data.gd提供状态模板和实例skill_status_data.gd被apply_status_processor.gd引用和处理
4.3 数据格式规范
状态应用结果格式:
{
"applied_successfully": bool, # 是否成功应用
"reason": String, # 应用结果原因
"status_instance": SkillStatusData # 状态实例(如果成功)
}
处理结果格式:
{
"success": bool, # 处理是否成功
"applied_status_id": StringName, # 尝试应用的状态ID
"reason": String, # 处理结果原因
"error": String (可选) # 错误信息(如果有)
}
5. 关键功能点说明
5.1 apply_status_processor.gd 关键功能
- 状态应用几率判定:
- 功能:根据配置的几率值判断状态是否成功应用
- 实现:
_check_if_can_apply_status_by_chance(chance)方法 - 参数:chance (float) – 状态应用几率(0-1之间)
- 返回值:bool – 是否通过几率判定
- 状态应用流程管理:
- 功能:协调整个状态应用过程
- 实现:
process_effect()方法 - 参数:
- effect_data (SkillEffectData) – 效果数据
- source (Character) – 施加者
- target (Character) – 目标
- 返回值:Dictionary – 应用结果
- 初始效果触发:
- 功能:状态应用成功后触发其初始效果
- 实现:调用 BattleManager 的
_apply_skill_effects_to_targets方法 - 触发条件:状态应用成功且初始效果不为空
- 视觉效果请求:
- 功能:根据应用结果请求相应的视觉效果
- 实现:
_request_visual_effect()方法 - 应用场景:状态应用成功/失败时
5.2 skill_status_data.gd 关键功能
- 状态模板配置:
- 功能:定义状态的基本属性和行为
- 实现:通过 @export 变量定义可配置属性
- 关键属性:status_id, status_name, duration, max_stacks, stack_behavior
- 状态效果管理:
- 功能:管理状态的各种效果
- 实现:通过数组变量存储不同类型的效果
- 效果类型:initial_effects, ongoing_effects, end_effects
- 状态交互规则:
- 功能:定义状态间的交互逻辑
- 实现:overrides_states 和 resisted_by_states 数组
- 方法:is_countered_by(), overrides_other_status()
- 行动限制:
- 功能:限制角色在拥有此状态时的行动
- 实现:restricted_action_categories 数组
- 应用场景:眩晕、沉默等状态
- 运行时状态管理:
- 功能:管理状态的运行时数据
- 实现:source_char, target_char, left_duration, stacks 变量
- 初始化:_init() 方法
6. 异常处理机制
6.1 apply_status_processor.gd 异常处理
- 无效状态模板处理:
- 检测:检查
status_template_to_apply是否有效 - 处理:设置错误信息,输出错误日志,返回失败结果
- 代码位置:lines 14-17
- 几率判定失败处理:
- 检测:
_check_if_can_apply_status_by_chance()返回 false - 处理:设置失败原因,输出抵抗消息,返回失败结果
- 代码位置:lines 27-32
- 视觉效果请求失败处理:
- 检测:BattleManager 不存在或缺少方法
- 处理:输出警告日志
- 代码位置:lines 53-54
6.2 skill_status_data.gd 异常处理
- 该脚本作为资源类,主要依赖外部系统进行错误处理
- 未实现显式的异常处理机制,依赖 Godot 的资源管理系统
7. 代码优化建议
7.1 apply_status_processor.gd 优化建议
- 错误处理增强:
- 建议添加对
target和source有效性的检查 - 建议增加对
effect_data中必要字段的验证
- 性能优化:
- 考虑移除 line 21-22 的
await Engine.get_main_loop().process_frame,除非有明确的同步需求 - 建议使用信号机制替代直接调用 BattleManager 的私有方法
_apply_skill_effects_to_targets
- 代码可读性:
- 建议添加更多注释说明关键逻辑
- 考虑将几率判定逻辑与应用逻辑分离为更小的函数
7.2 skill_status_data.gd 优化建议
- 数据验证:
- 建议添加对导出变量的验证逻辑,确保数据有效性
- 考虑在
_init()中添加参数验证
- 功能扩展:
- 建议添加状态效果的强度计算方法,支持基于叠加层数的效果变化
- 考虑添加状态的序列化/反序列化方法,支持存档系统
- 性能优化:
- 对于频繁访问的属性,考虑使用 getter/setter 方法
- 建议使用枚举值而非字符串进行状态类型判断
8. 总结
这两个脚本共同构成了游戏状态效果系统的核心组件:
skill_status_data.gd定义了状态效果的数据结构和行为规则apply_status_processor.gd负责状态效果的应用流程管理
系统设计清晰,功能完整,能够处理状态效果的应用、叠加、持续和结束等完整生命周期。通过几率判定、视觉反馈和效果触发等机制,为游戏提供了丰富的状态效果表现能力。
建议开发团队在后续开发中,进一步完善异常处理机制,优化性能,并考虑添加更多高级功能,如状态效果的动态强度调整、复杂的状态交互规则等,以提升游戏的策略性和可玩性。
