refactor: 重构天赋系统与技能触发逻辑
1. 重构天赋系统架构:将天赋加成与触发修正统一收敛到 HeroAttrsComp.applyTalent 2. 新增天赋触发修正字段:talent_t_num_reduce 与 talent_extra_trigger_chance 3. 重构天赋加点逻辑:统一 1 点/级,新增软前置校验 4. 优化天赋UI组件:改为编辑器静态配置驱动,重构层位展示逻辑 5. 修复技能触发判定:在 SkillTriggerHelper 中应用天赋触发修正 6. 调整天赋配置结构:改为 5 层递进解锁,新增 L4/L5 专属触发修正配置
This commit is contained in:
@@ -98,6 +98,7 @@ export class SkillTriggerHelper {
|
||||
/**
|
||||
* 处理攻击附加技能
|
||||
* 判定逻辑:依据配置中的 t_num(触发所需普攻次数),对比当前的普攻累计次数取模判定。
|
||||
* 天赋修正:L4 减少 t_num 阈值(下限 1);L5 按概率额外触发 1 次。
|
||||
*/
|
||||
private static handleAtking(model: HeroAttrsComp, view: HeroViewComp) {
|
||||
if (!model.runtime_atking || model.runtime_atking.length === 0) return;
|
||||
@@ -107,10 +108,17 @@ export class SkillTriggerHelper {
|
||||
triggerCount += FieldSkillHelper.getFieldSkillTotalValue(FieldSkillType.AtkCount);
|
||||
}
|
||||
triggerCount = Math.max(1, Math.floor(triggerCount));
|
||||
// L5 天赋:概率额外触发 1 次(与羁绊次数加成独立乘算)
|
||||
if (model.talent_extra_trigger_chance > 0 && Math.random() * 100 < model.talent_extra_trigger_chance) {
|
||||
triggerCount += 1;
|
||||
}
|
||||
// L4 天赋:减少触发所需次数(下限 1)
|
||||
const tNumReduce = model.talent_t_num_reduce;
|
||||
|
||||
model.runtime_atking.forEach(atkConfig => {
|
||||
// atk_count 代表已进行的普攻次数。当其余数刚好整除配置阈值时触发。
|
||||
if (model.atk_count > 0 && model.atk_count % atkConfig.t_num === 0) {
|
||||
const tNum = Math.max(1, atkConfig.t_num - tNumReduce);
|
||||
if (model.atk_count > 0 && model.atk_count % tNum === 0) {
|
||||
for (let i = 0; i < triggerCount; i++) {
|
||||
this.dispatchSingle(atkConfig.s_uuid, model, view, SkillTriggerType.Atking, atkConfig.overrides);
|
||||
}
|
||||
@@ -121,6 +129,7 @@ export class SkillTriggerHelper {
|
||||
/**
|
||||
* 处理受击附加技能
|
||||
* 判定逻辑:依据配置中的 t_num(触发所需受击次数),对比当前的受击累计次数取模判定。
|
||||
* 天赋修正:L4 减少 t_num 阈值(下限 1);L5 按概率额外触发 1 次。
|
||||
*/
|
||||
private static handleAtked(model: HeroAttrsComp, view: HeroViewComp) {
|
||||
if (!model.runtime_atked || model.runtime_atked.length === 0) return;
|
||||
@@ -130,10 +139,17 @@ export class SkillTriggerHelper {
|
||||
triggerCount += FieldSkillHelper.getFieldSkillTotalValue(FieldSkillType.BeAtkCount);
|
||||
}
|
||||
triggerCount = Math.max(1, Math.floor(triggerCount));
|
||||
// L5 天赋:概率额外触发 1 次(与羁绊次数加成独立乘算)
|
||||
if (model.talent_extra_trigger_chance > 0 && Math.random() * 100 < model.talent_extra_trigger_chance) {
|
||||
triggerCount += 1;
|
||||
}
|
||||
// L4 天赋:减少触发所需次数(下限 1)
|
||||
const tNumReduce = model.talent_t_num_reduce;
|
||||
|
||||
model.runtime_atked.forEach(atkConfig => {
|
||||
// atked_count 代表已承受的受击次数。当其余数刚好整除配置阈值时触发。
|
||||
if (model.atked_count > 0 && model.atked_count % atkConfig.t_num === 0) {
|
||||
const tNum = Math.max(1, atkConfig.t_num - tNumReduce);
|
||||
if (model.atked_count > 0 && model.atked_count % tNum === 0) {
|
||||
for (let i = 0; i < triggerCount; i++) {
|
||||
this.dispatchSingle(atkConfig.s_uuid, model, view, SkillTriggerType.Atked, atkConfig.overrides);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user