refactor: 统一将游戏内的「波次」术语替换为「回合」

本次提交将全项目中所有与「波次」相关的术语、注释、配置描述、UI文本全部替换为「回合」,包括:
1.  技能卡牌、怪物刷新、经济系统的相关注释与变量名
2.  配置表中的波次相关常量与描述文本
3.  UI预制体中的波次显示文本
4.  所有相关的文档注释与接口说明

统一术语后,游戏的关卡流程描述将更符合常规肉鸽游戏的表达习惯,避免与「波次」字面含义混淆,提升代码可读性与团队协作一致性。
This commit is contained in:
panFD
2026-08-09 14:51:48 +08:00
parent 2907c214f1
commit c59ba45b5b
14 changed files with 622 additions and 618 deletions

View File

@@ -88,7 +88,7 @@ export class SingletonModuleComp extends ecs.Comp {
hero_num: 0,//英雄数量
hero_max_num: FightSet.HERO_MAX_NUM,//英雄可召唤上限
hero_extend_max_num: FightSet.HERO_MAX_NUM + 1,//英雄可拓展上限
wave_time_num: 0,//波次时间
wave_time_num: 0,//回合时间
in_fight: false,
fight_time: 0,//战斗时间
level: 1,//关卡等级

View File

@@ -46,7 +46,7 @@ export enum CardTriggerType {
Interval = 2, // 定时循环:战斗中按 t_inv 间隔重复触发
Field = 3, // 驻场光环(俗称「装备」):被动生效,由 field 数组驱动,支持单卡多词条
FightStart = 4, // 战斗开始时触发
FightEnd = 5, // 战斗结束时触发(每结束)
FightEnd = 5, // 战斗结束时触发(每回合结束)
HeroDead = 6, // 场上己方英雄死亡时触发
HeroCall = 7, // 英雄上场时触发(主角召唤 + 技能召唤 + 复活)
}
@@ -59,7 +59,7 @@ export interface CardConfig {
weight: number
kind: CKind
card_lv: number // 卡牌等级(驱动 bg_node 颜色1=green 2=blue 3=purple 4=red 5=yellow
wave?: number // 针对技能卡:仅在指定波次(wave)才能抽到
wave?: number // 针对技能卡:仅在指定回合(wave)才能抽到
hero_lv?: number
base_card_lv?: number
@@ -71,7 +71,7 @@ export interface CardConfig {
is_inst?: boolean // 是否即时起效
t_times?: number // 触发次数
t_inv?: number // 触发间隔(秒)
keep_waves?: number // 维持的波次数(-1表示持续到战斗结束0或undefined表示仅本波次
keep_waves?: number // 维持的回合数(-1表示持续到战斗结束0或undefined表示仅本回合
overrides?: SkillOverrides // 技能参数覆写如自定义伤害ap、buff值、金币数等
field?: number[] // 装备词条数组驻场光环卡trigger_type=Field的属性词条支持单卡多词条如 [7002, 7004, 7005] 同时提供攻击/暴击/暴伤)
@@ -80,7 +80,7 @@ export interface CardConfig {
/**
* 事件型触发的全局次数上限(仅 FightStart/FightEnd/HeroDead/HeroCall 有效)
* 默认 Infinity达到上限后销毁节点
* 注意:与 t_times 语义不同——t_times 控制每内 Interval 的次数
* 注意:与 t_times 语义不同——t_times 控制每回合内 Interval 的次数
*/
trigger_limit?: number;
@@ -242,7 +242,7 @@ export const drawCardsByRule = (
})
}
// 如果传入了波次并且是技能卡,则根据 wave 过滤
// 如果传入了回合并且是技能卡,则根据 wave 过滤
if (options.wave !== undefined) {
pool = pool.filter(card => {
if (card.type === CardType.Skill) {

View File

@@ -23,9 +23,9 @@ export enum FacSet {
MON = 1,
}
export enum FightSet {
WAVE_COIN_BASE = 7, // 波次金币基础奖励
WAVE_COIN_GROW = 2, // 波次金币递增值
WAVE_COIN_MAX = 17, // 波次金币最大基础奖励
WAVE_COIN_BASE = 7, // 回合金币基础奖励
WAVE_COIN_GROW = 2, // 回合金币递增值
WAVE_COIN_MAX = 17, // 回合金币最大基础奖励
CRIT_DAMAGE = 50,//暴击伤害
MORE_RC = 10,//更多次数 广告获取的次数
HEARTPOS = -320,//基地位置
@@ -55,11 +55,11 @@ export enum FightSet {
}
/**
* 技能卡牌出现的波次配置(单一数据源)。
* 技能卡牌出现的回合配置(单一数据源)。
* 数组索引 i 对应卡牌档位 card_lv = i + 1
* - 第 1 个波次 → LV1 档(基础强度)
* - 第 2 个波次 → LV2 档(强度 ×2
* - 第 3 个波次 → LV3 档(强度 ×3
* - 第 1 个回合 → LV1 档(基础强度)
* - 第 2 个回合 → LV2 档(强度 ×2
* - 第 3 个回合 → LV3 档(强度 ×3
* 需与 CardSet.SkillCardData 的 wave 字段严格对齐,否则抽卡时池子为空。
*/
export const SKILL_CARD_WAVES: number[] = [1, 5, 8];

View File

@@ -29,7 +29,7 @@ interface SkillCardRaw {
is_inst: boolean;
t_times?: number; // 触发次数(未设置时按 is_inst 取默认值:即时=1定时=3
t_inv?: number;
keep_waves?: number; // 维持波次数(默认 0=仅本波次
keep_waves?: number; // 维持回合数(默认 0=仅本回合
trigger_type: CardTriggerType;
overrides?: SkillOverrides;
}

View File

@@ -317,7 +317,7 @@ export const SkillSet: Record<number, SkillConfig> = {
RType: RType.fixed, EType: EType.animationEnd, info: "召唤陨石范围攻击敌人,有概率击晕",
},
//============================= ====== 辅助技能 技能卡牌 1 技能 ====== ==========================
//============================= ====== 辅助技能 技能卡牌 1 回合技能 ====== ==========================
6301: {
uuid: 6301, name: "护盾", sp_name: "buff_wind", icon: "Stat_Defense", TGroup: TGroup.Self, readyAnm: "up_blue", endAnm: "", act: "atk",
DTType: DTType.single, kind: SkillKind.Shield, ap: 3, hit_count: 1, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.support,
@@ -328,7 +328,7 @@ export const SkillSet: Record<number, SkillConfig> = {
DTType: DTType.single, kind: SkillKind.Heal, ap: 300, hit_count: 1, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.support,
RType: RType.fixed, EType: EType.animationEnd, info: "治疗伙伴/自己",
},
//==========================buff 技能 也是 技能卡牌 5 技能
//==========================buff 技能 也是 技能卡牌 5 回合技能
6303: {
uuid: 6303, name: "获取金币", sp_name: "buff_wind", icon: "Stat_GoldGainIncrease_01", TGroup: TGroup.Self, readyAnm: "up_blue", endAnm: "gold", act: "atk",
DTType: DTType.single, kind: SkillKind.Gold, ap: 0, gold: 1, hit_count: 1, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.support,

View File

@@ -304,9 +304,9 @@ export interface LvBonusEntry {
* dead 战士/刺客 死亡触发,一次性全队遗产
* fstart 法师 战斗开始前触发一次,必然生效的全队增益
* field 法师 驻场光环,存活期间持续生效,死亡消失
* fend 辅助 每结束触发,跨波次累积增益
* fend 辅助 每回合结束触发,跨回合累积增益
*
* 触发节奏atked 3次/5次atking 5次/7次fstart/fend 1次/
* 触发节奏atked 3次/5次atking 5次/7次fstart/fend 1次/回合
*
* skills[0]是普通攻击技能
*/
@@ -724,7 +724,7 @@ export const HeroInfo: Record<number, heroInfo> = {
5051: {
uuid: 5051, name: "占卜师", path: "hm1", fac: FacSet.HERO, card_lv: 1, lv: 1, type: HType.Long, hp: 143, ap: 40,
skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Mid3].cd, ccd: 0 } },
// 战前计时 buff开始全队 AP 限时提升(+30/5s → +60/7s → +90/10s
// 战前计时 buff回合开始全队 AP 限时提升(+30/5s → +60/7s → +90/10s
// 统一复用 7111 基础配置,通过 buff_value/buff_duration 覆写实现三档成长
fstart: {
6401: [
@@ -810,7 +810,7 @@ export const HeroInfo: Record<number, heroInfo> = {
info: "<color=#27AE60>✧</color>光环全队提升攻击\n<color=#9B59B6>✦</color>追加提升攻速",
},
// ========== fend + atking 类(辅助 · 治疗续航 + 波次增益) ==========
// ========== fend + atking 类(辅助 · 治疗续航 + 回合增益) ==========
5071: {
uuid: 5071, name: "治愈牧师", path: "hh1", fac: FacSet.HERO, card_lv: 1, lv: 1, type: HType.Long, hp: 143, ap: 40,
skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal3].cd, ccd: 0 } },
@@ -831,21 +831,21 @@ export const HeroInfo: Record<number, heroInfo> = {
// skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Mid1].cd, ccd: 0 } },
// atking: [{ s_uuid: 6302, t_num: 5, overrides: { TGroup: TGroup.Team, ap: 200 } }],
// fend: [{ s_uuid: 6303, t_num: 1, overrides: { gold: 1 } }],
// info: "攻击5次治疗全队结束获得1金币"
// info: "攻击5次治疗全队回合结束获得1金币"
// },
// 5073: {
// uuid: 5073, name: "强化牧师", path: "hh3", fac: FacSet.HERO, card_lv: 3, lv: 1, type: HType.Long, hp: 430, ap: 120,
// skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal3].cd, ccd: 0 } },
// atking: [{ s_uuid: 6302, t_num: 5, overrides: { TGroup: TGroup.Team, ap: 250 } }],
// fend: [{ s_uuid: 6401, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 10 } }],
// info: "攻击5次治疗全队结束全队永久+10攻击力"
// info: "攻击5次治疗全队回合结束全队永久+10攻击力"
// },
// 5074: {
// uuid: 5074, name: "生命牧师", path: "hh4", fac: FacSet.HERO, card_lv: 4, lv: 1, type: HType.Long, hp: 573, ap: 160,
// skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal3].cd, ccd: 0 } },
// atking: [{ s_uuid: 6302, t_num: 5, overrides: { TGroup: TGroup.Team, ap: 250 } }],
// fend: [{ s_uuid: 6402, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 80 } }],
// info: "攻击5次治疗全队结束全队永久+80最大生命值"
// info: "攻击5次治疗全队回合结束全队永久+80最大生命值"
// },
// 5075: {
// uuid: 5075, name: "全能牧师", path: "hh5", fac: FacSet.HERO, card_lv: 5, lv: 1, type: HType.Long, hp: 717, ap: 200,
@@ -855,7 +855,7 @@ export const HeroInfo: Record<number, heroInfo> = {
// { s_uuid: 6401, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 12 } },
// { s_uuid: 6402, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 60 } }
// ],
// info: "攻击5次治疗全队300%AP结束全队永久+12攻击力、+60最大生命值"
// info: "攻击5次治疗全队300%AP回合结束全队永久+12攻击力、+60最大生命值"
// },
@@ -959,7 +959,7 @@ export const HeroList: number[] = [
// 5053, 5054, 5055, 5056,
// field 类(法师 · 驻场光环)
5061,
// fend + atking 类(辅助 · 治疗 + 波次增益)
// fend + atking 类(辅助 · 治疗 + 回合增益)
5071,
// 5072, 5073, 5074, 5075,
];
@@ -971,7 +971,7 @@ export const HeroList: number[] = [
* - W_HP: 每 1 点生命值折算 1 分(生命值不随时间变化)
* - W_DPS_PER_SEC: 每 1 点 DPS 持续 1 秒折算 0.5 分
* (默认 60 秒评估窗下1 DPS ≈ 30 分,与旧版 W_DPS=30 等效)
* - WAVE_DURATION / HITS_PER_WAVE: 波次参数,用于估算 atked/fstart/fend/dead 触发次数
* - WAVE_DURATION / HITS_PER_WAVE: 回合参数,用于估算 atked/fstart/fend/dead 触发次数
* - DEFAULT_EVAL_SECONDS: calcHeroPower 默认使用的评估时间窗
*/
export const HERO_POWER_WEIGHTS = {
@@ -1086,7 +1086,7 @@ function getHitCount(seconds: number): number {
return (seconds / weights.WAVE_DURATION) * weights.HITS_PER_WAVE;
}
/** 计算目标时间窗内的波次数 */
/** 计算目标时间窗内的回合数 */
function getWaveCount(seconds: number): number {
return seconds / HERO_POWER_WEIGHTS.WAVE_DURATION;
}