Files
pixelheros/assets/script/game/common/config/heroSet.ts
walkpan 88d7bdae47 feat(skill): 支持技能参数自定义覆盖
本次修改实现同技能不同角色的差异化技能效果:
1. 新增SkillOverrides接口与mergeSkillParams工具函数,用于合并基础技能配置和角色覆盖参数
2. 更新英雄配置、属性组件、触发辅助系统与施法系统以适配该机制
3. 为盾骑士、医师添加示例差异化配置,验证功能可行性
4. 整理技能配置,删除冗余重复的旧技能条目
5. 新增技能重构设计计划文档,替换旧的迁移计划文档
2026-05-23 12:11:00 +08:00

243 lines
12 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { v3 } from "cc"
import { BoxSet, FacSet } from "./GameSet"
import { SkillOverrides, TGroup } from "./SkillSet"
export enum HType {
Melee = 0,
Mid = 1,
Long = 2,
}
export const HTypeName ={
0:"近战",
1:"中程",
2:"远程",
}
/**
* 英雄攻击速度分级配置 (数值为攻击间隔cd越小越快)
*/
export enum AtkSpeedLv {
VeryFast1 = 1, VeryFast2 = 2,
Fast1 = 3, Fast2 = 4,
Normal1 = 5, Normal2 = 6,
Slow1 = 7, Slow2 = 8,
VerySlow1 = 9, VerySlow2 = 10,
}
export const AtkSpeedSet = {
[AtkSpeedLv.VeryFast1]: { name: "极速+", cd: 0.15 },
[AtkSpeedLv.VeryFast2]: { name: "极速", cd: 0.30 },
[AtkSpeedLv.Fast1]: { name: "快速+", cd: 0.50 },
[AtkSpeedLv.Fast2]: { name: "快速", cd: 0.70 },
[AtkSpeedLv.Normal1]: { name: "普通+", cd: 0.90 },
[AtkSpeedLv.Normal2]: { name: "普通", cd: 1.10 },
[AtkSpeedLv.Slow1]: { name: "慢+", cd: 1.50 },
[AtkSpeedLv.Slow2]: { name: "慢", cd: 1.80 },
[AtkSpeedLv.VerySlow1]: { name: "很慢+", cd: 2.30 },
[AtkSpeedLv.VerySlow2]: { name: "很慢", cd: 2.80 },
};
export const HeroPos={
0:{pos:v3(-320,BoxSet.GAME_LINE,0)},
1:{pos:v3(0,BoxSet.GAME_LINE,0)},
2:{pos:v3(0,BoxSet.GAME_LINE,0)},
}
export const FormationPointX = {
[HType.Melee]: -20,
[HType.Mid]: 100,
[HType.Long]: 100,
} as const;
export const HeroDisVal: Record<HType.Melee | HType.Mid | HType.Long, number> = {
[HType.Melee]: 120,
[HType.Mid]: 720,
[HType.Long]: 720,
}
export const resolveFormationTargetX = (fac: FacSet, type: HType): number => {
const resolvedRangeType = type as HType.Melee | HType.Mid | HType.Long;
const side = fac === FacSet.MON ? 1 : -1;
return FormationPointX[resolvedRangeType] * side;
}
export enum MonStart {
SLINE_1=140, //上线y
SLINE_2=100, //下线y
SLINE_3=180, //下线y
SLINE_4=60, //y起始点
START_X=320, //x起始点
START_I=90, //x轴间隔
}
/**
* 英雄/怪物基础信息接口
*/
export interface heroInfo {
uuid: number; // 唯一标识英雄5000段,怪物5200段
name: string; // 显示名称
icon?: string; // 图标名称(对应美术资源名)
path: string; // 资源路径(对应美术资源名)
fac: FacSet; // 阵营FacSet.HERO 或 FacSet.MON
kind?: number; // 未使用
lv: number; // 英雄等级
cards_lv?: number; // 卡片等级
type: HType; // 攻击定位(近战/中程/远程)
hp: number; // 生命值上限
ap: number; // 攻击力
call?:{s_uuid:number, t_num:number, overrides?: SkillOverrides}[]; // 召唤后触发的技能配置
dead?:{s_uuid:number, t_num:number, overrides?: SkillOverrides}[]; // 死亡后触发的技能配置
fstart?:{s_uuid:number, t_num:number, overrides?: SkillOverrides}[]; // 战斗开始时释放的技能配置
fend?:{s_uuid:number, t_num:number, overrides?: SkillOverrides}[]; // 战斗结束时释放的技能配置
field?:number[]; // 驻场技能uuid列表英雄在场时对全局生效
atking?:{s_uuid:number, t_num:number, overrides?: SkillOverrides}[]; // 普通攻击后触发的技能配置s_uuid: 技能id, t_num: 触发所需的普攻次数
atked?:{s_uuid:number, t_num:number, overrides?: SkillOverrides}[]; // 受击后触发的技能配置s_uuid: 技能id, t_num: 触发所需的受击次数
revive?:{s_uuid:number,r_num:number,upr:number}; // 复活技能配置s_uuid: 技能id, r_num: 触发所需的复活次数, upr 等级对复活次数的影响
dis?: number; // 攻击距离(像素)
speed?: number; // 移动速度(像素/秒)
skills: Record<number, HSkillInfo> ; // 携带技能ID列表
info: string; // 描述文案
}
/**
* 技能基础信息接口
*/
export interface HSkillInfo {
uuid: number; // 唯一标识技能6000段等
lv:number; // 技能等级
cd:number; // 技能cd
ccd:number; // 占位当前cd用于cd计时
overrides?: SkillOverrides; // 角色专属参数覆盖
}
/*
*=============英雄配置列表================
* 英雄规则设定
* 战士 专注 受攻击触发技能
* 射手 专注 施法触发技能
* 法师 专注 战斗开始触发技能
* 辅助 专注 战斗结束触发技能
*
* 设定中的英雄都是1级,最高可以升级到3级不在列表内提现,升级在游戏内进行)
* skills[0]是普通攻击技能
* skills[1]是等级2时的技能,skills[2]是等级3时的技能
*
* 属性基准(cards_lv:1,lv:1) SPEED:800, AP:30 | HP:300 | skills[0].cd = 1.0 (普通)
* 坦克(cards_lv:1,lv:1) SPEED:800, AP:25 | HP:450 | skills[0].cd = 2.3 或 2.8 (很慢+/很慢) - 突出沉重感与承伤定位
* 近战dps(cards_lv:1,lv:1) SPEED:800, AP:50 | HP:250 | skills[0].cd = 0.3 或 0.5 (极速/快速+) - 强化割草连击爽感
* 远程dps(cards_lv:1,lv:1) SPEED:800, AP:60 | HP:150 | skills[0].cd = 0.7 或 0.9 (快速/普通+) - 稳定持续的物理输出节奏
*远程法dps(cards_lv:1,lv:1) SPEED:800, AP:60 | HP:150 | skills[0].cd = 1.5 或 1.8 (慢+/慢) - 强调施法前摇与单发爆发
* 远程辅助(cards_lv:1,lv:1) SPEED:800, AP:20 | HP:150 | skills[0].cd = 1.1 (普通) - 贴近基准,动作不急不躁,侧重技能
*/
export const HeroInfo: Record<number, heroInfo> = {
// ========== 近战英雄 ==========
5001:{uuid:5001,name:"见习战士",path:"hk2", fac:FacSet.HERO,cards_lv:1,lv:1,type:HType.Melee,hp:150,ap:25,
skills:{6002:{uuid:6002,lv:1,cd:1.5,ccd:0}},atked:[{s_uuid:6301,t_num:2}],info:" "},
5002:{uuid:5002,name:"盾骑士",path:"hk1", fac:FacSet.HERO,cards_lv:3,lv:1,type:HType.Melee,hp:150,ap:75,
skills:{6002:{uuid:6002,lv:1,cd:1.5,ccd:0}},atked:[{s_uuid:6301,t_num:2,overrides:{TGroup:TGroup.Team,ap:2,hit_count:3}}],info:" "},
5003:{uuid:5003,name:"战士3",path:"hk3", fac:FacSet.HERO,cards_lv:2,lv:1,type:HType.Melee,hp:100,ap:100,
skills:{6002:{uuid:6002,lv:1,cd:1.5,ccd:0}},info:" "},
5004:{uuid:5004,name:"战士4",path:"hk4", fac:FacSet.HERO,cards_lv:4,lv:1,type:HType.Melee,hp:100,ap:200,
skills:{6002:{uuid:6002,lv:1,cd:0.7,ccd:0}},info:" "},
5005:{uuid:5005,name:"战士5",path:"hk5", fac:FacSet.HERO,cards_lv:4,lv:1,type:HType.Melee,hp:100,ap:200,
skills:{6002:{uuid:6002,lv:1,cd:1.5,ccd:0}},info:" "},
// ========== 法师英雄 ==========
5101:{uuid:5101,name:"奥术法师",path:"hm2", fac:FacSet.HERO,cards_lv:1,lv:1,type:HType.Long,hp:150,ap:60,
skills:{6003:{uuid:6003,lv:1,cd:1,ccd:0}},revive:{s_uuid:6501,r_num:1,upr:0.5},info:""},
5102:{uuid:5102,name:"火焰法师",path:"hm1", fac:FacSet.HERO,cards_lv:2,lv:1,type:HType.Long,hp:130,ap:120,
skills:{6003:{uuid:6003,lv:1,cd:1,ccd:0}},info:""},
5103:{uuid:5103,name:"冰法法师",path:"hm3", fac:FacSet.HERO,cards_lv:3,lv:1,type:HType.Long,hp:145,ap:180,
skills:{6003:{uuid:6003,lv:1,cd:1,ccd:0}},info:""},
5104:{uuid:5104,name:"寒霜术士",path:"hm5", fac:FacSet.HERO,cards_lv:4,lv:1,type:HType.Long,hp:160,ap:240,
skills:{6003:{uuid:6003,lv:1,cd:1,ccd:0}},info:""},
5105:{uuid:5105,name:"炎爆法师",path:"hm4", fac:FacSet.HERO,cards_lv:5,lv:1,type:HType.Long,hp:175,ap:300,
skills:{6003:{uuid:6003,lv:1,cd:1,ccd:0}},info:"" },
// ========== 远程英雄 ==========
5201:{uuid:5201,name:"射手",path:"ha1", fac:FacSet.HERO,cards_lv:1,lv:1,type:HType.Long,hp:115,ap:60,
skills:{6005:{uuid:6005,lv:1,cd:0.9,ccd:0}},info:""},
5202:{uuid:5202,name:"游侠2",path:"ha2", fac:FacSet.HERO,cards_lv:3,lv:1,type:HType.Long,hp:145,ap:180,
skills:{6005:{uuid:6005,lv:1,cd:0.9,ccd:0}},info:""},
5203:{uuid:5203,name:"游侠3",path:"ha3", fac:FacSet.HERO,cards_lv:3,lv:1,type:HType.Long,hp:145,ap:180,
skills:{6005:{uuid:6005,lv:1,cd:0.9,ccd:0}},info:""},
5204:{uuid:5204,name:"游侠4",path:"ha4", fac:FacSet.HERO,cards_lv:3,lv:1,type:HType.Long,hp:145,ap:180,
skills:{6005:{uuid:6005,lv:1,cd:0.9,ccd:0}},info:""},
// ========== 辅助英雄 ==========
5301:{uuid:5301,name:"牧师",path:"hh1", fac:FacSet.HERO,cards_lv:1,lv:1,type:HType.Long,hp:115,ap:50,
skills:{6004:{uuid:6004,lv:1,cd:1.2,ccd:0}},atking:[{s_uuid:6302,t_num:2}],info:"" },
5302:{uuid:5302,name:"医师",path:"hh2", fac:FacSet.HERO,cards_lv:2,lv:1,type:HType.Long,hp:130,ap:50,
skills:{6004:{uuid:6004,lv:1,cd:1.2,ccd:0}}, atking:[{s_uuid:6302,t_num:2,overrides:{hit_count:3,ap:200}}],info:""},
// ========== 辅助英雄 ==========
5401:{uuid:5401,name:"刺客1",path:"hc1", fac:FacSet.HERO,cards_lv:1,lv:1,type:HType.Long,hp:115,ap:50,
skills:{6006:{uuid:6006,lv:1,cd:1.2,ccd:0}},atking:[{s_uuid:6302,t_num:2}],info:"" },
5402:{uuid:5402,name:"刺客2",path:"hc2", fac:FacSet.HERO,cards_lv:2,lv:1,type:HType.Long,hp:130,ap:50,
skills:{6006:{uuid:6006,lv:1,cd:1.2,ccd:0}},atking:[{s_uuid:6304,t_num:2}],info:""},
/*
*=============怪物配置列表================
* 基础近战型(lv:1) SPEED:800 |AP:12 | HP:360 | skills[0].cd=0.65
* 重型坦克型(lv:1) SPEED:800 |AP:30 | HP:1050 | skills[0].cd=2
* 远程dps(lv:1) SPEED:800 |AP:45 | HP:240 | skills[0].cd=1.5
* 远程辅助(lv:1) SPEED:800 |AP:20 | HP:240 | skills[0].cd=1
* 精英 (lv:1) SPEED:800 |AP:20 | HP:4500 | skills[0].cd=1
*/
// 基础怪物
6001:{uuid:6001,name:"兽人初阶战士",path:"m1", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Melee,dis:360,hp:360,ap:12,speed:100,
skills:{6005:{uuid:6005,lv:1,cd:0.65,ccd:0}},info:""},
6002:{uuid:6002,name:"兽人高阶战士",path:"m2", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Melee,dis:360,hp:360,ap:12,speed:100,
skills:{6005:{uuid:6005,lv:1,cd:0.65,ccd:0}},info:""},
6003:{uuid:6003,name:"兽人初阶射手",path:"m3", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Melee,dis:360,hp:1050,ap:30,speed:100,
skills:{6008:{uuid:6008,lv:1,cd:2,ccd:0}},info:""},
6004:{uuid:6004,name:"兽人高阶射手",path:"m4", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Long,hp:720,ap:45,speed:100,
skills:{6008:{uuid:6008,lv:1,cd:1.5,ccd:0}},info:""},
6005:{uuid:6005,name:"兽人刺客",path:"m5", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Long,hp:720,ap:20,speed:100,
skills:{6103:{uuid:6103,lv:1,cd:1.5,ccd:0}},info:""},
6006:{uuid:6006,name:"骷髅高阶战士",path:"m6", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Melee,dis:360,hp:4500,ap:20,speed:100,
skills:{6005:{uuid:6005,lv:1,cd:2,ccd:0}},info:""},
6007:{uuid:6007,name:"兽人蓝色法师",path:"m7", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Melee,dis:360,hp:4500,ap:20,speed:100,
skills:{6103:{uuid:6103,lv:1,cd:2,ccd:0}},info:""},
6008:{uuid:6008,name:"兽人红色法师",path:"m8", fac:FacSet.MON,cards_lv:1,lv:1,type:HType.Melee,dis:360,hp:4500,ap:20,speed:100,
skills:{6103:{uuid:6103,lv:1,cd:2,ccd:0}},info:""},
// BOSS怪物
6101:{uuid:6101,name:"兽人首领-双刀战士-蓝边",path:"mb1", fac:FacSet.MON,cards_lv:1,lv:6,type:HType.Long,hp:720,ap:30,speed:100,
skills:{6103:{uuid:6103,lv:1,cd:2,ccd:0},6206:{uuid:6206,lv:1,cd:10,ccd:0}},info:""},
6102:{uuid:6102,name:"兽人首领-斧头战士-绿边",path:"mb2", fac:FacSet.MON,cards_lv:1,lv:6,type:HType.Melee,dis:360,hp:4500,ap:20,speed:100,
skills:{6005:{uuid:6005,lv:1,cd:2,ccd:0},},info:""},
6103:{uuid:6103,name:"兽人首领-魔法师-紫边",path:"mb3", fac:FacSet.MON,cards_lv:1,lv:6,type:HType.Long,hp:720,ap:30,speed:100,
skills:{6103:{uuid:6103,lv:1,cd:2,ccd:0},6206:{uuid:6206,lv:1,cd:10,ccd:0}},info:""},
6104:{uuid:6104,name:"兽人首领-射手-黄边",path:"mb4", fac:FacSet.MON,cards_lv:1,lv:6,type:HType.Melee,dis:360,hp:4500,ap:20,speed:100,
skills:{6005:{uuid:6005,lv:1,cd:2,ccd:0},},info:""},
6105:{uuid:6105,name:"亡灵首领-法师-红边",path:"mb5", fac:FacSet.MON,cards_lv:1,lv:6,type:HType.Long,hp:720,ap:30,speed:100,
skills:{6103:{uuid:6103,lv:1,cd:2,ccd:0},6206:{uuid:6206,lv:1,cd:10,ccd:0}},info:""},
6106:{uuid:6106,name:"亡灵首领-骑马战士-红边",path:"mb6", fac:FacSet.MON,cards_lv:1,lv:6,type:HType.Melee,dis:360,hp:4500,ap:20,speed:100,
skills:{6005:{uuid:6005,lv:1,cd:2,ccd:0},},info:""},
};
export const HeroList: number[] = [
5001, 5002, 5003, 5004, 5005,
5101, 5102, 5103, 5104, 5105,
5201, 5202,5203,5204,
5301, 5302,
5401, 5402,
];