Buff系统重构(会议用) #149
Steinwaysj
started this conversation in
Ideas
Replies: 2 comments 1 reply
-
|
1.角色的动态属性没有增量更新的问题,重构之后应该会有个触发动态属性更新的事件? |
Beta Was this translation helpful? Give feedback.
1 reply
-
classDiagram
class 事件监听器 {
tick触发的事件
Buff生命周期触发的事件
触发buff更新事件+代理人属性更新事件
}
class buff更新事件 {
(所有可能的事件条件做哈希)
影响什么buff
buff新增
buff消亡
buff目标变更
buff层数变更
}
class Buff {
(所有可能的buff做哈希)
名称
生命周期事件
属性计算方式
生命周期行为
所属对象--引用
}
事件监听器 --> buff更新事件
buff更新事件 --> Buff
Buff --> 事件监听器
|
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
老框架介绍
简化流程
flowchart LR A[CSV配置] --> B[BuffJudge<br/>条件判定] B --> C{触发类型} C -->|简单逻辑| D[字符串匹配] C -->|复杂逻辑| E[XLogic模块] D --> F[创建Buff实例] E --> F F --> G[更新状态] G --> H[加入动态列表] H --> I[生效处理] style A fill:#ffeb3b style B fill:#2196f3 style C fill:#9c27b0 style F fill:#4caf50当前现状
当前的Buff系统存在严重的技术债务,耦合度很高,而且OOP程度低,Buff管理分散,业务逻辑分散;生命周期定义混乱,并且整个系统性能很差,存在大量不必要的对象构造。
重构目标(具体化、可衡量)
###新架构示意图:
flowchart TD A[游戏事件] --> B[EventRouter<br/>事件路由] B --> C[Registry<br/>注册中心] C --> D[ConditionEvaluator<br/>条件评估] D --> E{条件满足?} E -->|是| F[EffectExecutor<br/>效果执行] E -->|否| G[跳过] F --> H[BuffInstance<br/>Buff实例] H --> I[BuffStore<br/>存储管理] I --> J[应用效果] style A fill:#e1f5fe style B fill:#fff3e0 style D fill:#f3e5f5 style F fill:#e8f5e8 style I fill:#fff8e1目录结构
flowchart TD A[Buff/] --> B[definitions/<br/>数据定义] A --> C[registry.py<br/>注册中心] A --> D[engine/<br/>核心引擎] A --> E[store/<br/>存储管理] B --> B1[BuffDefinition] B --> B2[Condition/Effect] D --> D1[EventRouter] D --> D2[ConditionEvaluator] D --> D3[EffectExecutor] E --> E1[BuffStore] E --> E2[BuffInstance] style A fill:#e3f2fd style B fill:#fff3e0 style C fill:#f3e5f5 style D fill:#e8f5e8 style E fill:#fff8e1补充材料
展开查看原有框架的详细流程图
注:本流程图为Ai绘制!flowchart TD A[游戏循环开始<br/>Game Loop Start] --> B[Load阶段<br/>技能事件触发] B --> C[BuffLoadLoop<br/>Buff加载循环] C --> D{遍历所有角色<br/>Traverse Characters} D --> E[前台角色处理<br/>Process On-Field Buff] D --> F[后台角色处理<br/>Process Backend Buff] E --> G{遍历角色Buff_0<br/>Iterate Buff_0} F --> G G --> H{Buff是否应该处理?<br/>schedule_judge?<br/>passively_updating?} H -->|否| G H -->|是| I[计算受益角色<br/>Calculate Beneficiaries] I --> J[ProcessBuff<br/>处理单个Buff] J --> K[BuffInitialize<br/>Buff初始化] J --> L[BuffJudge<br/>Buff判定] K --> M{从缓存获取?<br/>Cache Hit?} M -->|是| N[返回缓存结果] M -->|否| O[读取CSV配置<br/>Load CSV Config] O --> P[创建配置字典<br/>Create Config Dict] L --> Q{简单逻辑?<br/>simple_judge_logic?} Q -->|是| R[Simple Judge<br/>字符串匹配判定] Q -->|否| S[Complex Judge<br/>调用xjudge方法] N --> T{判定通过?<br/>Judge Passed?} R --> T S --> T P --> T T -->|否| G T -->|是| U{简单效果逻辑?<br/>simple_effect_logic?} U -->|是| V[遍历子任务<br/>Iterate Sub-Missions] U -->|否| W[调用xeffect<br/>复杂效果逻辑] V --> X{子任务在当前tick?<br/>Sub-Mission Active?} X -->|否| V X -->|是| Y[创建新Buff实例<br/>Create New Buff Instance] Y --> Z[Buff Update<br/>更新Buff状态] W --> AA[设置状态变更<br/>Mark State Changed] Z --> BB{子任务类型<br/>Sub-Mission Type} BB -->|start| CC[update_cause_start<br/>开始逻辑] BB -->|hit| DD[update_cause_hit<br/>命中逻辑] BB -->|end| EE[update_cause_end<br/>结束逻辑] CC --> FF{简单开始逻辑?<br/>simple_start_logic?} DD --> GG{简单命中逻辑?<br/>simple_hit_logic?} EE --> HH{简单结束逻辑?<br/>simple_end_logic?} FF -->|是| II[标准开始处理<br/>Standard Start Process] FF -->|否| JJ[调用xstart<br/>复杂开始逻辑] GG -->|是| KK[标准命中处理<br/>Standard Hit Process] GG -->|否| LL[调用xhit<br/>复杂命中逻辑] HH -->|是| MM[标准结束处理<br/>Standard End Process] HH -->|否| NN[调用xend<br/>复杂结束逻辑] II --> OO[更新层数和时间<br/>Update Count & Duration] JJ --> OO KK --> OO LL --> OO MM --> OO NN --> OO OO --> PP{状态是否变更?<br/>State Changed?} AA --> PP PP -->|否| V PP -->|是| QQ[添加到Loading Dict<br/>Add to LOADING_BUFF_DICT] V --> RR[所有子任务完成?<br/>All Sub-Missions Done?] RR -->|否| X RR -->|是| G QQ --> SS[所有Buff处理完成?<br/>All Buffs Processed?] SS -->|否| G SS -->|是| TT[BuffAdd阶段<br/>Buff添加阶段] TT --> UU{遍历Loading Dict<br/>Iterate LOADING_BUFF_DICT} UU --> VV[获取角色Buff列表<br/>Get Character Buff List] VV --> WW{列表是否为空?<br/>List Empty?} WW -->|是| UU WW -->|否| XX[取出Buff实例<br/>Pop Buff Instance] XX --> YY{Buff是否有效?<br/>Buff Valid?<br/>active=True<br/>count>0<br/>endticks>0} YY -->|否| VV YY -->|是| ZZ{Buff已存在?<br/>Buff Already Exists?} ZZ -->|是| AAA[移除旧Buff<br/>Remove Old Buff] ZZ -->|否| BBB[添加到Dynamic Dict<br/>Add to DYNAMIC_BUFF_DICT] AAA --> BBB BBB --> CCC{是Debuff?<br/>Is Debuff?} CCC -->|是| DDD[添加到敌人Debuff列表<br/>Add to Enemy Debuff List] CCC -->|否| VV DDD --> VV VV --> EEE{所有角色处理完成?<br/>All Characters Done?} EEE -->|否| UU EEE -->|是| FFF[Schedule阶段<br/>调度阶段] FFF --> GGG[更新活跃Buff<br/>Update Active Buffs] GGG --> HHH[处理Buff效果<br/>Process Buff Effects] HHH --> III[清理过期Buff<br/>Clean Expired Buffs] III --> JJJ[游戏循环继续<br/>Game Loop Continue] style A fill:#e1f5fe style TT fill:#fff3e0 style FFF fill:#f3e5f5 style JJJ fill:#e8f5e8以上系统在拓展、同名Buff的不同处理、Buff需要判断受益人来确定是否触发等实际业务方面存在较多问题!同时,性能也非常差。
Beta Was this translation helpful? Give feedback.
All reactions