Files
heros/assets/script/game/common/config/TalSet_USAGE.md
2025-10-27 11:17:15 +08:00

11 KiB
Raw Blame History

天赋系统配置文档

概述

TalSet.ts 定义了一个灵活、可扩展的天赋系统,用于为游戏中的英雄定义特殊能力或特性。该系统支持四种主要的天赋类型,每种类型都有其独特的触发条件和效果机制。

核心概念

天赋系统的三个层次

  1. 触发条件 (Trigger) - 何时激发天赋效果
  2. 效果 (Effect) - 天赋产生的具体效果
  3. 堆叠规则 (Stack Rules) - 多次触发时的行为

四种天赋类型详解

1. 等级类天赋 (LEVEL_ATTR)

触发机制:当英雄达到指定等级时触发

使用场景

  • 角色成长里程碑
  • 等级解锁的被动能力
  • 固定间隔的属性增强

配置示例

7001: {
    talId: 7001,
    name: "剑意提升",
    desc: "每升5级攻击力增加10%",
    talType: TalType.LEVEL_ATTR,
    trigger: {
        type: "level",
        level: 5,  // 触发间隔为5级
    } as ILevelTrigger,
    effect: {
        type: "attrModify",
        attr: TalAttrType.AP,
        value: 10,
        percent: true,  // 百分比增长
    } as IAttrModifyEffect,
    stackable: true,
    maxStack: 20,  // 最多触发20次到100级
}

工作流程

  • 等级 5 → 触发,攻击力 +10%
  • 等级 10 → 再次触发,攻击力 +10%(可堆叠)
  • 等级 15 → 继续触发...
  • 最高到等级 10020×5

2. 行为计数类天赋 (ACTION_COUNT_ATTR)

触发机制:当特定行为累计达到指定次数时触发

支持的行为类型

  • ATTACK - 攻击动作
  • SKILL - 技能释放
  • DAMAGED - 受到伤害

配置示例

7101: {
    talId: 7101,
    name: "强化闪避",
    desc: "每攻击10次闪避率增加1%",
    talType: TalType.ACTION_COUNT_ATTR,
    trigger: {
        type: "actionCount",
        actionType: TalActionType.ATTACK,
        count: 10,
        resetPerLevel: false,  // 升级后不重置计数
    } as IActionCountTrigger,
    effect: {
        type: "attrModify",
        attr: TalAttrType.DODGE,
        value: 1,
        percent: true,
    } as IAttrModifyEffect,
    stackable: true,
    maxStack: 20,
}

工作流程(假设 resetPerLevel: false

  • 攻击 10 次 → 闪避率 +1%
  • 攻击 20 次 → 闪避率 +1%(累计 +2%
  • 攻击 30 次 → 闪避率 +1%(累计 +3%
  • 持续堆叠到 maxStack

resetPerLevel 选项说明

  • true:每升一级重置计数器
    • 适合每个等级独立计算的天赋
    • 示例:每升级后重新开始计数
  • false:计数持续累积,不因升级而重置
    • 适合全程累积的天赋
    • 示例:整个游戏过程中累积攻击次数

3. 受伤计数类天赋 (DAMAGE_COUNT_ATTR)

触发机制:当英雄累计受伤达到指定次数时触发

配置示例

7201: {
    talId: 7201,
    name: "坚甲护体",
    desc: "每受伤10次最大生命值增加100点",
    talType: TalType.DAMAGE_COUNT_ATTR,
    trigger: {
        type: "damageCount",
        count: 10,
        resetPerLevel: false,
    } as IDamageCountTrigger,
    effect: {
        type: "attrModify",
        attr: TalAttrType.HP,
        value: 100,
        percent: false,  // 固定值增长
    } as IAttrModifyEffect,
    stackable: true,
    maxStack: 15,
}

工作流程

  • 受伤 10 次 → 生命值 +100
  • 受伤 20 次 → 生命值 +100
  • 受伤 30 次 → 生命值 +100
  • ...最多到 15 堆叠150 次受伤)

应用场景

  • 坦克英雄通过受伤变强
  • 防御系统的成长机制
  • 反伤/反制类的天赋基础

4. 技能触发类天赋 (ACTION_TRIGGER_SKILL)

触发机制:当特定条件达成时自动释放指定的技能

配置示例

7301: {
    talId: 7301,
    name: "连击反击",
    desc: "每攻击15次自动触发反击技能",
    talType: TalType.ACTION_TRIGGER_SKILL,
    trigger: {
        type: "actionCount",
        actionType: TalActionType.ATTACK,
        count: 15,
        resetPerLevel: true,  // 每升级重置计数
    } as IActionCountTrigger,
    effect: {
        type: "skillTrigger",
        skillId: 6010,  // 反击技能的ID
    } as ISkillTriggerEffect,
    stackable: false,  // 技能触发不堆叠
}

工作流程

  • 升级 1每攻击 15 次 → 自动释放技能 6010
  • 升级 2计数重置再每攻击 15 次 → 释放技能 6010
  • 持续每个等级都能触发

关键特性

  • stackable: false - 通常技能触发不堆叠(防止过于强大)
  • 结合 resetPerLevel 控制触发频率
  • 可用于创建连锁反应和特殊战斗机制

属性类型速查表

属性类型 枚举值 说明
HP "hp" 最大生命值
MP "mp" 最大魔力值
AP "ap" 攻击力
MAP "map" 魔法攻击力
DEF "def" 防御力
MDEF "mdef" 魔法防御力
SPEED "speed" 移动速度
DODGE "dodge" 闪避率
CRIT "crit" 暴击率

扩展天赋系统

添加新的等级类天赋

/**
 * 坚韧意志 - 全系列
 * 每升4级防御力增加5%
 */
7003: {
    talId: 7003,
    name: "坚韧意志",
    desc: "每升4级防御力增加5%",
    talType: TalType.LEVEL_ATTR,
    trigger: {
        type: "level",
        level: 4,
    } as ILevelTrigger,
    effect: {
        type: "attrModify",
        attr: TalAttrType.DEF,
        value: 5,
        percent: true,
    } as IAttrModifyEffect,
    stackable: true,
    maxStack: 25,
},

添加新的行为计数类天赋

/**
 * 技能精通 - 法师系
 * 每使用技能12次魔法攻击增加8%
 */
7104: {
    talId: 7104,
    name: "技能精通",
    desc: "每使用技能12次魔法攻击增加8%",
    talType: TalType.ACTION_COUNT_ATTR,
    trigger: {
        type: "actionCount",
        actionType: TalActionType.SKILL,
        count: 12,
        resetPerLevel: false,
    } as IActionCountTrigger,
    effect: {
        type: "attrModify",
        attr: TalAttrType.MAP,
        value: 8,
        percent: true,
    } as IAttrModifyEffect,
    stackable: true,
    maxStack: 12,
},

添加新的受伤计数类天赋

/**
 * 越战越强 - 战士系
 * 每受伤8次攻击力增加4%
 */
7204: {
    talId: 7204,
    name: "越战越强",
    desc: "每受伤8次攻击力增加4%",
    talType: TalType.DAMAGE_COUNT_ATTR,
    trigger: {
        type: "damageCount",
        count: 8,
        resetPerLevel: false,
    } as IDamageCountTrigger,
    effect: {
        type: "attrModify",
        attr: TalAttrType.AP,
        value: 4,
        percent: true,
    } as IAttrModifyEffect,
    stackable: true,
    maxStack: 18,
},

添加新的技能触发类天赋

/**
 * 治疗链 - 辅助系
 * 每使用技能6次自动释放治疗技能
 */
7304: {
    talId: 7304,
    name: "治疗链",
    desc: "每使用技能6次自动释放治疗技能",
    talType: TalType.ACTION_TRIGGER_SKILL,
    trigger: {
        type: "actionCount",
        actionType: TalActionType.SKILL,
        count: 6,
        resetPerLevel: true,
    } as IActionCountTrigger,
    effect: {
        type: "skillTrigger",
        skillId: 6020,  // 治疗技能ID
    } as ISkillTriggerEffect,
    stackable: false,
},

使用工具函数

1. 获取单个天赋配置

import { getTalConf } from "./TalSet";

const talConfig = getTalConf(7001);
console.log(talConfig?.name);  // "剑意提升"

2. 获取指定类型的所有天赋

import { getTalConfByType, TalType } from "./TalSet";

// 获取所有等级类天赋
const levelTals = getTalConfByType(TalType.LEVEL_ATTR);

// 获取所有行为计数类天赋
const actionCountTals = getTalConfByType(TalType.ACTION_COUNT_ATTR);

3. 获取所有天赋ID

import { getAllTalIds } from "./TalSet";

const allIds = getAllTalIds();
console.log(allIds);  // [7001, 7002, 7101, 7102, ...]

最佳实践

1. ID 命名规范

采用 XYZZ 的格式:

  • X - 天赋类型7表示天赋
  • Y - 具体分类0=等级1=行为计数2=受伤计数3=技能触发)
  • ZZ - 序列号01-99

示例:

  • 7001 - 第一个等级类天赋
  • 7101 - 第一个行为计数类天赋
  • 7201 - 第一个受伤计数类天赋
  • 7301 - 第一个技能触发类天赋

2. 堆叠配置原则

  • 属性增强类天赋 - 通常可堆叠,设置合理的 maxStack
  • 技能触发类天赋 - 通常不堆叠stackable: false
  • 百分比效果 - 堆叠次数要控制,防止无限膨胀

3. 触发计数的重置策略

  • 持续累积 - resetPerLevel: false

    • 用于全程成长的天赋
    • 例如:攻击次数计数
  • 按等级重置 - resetPerLevel: true

    • 用于每个等级独立计算的天赋
    • 例如:技能连锁、特殊触发

4. 数值平衡

建议遵循以下原则:

  • 固定值增长 - 根据角色等级调整数值
  • 百分比增长 - 通常 1-15% 范围较合理
  • 触发频率 - 越高频越小效果,越低频越大效果

与英雄系统的集成

在 heroSet.ts 中添加天赋

export interface heroInfo {
    uuid: number;
    name: string;
    // ... 其他属性 ...
    talents?: number[];  // 天赋ID数组
}

// 示例:为刘邦添加天赋
5001: {
    uuid: 5001,
    name: "刘邦",
    // ... 其他属性 ...
    talents: [7001, 7202],  // 剑意提升 + 防御强化
}

在游戏系统中使用天赋

import { getTalConf, TalType } from "./TalSet";

// 为英雄应用天赋
function applyHeroTalents(heroId: number, heroTalents: number[]) {
    heroTalents.forEach(talId => {
        const talConfig = getTalConf(talId);
        if (talConfig) {
            // 根据天赋配置应用效果
            console.log(`应用天赋: ${talConfig.name}`);
        }
    });
}

常见问题

Q: 如何创建一个多条件触发的天赋?

A: 当前系统每个天赋只支持一种触发条件。如需复杂条件,建议在实现层面组合多个简单天赋。

Q: 堆叠次数达到上限后会发生什么?

A: 这由实现层面决定。建议:

  • 停止触发
  • 显示通知提示
  • 或记录日志便于调试

Q: 如何实现基于时间的天赋触发?

A: 当前系统不直接支持时间触发。建议:

  • 创建一个新的触发条件类型 ITimeTrigger
  • 在系统中添加相应的时间检查逻辑

Q: 如何让天赋在战斗中实时反应?

A: 天赋的实际效果应该在战斗系统中实现,配置只是定义。建议:

  • 在战斗系统中监听相关事件
  • 检查英雄的天赋配置
  • 根据配置应用对应的效果

总结

TalSet.ts 提供了一个强大而灵活的天赋系统框架,支持多种触发条件和效果类型。通过合理的配置和组合,可以创建出丰富多样的英雄特性,为游戏增添深度和可玩性。