// ========== 从 HeroAttrs.ts 导入属性相关定义 ========== import { Attrs } from "./HeroAttrs"; import { oops } from "db://oops-framework/core/Oops"; class I18nString { constructor(private key: string, private params?: any[]) {} private getTranslated(): string { let str = oops.language.getLangByID(this.key) || this.key; if (this.params && this.params.length > 0) { for (let i = 0; i < this.params.length; i++) { str = str.replace(`{${i}}`, String(this.params[i])); } } return str; } toString() { return this.getTranslated(); } valueOf() { return this.getTranslated(); } toJSON() { return this.getTranslated(); } get length() { return this.toString().length; } } export const t = (key: string, ...params: any[]) => new I18nString(key, params) as unknown as string; export enum HSSet { atk = 0, // 普通攻击 skill = 1, // 一般技能 max = 2, // 必杀技 } export enum TGroup { Self = 0, // 自身 Ally = 1, // 所有友方,包括自己 Team = 2, // 所有友方 Enemy = 3, // 敌方单位 All = 4 // 所有单位 } export enum DTType { single = 0, range = 1, } export enum SkillKind { Damage = 0, Heal = 1, Shield = 2, Support = 3 } //受伤动画名称 export enum AtkedName { atked = "atked", ice = "atked_ice", fire = "atked_fire", wind = "atked_wind", crit = "atked_crit", } export enum RType { linear = 0, //直线 bezier = 1, //贝塞尔 fixed = 2, //固定起点 fixedEnd = 3, //固定终点 } //EType 只负责动画什么时候结束,碰撞体什么时候消失不管,但是消失前一定要关闭碰撞体 export enum EType { animationEnd = 0, //碰撞够也不消失,动画结束才消失 timeEnd = 1, //碰撞够也不消失,时间到才消失 collision = 2, //碰撞次数够就消失 } //debuff类型 /* === 技能配置系统使用说明 === 1. 基础属性: - uuid: 技能唯一ID - name: 技能名称 - sp_name: 特效名称 - AtkedName: 攻击类型 - path: 图片资源路径 2. 目标和效果: - TGroup: 目标群体 (敌方、友方等) - SType: 技能类型 (伤害、治疗、护盾等) 3. 执行参数: - act: 角色执行的动画 - DTType: 伤害类型 (单体、范围) - EType: 结束条件 - fname: 特效文件名 - with: 暂时无用 4. 数值参数: - ap: 攻击力百分比 - cd: 冷却时间 - hit_count: 可命中次数 - t_num: 目标数量 - hitcd: 持续伤害的伤害间隔 - speed: 移动速度 - cost: 消耗值 */ export enum DType { ATK= 0, // 物理 ICE=1, // 冰元素 FIRE=2, // 火元素 WIND=3, // 风元素 } export enum IType { Melee = 0, // 近战 remote = 1, // 远程 support = 2, // 辅助 } export const HeroSkillList = [6001,6001,6001,6001,6001,6001] // Debuff配置接口 export interface BuffConf { buff:Attrs; value:number; // 效果值 } interface IReady { uuid:number, loop: boolean, SkillTime: number,// 技能控制存续时间时间 ReadyTime: number,// 技能前摇时间 RType: number, //技能运行类型 0-线性 1-贝塞尔 2-开始位置固定 3-目标位置固定 ready_y: number, path:string, } interface IEndAnm { uuid:number, path:string, loop:boolean, time:number, } // 技能配置接口 - 按照6001格式排列 export interface SkillConfig { uuid:number, // 技能唯一ID name:string, // 技能名称 sp_name:string, // 特效名称 icon:string, // 图标ID TGroup:TGroup, // 目标群体(敌方/友方/自身等) act:string, // 角色执行的动画 DTType:DTType, // 伤害类型(单体/范围) ap:number, // 伤害/治疗技能为攻击百分比,护盾技能为免疫次数 hit_count:number, // 可命中次数 hitcd:number, // 持续伤害的伤害间隔(秒) speed:number, // 移动速度 with:number, // 宽度(暂时无用) ready:number, // 前摇时间 readyAnm:string, // 前摇动画名称 endAnm:string, // 结束动画名称 EAnm:number, // 结束动画ID DAnm:string, // 命中后动画ID IType:IType, // 技能类型(近战/远程/辅助) RType:RType, // 技能运行类型(直线/贝塞尔/固定起点/固定终点) EType:EType, // 结束条件(动画结束/时间结束/距离结束/碰撞/次数结束) bezier_start_y?:number, // 贝塞尔起始抬升高度 bezier_mid_y?:number, // 贝塞尔中间高度增量 bezier_arc?:number, // 贝塞尔弧度系数 time?:number, // timeEnd 持续时间(秒) kind?:SkillKind, // 主效果类型 crt?:number, // 额外暴击率 frz?:number, // 额外冰冻概率 bck?:number, // 额外击退概率 buffs:BuffConf[], // 对目标应用的 buff 配置列表 call_hero?:number, // 召唤技能召唤英雄id(可选) info:string, // 技能描述 } export const SkillUpList = { 1001:{ap:0,hit_count:0,buff_ap:0,buff_hp:0,bck:0,frz:0,crt:0,num:0} } /****** * * 射箭类技能 带暴击属性 * 火法技能 带击退属性 * 冰法技能 带冰冻属性 * */ export const SkillSet: Record = { // ========== 基础技能 ========== 6001: { uuid:6001,name:t("skill_name_6001"),sp_name:"atk",icon:"1026",TGroup:TGroup.Enemy,readyAnm:"",endAnm:"",act:"atk", DTType:DTType.single,ap:100,hit_count:1,hitcd:0.2,speed:720,with:0,ready:0.2,EAnm:0,DAnm:"",IType:IType.Melee, RType:RType.linear,EType:EType.collision,buffs:[],info:t("skill_info_6001", 1, 100), }, 6002: { uuid:6002,name:t("skill_name_6002"),sp_name:"ball_fire",icon:"1126",TGroup:TGroup.Enemy,readyAnm:"",endAnm:"",act:"atk", DTType:DTType.single,frz:0,ap:100,hit_count:1,hitcd:0.3,speed:720,with:90,ready:0.2,EAnm:0,DAnm:"",IType:IType.remote, RType:RType.bezier,EType:EType.collision,buffs:[],info:t("skill_info_6002", 1, 100), }, 6003: { uuid:6003,name:t("skill_name_6003"),sp_name:"ball_winds",icon:"1126",TGroup:TGroup.Enemy,readyAnm:"",endAnm:"",act:"atk", DTType:DTType.single,ap:100,hit_count:1,hitcd:0.3,speed:720,with:90,ready:0.2,EAnm:0,DAnm:"",IType:IType.remote, RType:RType.bezier,EType:EType.collision,buffs:[],info:t("skill_info_6003", 1, 100), }, 6004: { uuid:6004,name:t("skill_name_6004"),sp_name:"ball_zi",icon:"1126",TGroup:TGroup.Enemy,readyAnm:"",endAnm:"",act:"atk", DTType:DTType.single,ap:100,hit_count:1,hitcd:0.3,speed:720,with:90,ready:0.2,EAnm:0,DAnm:"",IType:IType.remote, RType:RType.linear,EType:EType.collision,buffs:[],info:t("skill_info_6004", 1, 100), }, 6005: { uuid:6005,name:t("skill_name_6005"),sp_name:"arrow",icon:"1135",TGroup:TGroup.Enemy,readyAnm:"",endAnm:"",act:"atk", DTType:DTType.single,ap:100,hit_count:1,hitcd:0.2,speed:720,with:0,ready:0.2,EAnm:0,DAnm:"",IType:IType.remote, RType:RType.bezier,EType:EType.collision,bezier_start_y:20,bezier_mid_y:140,bezier_arc:1.05,buffs:[],info:t("skill_info_6005", 1, 100), }, 6007: { uuid:6007,name:t("skill_name_6007"),sp_name:"ball_forst",icon:"1126",TGroup:TGroup.Enemy,readyAnm:"",endAnm:"",act:"atk", DTType:DTType.single,ap:100,hit_count:1,hitcd:0.3,speed:720,with:90,ready:0.2,EAnm:0,DAnm:"",IType:IType.remote, RType:RType.bezier,EType:EType.collision,buffs:[],info:t("skill_info_6007", 1, 100), }, 6008: { uuid:6007,name:t("skill_name_6008"),sp_name:"ball_water",icon:"1126",TGroup:TGroup.Enemy,readyAnm:"",endAnm:"",act:"atk", DTType:DTType.single,ap:100,hit_count:1,hitcd:0.3,speed:720,with:90,ready:0.2,EAnm:0,DAnm:"",IType:IType.remote, RType:RType.bezier,EType:EType.collision,buffs:[],info:t("skill_info_6008", 1, 100), }, //大招 6101: { uuid:6101,name:t("skill_name_6101"),sp_name:"atk_fire",icon:"1173",TGroup:TGroup.Enemy,readyAnm:"reds",endAnm:"",act:"max", DTType:DTType.single,bck:20,ap:150,hit_count:6,hitcd:0.2,speed:720,with:0,ready:0.2,EAnm:0,DAnm:"",IType:IType.Melee, RType:RType.fixed,EType:EType.animationEnd,buffs:[],info:t("skill_info_6101", 6, 150), }, 6102: { uuid:6102,name:t("skill_name_6102"),sp_name:"atk_s4",icon:"1173",TGroup:TGroup.Enemy,readyAnm:"yellow",endAnm:"",act:"max", DTType:DTType.single,crt:20,ap:150,hit_count:6,hitcd:0.2,speed:720,with:0,ready:0.2,EAnm:0,DAnm:"",IType:IType.Melee, RType:RType.fixed,EType:EType.animationEnd,buffs:[],info:t("skill_info_6102", 6, 150), }, 6103: { uuid:6103,name:t("skill_name_6103"),sp_name:"atk_fire",icon:"1173",TGroup:TGroup.Enemy,readyAnm:"reds",endAnm:"",act:"max", DTType:DTType.range,crt:20,ap:150,hit_count:6,hitcd:0.2,speed:720,with:0,ready:0.2,EAnm:0,DAnm:"",IType:IType.remote, RType:RType.fixed,EType:EType.animationEnd,buffs:[],info:t("skill_info_6103", 6, 150), }, 6104: { uuid:6104,name:t("skill_name_6104"),sp_name:"arrow_big_yellow",icon:"1135",TGroup:TGroup.Enemy,readyAnm:"yellow",endAnm:"",act:"max", DTType:DTType.single,crt:20,ap:100,hit_count:6,hitcd:0.2,speed:720,with:0,ready:0.2,EAnm:0,DAnm:"",IType:IType.remote, RType:RType.linear,EType:EType.collision,buffs:[],info:t("skill_info_6104", 6, 100), }, 6105: { uuid:6105,name:t("skill_name_6105"),sp_name:"atk_fire",icon:"1173",TGroup:TGroup.Enemy,readyAnm:"blues",endAnm:"",act:"max", DTType:DTType.range,frz:0,ap:150,hit_count:6,hitcd:0.2,speed:720,with:0,ready:0.2,EAnm:0,DAnm:"",IType:IType.remote, RType:RType.fixed,EType:EType.animationEnd,buffs:[],info:t("skill_info_6105", 6, 150), }, 6106: { uuid:6106,name:t("skill_name_6106"),sp_name:"atk_fire",icon:"1173",TGroup:TGroup.Enemy,readyAnm:"reds",endAnm:"",act:"max", DTType:DTType.range,bck:20,ap:150,hit_count:6,hitcd:0.2,speed:720,with:0,ready:0.2,EAnm:0,DAnm:"",IType:IType.remote, RType:RType.fixed,EType:EType.animationEnd,buffs:[],info:t("skill_info_6106", 6, 150), }, //============================= ====== 辅助技能 ====== ========================== 6301:{ uuid:6301,name:t("skill_name_6301"),sp_name:"buff_wind",icon:"1255",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, RType:RType.fixed,EType:EType.animationEnd,buffs:[],info:t("skill_info_6301", 3), }, 6302: { uuid:6302,name:t("skill_name_6302"),sp_name:"buff_wind",icon:"1292",TGroup:TGroup.Team,readyAnm:"up_green",endAnm:"",act:"atk", 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,buffs:[],info:t("skill_info_6302", 1, 300), }, 6303:{ uuid:6303,name:t("skill_name_6303"),sp_name:"buff_wind",icon:"1255",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, RType:RType.fixed,EType:EType.animationEnd,buffs:[],info:t("skill_info_6303", 3), }, 6304: { uuid:6304,name:t("skill_name_6304"),sp_name:"buff_wind",icon:"1292",TGroup:TGroup.Team,readyAnm:"up_green",endAnm:"",act:"atk", DTType:DTType.single,kind:SkillKind.Heal,ap:200,hit_count:3,hitcd:0.2,speed:720,with:0,ready:0.2,EAnm:0,DAnm:"",IType:IType.support, RType:RType.fixed,EType:EType.animationEnd,buffs:[],info:t("skill_info_6304", 3, 200), }, 6305:{ uuid:6305,name:t("skill_name_6305"),sp_name:"buff_wind",icon:"1255",TGroup:TGroup.Team,readyAnm:"up_blue",endAnm:"",act:"atk", DTType:DTType.single,kind:SkillKind.Shield,ap:2,hit_count:3,hitcd:0.2,speed:720,with:0,ready:0.2,EAnm:0,DAnm:"",IType:IType.support, RType:RType.fixed,EType:EType.animationEnd,buffs:[],info:t("skill_info_6305", 3, 2), }, //==========================buff 技能===================== 6401:{ uuid:6401,name:t("skill_name_6401"),sp_name:"buff_wind",icon:"1255",TGroup:TGroup.Team,readyAnm:"up_ap",endAnm:"",act:"atk", DTType:DTType.single,kind:SkillKind.Support,ap:0,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,buffs:[{buff:Attrs.ap,value:5}],info:t("skill_info_6401", 1, 5), }, 6402:{ uuid:6402,name:t("skill_name_6402"),sp_name:"buff_wind",icon:"1255",TGroup:TGroup.Team,readyAnm:"up_hp",endAnm:"",act:"atk", DTType:DTType.single,kind:SkillKind.Support,ap:0,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,buffs:[{buff:Attrs.hp_max,value:20}],info:t("skill_info_6402", 1, 20), }, 6403:{ uuid:6403,name:t("skill_name_6403"),sp_name:"buff_wind",icon:"1255",TGroup:TGroup.Team,readyAnm:"up_hp",endAnm:"",act:"atk", DTType:DTType.single,kind:SkillKind.Support,ap:0,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,buffs:[{buff:Attrs.ap,value:5},{buff:Attrs.hp_max,value:20}],info:t("skill_info_6403", 1, 5, 20), }, 6404:{ uuid:6404,name:t("skill_name_6404"),sp_name:"buff_wind",icon:"1255",TGroup:TGroup.Team,readyAnm:"up_ap",endAnm:"",act:"atk", DTType:DTType.single,kind:SkillKind.Support,ap:0,hit_count:3,hitcd:0.2,speed:720,with:0,ready:0.2,EAnm:0,DAnm:"",IType:IType.support, RType:RType.fixed,EType:EType.animationEnd,buffs:[{buff:Attrs.ap,value:2}],info:t("skill_info_6404", 3, 2), }, 6405:{ uuid:6405,name:t("skill_name_6405"),sp_name:"buff_wind",icon:"1255",TGroup:TGroup.Team,readyAnm:"up_hp",endAnm:"",act:"atk", DTType:DTType.single,kind:SkillKind.Support,ap:0,hit_count:3,hitcd:0.2,speed:720,with:0,ready:0.2,EAnm:0,DAnm:"",IType:IType.support, RType:RType.fixed,EType:EType.animationEnd,buffs:[{buff:Attrs.hp_max,value:10}],info:t("skill_info_6405", 3, 10), }, 6406:{ uuid:6406,name:t("skill_name_6406"),sp_name:"buff_wind",icon:"1255",TGroup:TGroup.Team,readyAnm:"up_ap",endAnm:"",act:"atk", DTType:DTType.single,kind:SkillKind.Support,ap:0,hit_count:3,hitcd:0.2,speed:720,with:0,ready:0.2,EAnm:0,DAnm:"",IType:IType.support, RType:RType.fixed,EType:EType.animationEnd,buffs:[{buff:Attrs.ap,value:2},{buff:Attrs.hp_max,value:10}],info:t("skill_info_6406", 3, 2, 10), }, 6501:{ uuid:6501,name:t("skill_name_6501"),sp_name:"buff_wind",icon:"1255",TGroup:TGroup.Self,readyAnm:"up_ap",endAnm:"",act:"atk", DTType:DTType.single,kind:SkillKind.Support,ap:50,hit_count:3,hitcd:0.2,speed:720,with:0,ready:0.2,EAnm:0,DAnm:"",IType:IType.support, RType:RType.fixed,EType:EType.animationEnd,buffs:[],info:t("skill_info_6501", 50), } }; export enum FieldSkillType { SummonCount = 1, // 召唤触发技能次数提升 DeadCount = 2, // 死亡触发技能次数提升 StartCount = 3, // 战斗开始触发技能次数提升 EndCount = 4, // 战斗结束触发技能次数提升 WaveGold = 5, // 每回合金币收益提升 SellGold = 6, // 卖出英雄金币提升 WaveHeal = 7, // 战斗结束生命回复量提升 HeroAtk = 8, // 英雄攻击力加成 } export interface FieldSkillConfig { uuid: number; name: string; type: FieldSkillType; value: number; // 提升的数值 info: string; } export const FieldSkillSet: Record = { 7001: { uuid: 7001, name: t("fskill_name_7001"), type: FieldSkillType.SummonCount, value: 1, info: t("fskill_info_7001", 1) }, 7002: { uuid: 7002, name: t("fskill_name_7002"), type: FieldSkillType.DeadCount, value: 1, info: t("fskill_info_7002", 1) }, 7003: { uuid: 7003, name: t("fskill_name_7003"), type: FieldSkillType.StartCount, value: 1, info: t("fskill_info_7003", 1) }, 7004: { uuid: 7004, name: t("fskill_name_7004"), type: FieldSkillType.EndCount, value: 1, info: t("fskill_info_7004", 1) }, 7005: { uuid: 7005, name: t("fskill_name_7005"), type: FieldSkillType.WaveGold, value: 10, info: t("fskill_info_7005", 10) }, 7006: { uuid: 7006, name: t("fskill_name_7006"), type: FieldSkillType.SellGold, value: 5, info: t("fskill_info_7006", 5) }, 7007: { uuid: 7007, name: t("fskill_name_7007"), type: FieldSkillType.WaveHeal, value: 0.3, info: t("fskill_info_7007", 30) }, 7008: { uuid: 7008, name: t("fskill_name_7008"), type: FieldSkillType.HeroAtk, value: 0.2, info: t("fskill_info_7008", 20) }, };