From 95edd6fd6d48973cc8d55ad7a0d1674908edf1e3 Mon Sep 17 00:00:00 2001 From: panw Date: Mon, 16 Mar 2026 15:54:49 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=AE=80=E5=8C=96=E6=94=BB?= =?UTF-8?q?=E5=87=BB=E8=B7=9D=E7=A6=BB=E4=B8=8E=E8=81=8C=E4=B8=9A=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除 SkillRange 枚举和 SkillDisVal 常量,统一使用 HType 表示攻击距离 - 删除 heroInfo 中的 rangeType 字段,直接使用 type 字段 - 更新英雄配置,将职业类型简化为近战、中程、远程三类 - 移除怪物属性中的 mp 和 def 字段,简化属性计算 - 更新移动和技能距离计算逻辑,直接使用 HType 判断 --- assets/script/game/common/config/SkillSet.ts | 18 ---- assets/script/game/common/config/heroSet.ts | 96 ++++++++------------ assets/script/game/hero/Hero.ts | 3 +- assets/script/game/hero/HeroAttrsComp.ts | 27 ++---- assets/script/game/hero/MoveComp.ts | 36 ++------ assets/script/game/map/RogueConfig.ts | 10 +- 6 files changed, 54 insertions(+), 136 deletions(-) diff --git a/assets/script/game/common/config/SkillSet.ts b/assets/script/game/common/config/SkillSet.ts index 1a34ab19..1d24d75b 100644 --- a/assets/script/game/common/config/SkillSet.ts +++ b/assets/script/game/common/config/SkillSet.ts @@ -53,25 +53,7 @@ export enum BuffRunType { Interval = 2 } -/** - * 攻击距离类型分类 - * 用于AI决策和技能配置规范化 - */ -export enum SkillRange { - /** 近战: < 150 (贴脸输出) */ - Melee = 0, - /** 中程: 150 - 400 (投掷/短法术) */ - Mid = 1, - /** 远程: > 400 (弓箭/长法术) */ - Long = 2 -} -/** 距离类型的标准数值定义 */ -export const SkillDisVal: Record = { - [SkillRange.Melee]: 150, - [SkillRange.Mid]: 400, - [SkillRange.Long]: 720 -}; //受伤动画名称 export enum AtkedName { diff --git a/assets/script/game/common/config/heroSet.ts b/assets/script/game/common/config/heroSet.ts index 777ed26a..40690338 100644 --- a/assets/script/game/common/config/heroSet.ts +++ b/assets/script/game/common/config/heroSet.ts @@ -1,26 +1,22 @@ import { v3 } from "cc" import { BoxSet, FacSet } from "./GameSet" import { smc } from "../SingletonModuleComp" -import { BuffConf, SkillRange } from "./SkillSet" +import { BuffConf } from "./SkillSet" import { Interface } from "readline" export enum AttrSet { ATTR_MAX = 85, } export enum HType { - warrior = 0, - remote = 1, - mage = 2, - support = 3, - assassin = 4, + Melee = 0, + Mid = 1, + Long = 2, } export const HTypeName ={ - 0:"战士", - 1:"远程", - 2:"法师", - 3:"辅助", - 4:"刺客", + 0:"近战", + 1:"中程", + 2:"远程", } //fac:FacSet.HERO @@ -53,20 +49,19 @@ export const HeroPos={ } export const FormationPointX = { - [SkillRange.Melee]: 0, - [SkillRange.Mid]: 100, - [SkillRange.Long]: 180, + [HType.Melee]: 0, + [HType.Mid]: 100, + [HType.Long]: 180, } as const; -export const resolveRangeTypeByHeroType = (type: HType, rangeType?: SkillRange | null): SkillRange => { - if (rangeType !== undefined && rangeType !== null) return rangeType; - if (type === HType.warrior || type === HType.assassin) return SkillRange.Melee; - if (type === HType.remote) return SkillRange.Long; - return SkillRange.Mid; +export const HeroDisVal: Record = { + [HType.Melee]: 150, + [HType.Mid]: 400, + [HType.Long]: 720, } -export const resolveFormationTargetX = (fac: FacSet, type: HType, rangeType?: SkillRange | null): number => { - const resolvedRangeType = resolveRangeTypeByHeroType(type, rangeType); +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; } @@ -120,11 +115,9 @@ export enum HRegen { * 刺客:极低血量成长,极高攻击成长 */ export const JobUpConf: Record = { - [HType.warrior]: { hp: 50, ap: 3, def: 3 }, - [HType.remote]: { hp: 25, ap: 7, def: 1 }, - [HType.mage]: { hp: 20, ap: 8, def: 1 }, - [HType.support]: { hp: 35, ap: 4, def: 2 }, - [HType.assassin]: { hp: 18, ap: 9, def: 0 }, + [HType.Melee]: { hp: 50, ap: 5, def: 2 }, + [HType.Mid]: { hp: 30, ap: 6, def: 1 }, + [HType.Long]: { hp: 25, ap: 7, def: 1 }, }; /** @@ -139,12 +132,11 @@ export interface heroInfo { kind: number; // 未使用 as: number; // 攻击间隔(越小越快) ss:number; // 技能间隔 - type: HType; // 职业定位(战士/远程/法师/辅助/刺客) + type: HType; // 攻击定位(近战/中程/远程) lv: number; // 初始等级 hp: number; // 生命值上限 ap: number; // 攻击力 // dis: number; // 攻击距离(像素) - rangeType: SkillRange; // 攻击距离类型 (近/中/远) speed: number; // 移动速度(像素/秒) skills: number[]; // 携带技能ID列表 buff: BuffConf[]; // 自带buff配置(通常为空,由技能动态添加) @@ -166,38 +158,31 @@ export const HeroInfo: Record = { // ========== 英雄角色 ========== 5001:{uuid:5001,name:"盾战士",icon:"1001",path:"hk1", fac:FacSet.HERO, kind:1,as:1,ss:5, - type:HType.warrior,lv:1,hp:300,ap:25,speed:120,skills:[6001,6004], - rangeType: SkillRange.Melee, + type:HType.Melee,lv:1,hp:300,ap:25,speed:120,skills:[6001,6004], buff:[],info:"盾战士"}, 5002:{uuid:5002,name:"奥术法师",icon:"1001",path:"hm2", fac:FacSet.HERO, kind:2,as:1,ss:5, - type:HType.mage,lv:1,hp:150,ap:40,speed:95,skills:[6003,6101], - rangeType: SkillRange.Long, + type:HType.Long,lv:1,hp:150,ap:40,speed:95,skills:[6003,6101], buff:[],info:"奥术法师"}, 5003:{uuid:5003,name:"射手",icon:"1001",path:"ha1", fac:FacSet.HERO, kind:2,as:1,ss:5, - type:HType.remote,lv:1,hp:180,ap:30,speed:140,skills:[6005,6006], - rangeType: SkillRange.Long, + type:HType.Long,lv:1,hp:180,ap:30,speed:140,skills:[6005,6006], buff:[],info:"射手"}, 5005:{uuid:5005,name:"牧师",icon:"1001",path:"hh1", fac:FacSet.HERO, kind:2,as:1,ss:5, - type:HType.mage,lv:1,hp:160,ap:25,speed:100,skills:[6003,6100], - rangeType: SkillRange.Mid, + type:HType.Long,lv:1,hp:160,ap:25,speed:100,skills:[6003,6100], buff:[],info:"牧师"}, 5004:{uuid:5004,name:"火焰法师",icon:"1001",path:"hm1", fac:FacSet.HERO, kind:2,as:1,ss:5, - type:HType.mage,lv:1,hp:150,ap:45,speed:90,skills:[6003,6101], - rangeType: SkillRange.Mid, + type:HType.Long,lv:1,hp:150,ap:45,speed:90,skills:[6003,6101], buff:[],info:"火焰法师"}, 5006:{uuid:5006,name:"召唤法师",icon:"1001",path:"hz1", fac:FacSet.HERO, kind:2,as:1,ss:5, - type:HType.support,lv:1,hp:200,ap:20,speed:105,skills:[6003,6101], - rangeType: SkillRange.Mid, + type:HType.Long,lv:1,hp:200,ap:20,speed:105,skills:[6003,6101], buff:[],info:"召唤法师"}, 5007:{uuid:5007,name:"刺客",icon:"1001",path:"hc1", fac:FacSet.HERO, kind:1,as:1,ss:5, - type:HType.assassin,lv:1,hp:140,ap:50,speed:180,skills:[6001,6004], - rangeType: SkillRange.Melee, + type:HType.Melee,lv:1,hp:140,ap:50,speed:180,skills:[6001,6004], buff:[],info:"刺客"}, @@ -205,50 +190,41 @@ export const HeroInfo: Record = { // 1. 基础近战型 5201:{uuid:5201,name:"兽人战士",icon:"1001",path:"mo1", fac:FacSet.MON, kind:1,as:3.0,ss:10, - type:HType.warrior,lv:1,hp:60,ap:8,speed:180,skills:[6003], - rangeType: SkillRange.Melee, + type:HType.Melee,lv:1,hp:60,ap:8,speed:180,skills:[6003], buff:[],info:"标准炮灰:确保英雄能完成3次普攻积累天赋计数"}, // 2. 快速突击型 5301:{uuid:5301,name:"兽人斥候",icon:"1001",path:"mo1", fac:FacSet.MON, kind:1,as:1.2,ss:10, - type:HType.assassin,lv:1,hp:40,ap:12,speed:400,skills:[6003], - rangeType: SkillRange.Melee, + type:HType.Melee,lv:1,hp:40,ap:12,speed:400,skills:[6003], buff:[],info:"快速突击:极高移速贴脸,检测护盾(7102)刷新率"}, // 3. 重型坦克型 5401:{uuid:5401,name:"兽人卫士",icon:"1001",path:"mo3", fac:FacSet.MON, kind:1,as:5.0,ss:10, - type:HType.warrior,lv:1,hp:200,ap:15,speed:60,skills:[6003], - rangeType: SkillRange.Melee, + type:HType.Melee,lv:1,hp:200,ap:15,speed:60,skills:[6003], buff:[],info:"重型坦克:数值墙,检测玩家破甲(7008)与持续输出"}, // 4. 远程骚扰型 5501:{uuid:5501,name:"兽人射手",icon:"1001",path:"mo1", fac:FacSet.MON, kind:1,as:3.0,ss:10, - type:HType.remote,lv:1,hp:50,ap:10,speed:90,skills:[6203], - rangeType: SkillRange.Melee, + type:HType.Long,lv:1,hp:50,ap:10,speed:90,skills:[6203], buff:[],info:"远程骚扰:跨屏打击,迫使阵地分散或移动英雄"}, // 5. 特殊机制型 5601:{uuid:5601,name:"兽人自爆兵",icon:"1001",path:"mo1", fac:FacSet.MON, kind:1,as:3.0,ss:10, - type:HType.assassin,lv:1,hp:80,ap:200,speed:220,skills:[6003], - rangeType: SkillRange.Melee, + type:HType.Melee,lv:1,hp:80,ap:200,speed:220,skills:[6003], buff:[],info:"特殊机制:极端伤害,漏怪即秒杀,检测减伤(7103)"}, // 召唤师:持续召唤小怪(后续可在技能系统中实现 SType.zhaohuan) 5602:{uuid:5602,name:"兽人召唤师",icon:"1001",path:"mo1", fac:FacSet.MON, kind:1,as:3.0,ss:10, - type:HType.mage,lv:1,hp:150,ap:10,speed:100,skills:[6003], - rangeType: SkillRange.Melee, + type:HType.Long,lv:1,hp:150,ap:10,speed:100,skills:[6003], buff:[],info:"战术目标:持续召唤小怪,检测英雄大招清场频率"}, // 治疗者:为周围怪物回血(此处以提升治疗效果和生命回复为基础被动) 5603:{uuid:5603,name:"兽人祭司",icon:"1001",path:"mo1", fac:FacSet.MON, kind:1,as:3.0,ss:10, - type:HType.support,lv:1,hp:150,ap:10,speed:105,skills:[6003], - rangeType: SkillRange.Melee, + type:HType.Long,lv:1,hp:150,ap:10,speed:105,skills:[6003], buff:[],info:"战术目标:为怪群回血,检测玩家沉默(7006)覆盖率"}, // 光环怪:为周围怪物提供增益(此处以Buff效果提升与移动速度提升为基础被动) // Attrs.BUFF_UP=60 (RATIO=1),Attrs.SPEED=63 (RATIO=1) 5604:{uuid:5604,name:"兽人图腾师",icon:"1001",path:"mo1", fac:FacSet.MON, kind:1,as:3.0,ss:10, - type:HType.support,lv:1,hp:150,ap:10,speed:110,skills:[6003], - rangeType: SkillRange.Melee, + type:HType.Long,lv:1,hp:150,ap:10,speed:110,skills:[6003], buff:[],info:"战术目标:提供加速光环,改变怪群推进节奏"}, // 6. 精英/BOSS型 5701:{uuid:5701,name:"兽人首领(BOSS)",icon:"1001",path:"mo4", fac:FacSet.MON, kind:1,as:2.5,ss:10, - type:HType.warrior,lv:3,hp:2000,ap:60,speed:120,skills:[6003], - rangeType: SkillRange.Melee, + type:HType.Melee,lv:3,hp:2000,ap:60,speed:120,skills:[6003], buff:[],info:"终极考验:极高HP,检测大招重置与辐射协同输出"}, }; diff --git a/assets/script/game/hero/Hero.ts b/assets/script/game/hero/Hero.ts index 6db39b72..4e88a2d2 100644 --- a/assets/script/game/hero/Hero.ts +++ b/assets/script/game/hero/Hero.ts @@ -70,7 +70,6 @@ export class Hero extends ecs.Entity { model.lv = hero.lv ? hero.lv : 1; model.type = hero.type; model.fac = FacSet.HERO; - model.rangeType = hero.rangeType; // 只有主角才挂载天赋组件 // ✅ 初始化技能数据(迁移到 HeroSkillsComp) @@ -95,7 +94,7 @@ export class Hero extends ecs.Entity { oops.message.dispatchEvent(GameEvent.MasterCalled,{uuid:uuid}) const move = this.get(MoveComp); move.direction = 1; // 向右移动 - move.targetX = resolveFormationTargetX(model.fac, model.type, model.rangeType); + move.targetX = resolveFormationTargetX(model.fac, model.type); move.baseY = pos.y; smc.vmdata.mission_data.hero_num++ } diff --git a/assets/script/game/hero/HeroAttrsComp.ts b/assets/script/game/hero/HeroAttrsComp.ts index 9ab3c998..4266a4f6 100644 --- a/assets/script/game/hero/HeroAttrsComp.ts +++ b/assets/script/game/hero/HeroAttrsComp.ts @@ -1,7 +1,7 @@ import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS"; import { Attrs, BType } from "../common/config/HeroAttrs"; -import { BuffConf, BuffRunType, SkillDisVal, SkillRange } from "../common/config/SkillSet"; -import { HeroInfo, HType } from "../common/config/heroSet"; +import { BuffConf, BuffRunType } from "../common/config/SkillSet"; +import { HeroDisVal, HeroInfo, HType } from "../common/config/heroSet"; import { mLogger } from "../common/Logger"; import { smc } from "../common/SingletonModuleComp"; import { HeroViewComp } from "./HeroViewComp"; @@ -47,7 +47,6 @@ export class HeroAttrsComp extends ecs.Comp { lv: number = 1; type: number = 0; // 0近战 1远程 2辅助 fac: number = 0; // 0:hero 1:monster - rangeType:SkillRange = SkillRange.Melee; // ==================== 基础属性(有初始值) ==================== ap: number = 0; // 基础攻击 hp: number = 100; // 基础血量 @@ -451,22 +450,13 @@ export class HeroAttrsComp extends ecs.Comp { */ public updateSkillDistanceCache(skill_id:number): void { void skill_id; - let rangeType = this.rangeType; - if (rangeType === undefined || rangeType === null) { - if (this.type === HType.remote) { - rangeType = SkillRange.Long; - } else if (this.type === HType.mage || this.type === HType.support) { - rangeType = SkillRange.Mid; - } else { - rangeType = SkillRange.Melee; - } - } - const maxRange = SkillDisVal[rangeType]; + const rangeType = this.type as HType.Melee | HType.Mid | HType.Long; + const maxRange = HeroDisVal[rangeType]; let minRange = 0; - if (rangeType === SkillRange.Mid) { - minRange = SkillDisVal[SkillRange.Melee]; - } else if (rangeType === SkillRange.Long) { - minRange = SkillDisVal[SkillRange.Mid]; + if (rangeType === HType.Mid) { + minRange = HeroDisVal[HType.Melee]; + } else if (rangeType === HType.Long) { + minRange = HeroDisVal[HType.Mid]; } this.maxSkillDistance = maxRange; this.minSkillDistance = minRange; @@ -495,7 +485,6 @@ export class HeroAttrsComp extends ecs.Comp { this.lv = 1; this.type = 0; this.fac = 0; - this.rangeType = SkillRange.Melee; this.ap = 0; this.hp = 100; this.hp_max = 100; diff --git a/assets/script/game/hero/MoveComp.ts b/assets/script/game/hero/MoveComp.ts index a5b7f694..b3d92e5d 100644 --- a/assets/script/game/hero/MoveComp.ts +++ b/assets/script/game/hero/MoveComp.ts @@ -4,7 +4,6 @@ import { HeroAttrsComp } from "./HeroAttrsComp"; import { smc } from "../common/SingletonModuleComp"; import { FacSet } from "../common/config/GameSet"; import { HType, resolveFormationTargetX } from "../common/config/heroSet"; -import { SkillRange } from "../common/config/SkillSet"; import { Node } from "cc"; @ecs.register('MoveComp') @@ -94,25 +93,15 @@ export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate } private processCombatLogic(e: ecs.Entity, move: MoveComp, view: HeroViewComp, model: HeroAttrsComp, enemy: HeroViewComp) { - let rangeType = model.rangeType; - if (rangeType === undefined) { - if (model.type === HType.warrior || model.type === HType.assassin) { - rangeType = SkillRange.Melee; - } else if (model.type === HType.remote) { - rangeType = SkillRange.Long; - } else { - rangeType = SkillRange.Mid; - } - } - + const rangeType = model.type as HType.Melee | HType.Mid | HType.Long; switch (rangeType) { - case SkillRange.Melee: + case HType.Melee: this.processMeleeLogic(e, move, view, model, enemy); break; - case SkillRange.Mid: + case HType.Mid: this.processMidLogic(e, move, view, model, enemy); break; - case SkillRange.Long: + case HType.Long: this.processLongLogic(e, move, view, model, enemy); break; default: @@ -206,7 +195,7 @@ export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate } private getFixedFormationX(model: HeroAttrsComp): number { - return resolveFormationTargetX(model.fac, model.type, model.rangeType); + return resolveFormationTargetX(model.fac, model.type as HType); } private moveEntity(view: HeroViewComp, direction: number, speed: number, stopAtX?: number) { @@ -269,18 +258,9 @@ export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate } private getCombatPriority(model: HeroAttrsComp): number { - let rangeType = model.rangeType; - if (rangeType === undefined || rangeType === null) { - if (model.type === HType.warrior || model.type === HType.assassin) { - rangeType = SkillRange.Melee; - } else if (model.type === HType.remote) { - rangeType = SkillRange.Long; - } else { - rangeType = SkillRange.Mid; - } - } - if (rangeType === SkillRange.Melee) return 3; - if (rangeType === SkillRange.Mid) return 2; + const rangeType = model.type as HType.Melee | HType.Mid | HType.Long; + if (rangeType === HType.Melee) return 3; + if (rangeType === HType.Mid) return 2; return 1; } diff --git a/assets/script/game/map/RogueConfig.ts b/assets/script/game/map/RogueConfig.ts index dc9fa290..f806f0de 100644 --- a/assets/script/game/map/RogueConfig.ts +++ b/assets/script/game/map/RogueConfig.ts @@ -39,9 +39,7 @@ export interface IMonsConfig { */ export interface MonAttrs { hp: number; - mp: number; ap: number; - def: number; speed: number; exp?: number; gold?: number; @@ -285,7 +283,7 @@ export function getMonAttr(stage: number, uuid: number, monType: MonType = MonTy const baseMonster = HeroInfo[uuid]; if (!baseMonster) { mLogger.warn(true, 'RogueConfig', `[RogueConfig] 未找到怪物ID: ${uuid}`); - return { hp: 100, mp: 100, ap: 10, def: 0, speed: 100 }; + return { hp: 100, ap: 10, speed: 100 }; } // 计算波次因子 @@ -308,15 +306,9 @@ export function getMonAttr(stage: number, uuid: number, monType: MonType = MonTy const ap = applyGrowthFormula(baseMonster.ap, waveFactor, GrowthType.LINEAR) * typeMultiplier * qualityRatio; const speed = applyGrowthFormula(baseMonster.speed, waveFactor, GrowthType.LOGARITHMIC); - // MP和DEF使用线性成长 (应用质量系数) - const mp = applyGrowthFormula(baseMonster.mp, waveFactor, GrowthType.LINEAR) * qualityRatio; - const def = applyGrowthFormula(baseMonster.def, waveFactor, GrowthType.LINEAR) * typeMultiplier * qualityRatio; - return { hp: Math.floor(hp), - mp: Math.floor(mp), ap: Math.floor(ap), - def: Math.floor(def), speed: Math.floor(speed) }; }