刷怪完成

This commit is contained in:
panfudan
2025-08-12 15:54:56 +08:00
parent 61cbd6e7bd
commit 5dd354a86b
7 changed files with 465 additions and 1004 deletions

View File

@@ -86,7 +86,6 @@ export class Hero extends ecs.Entity {
hv.Attrs[BuffAttr.ATK_CD]=hv.cd=hero.cd
hv.Attrs[BuffAttr.HP_MAX]=hv.hp=hv.hp_max=hero.hp+info.hp
hv.Attrs[BuffAttr.AP]=hv.ap=hero.ap+info.ap;
hv.Attrs[BuffAttr.DEF]=hv.def=hero.def+info.def;
hero.buff.forEach((buff:any)=>{
hv.apply_buff(buff.type,buff.value)
})

View File

@@ -11,9 +11,6 @@ import { oops } from "db://oops-framework/core/Oops";
import { GameEvent } from "../common/config/GameEvent";
import { EquipSpecialAttr } from "../common/config/Equips";
import { FightSet, getExpDrops, getStoneDrops, TooltipTypes } from "../common/config/Mission";
import { getApIncrease, getHpIncrease, getUpExp, HeroInfo, HeroPos } from "../common/config/heroSet";
import { FriendModelComp } from "./FriendModel";
import { MasterModelComp } from "./MasterModel";
import { RandomManager } from "db://oops-framework/core/common/random/RandomManager";
import { EnhancementType } from "../common/config/LevelUp";
const { ccclass, property } = _decorator;
@@ -136,6 +133,7 @@ export class HeroViewComp extends CCComp {
start () {
this.as.idle()
this.BUFFCOMP=this.node.getComponent(BuffComp);
console.log("[HeroViewComp]:heroview"+this.hero_name,this.Attrs)
/** 方向 */
this.node.setScale(this.scale,1);
this.node.getChildByName("top").setScale(this.scale,1);
@@ -420,6 +418,7 @@ export class HeroViewComp extends CCComp {
if(is_crit) {
damage = Math.floor(damage * (1 + (FightSet.CRIT_DAMAGE+crit_d)/100))
}
console.log(this.hero_name+"[HeroViewComp]:heroview :damage|hp|hp_max",damage,this.hp,this.Attrs[BuffAttr.HP_MAX])
this.hp -= damage;
if(this.hp <= 0) {

View File

@@ -30,7 +30,7 @@ export class Monster extends ecs.Entity {
}
/** 加载角色 */
load(pos: Vec3 = Vec3.ZERO,scale:number = 1,uuid:number=1001,is_boss:boolean=false,is_call:boolean=false,lv:number=1,rogueBuffData?: any[], rogueHp?: number, rogueAttack?: number) {
load(pos: Vec3 = Vec3.ZERO,scale:number = 1,uuid:number=1001,is_boss:boolean=false,is_call:boolean=false,lv:number=1,enhancement?: any, stageMultipliers?: any) {
scale=-1
let box_group=BoxSet.MONSTER
console.log("mon load",uuid)
@@ -45,7 +45,7 @@ export class Monster extends ecs.Entity {
const collider = node.getComponent(BoxCollider2D);
if (collider) collider.enabled = false; // 先禁用 // 延迟一帧启用碰撞体
node.setPosition(pos)
this.hero_init(uuid,node,scale,box_group,is_boss,is_call,lv,rogueBuffData,rogueHp,rogueAttack)
this.hero_init(uuid,node,scale,box_group,is_boss,is_call,lv,enhancement,stageMultipliers)
oops.message.dispatchEvent("monster_load",this)
// 初始化移动参数
@@ -60,7 +60,7 @@ export class Monster extends ecs.Entity {
node.parent = scene.entityLayer!.node!
node.setPosition(pos)
}
hero_init(uuid:number=1001,node:Node,scale:number=1,box_group=BoxSet.HERO,is_boss:boolean=false,is_call:boolean=false,lv:number=1,rogueBuffData?: any[], rogueHp?: number, rogueAttack?: number) {
hero_init(uuid:number=1001,node:Node,scale:number=1,box_group=BoxSet.HERO,is_boss:boolean=false,is_call:boolean=false,lv:number=1,enhancement?: any, stageMultipliers?: any) {
var hv = node.getComponent(HeroViewComp)!;
hv.hide_info()
// console.log("hero_init",buff)
@@ -79,30 +79,26 @@ export class Monster extends ecs.Entity {
// 初始化Attrs属性系统参考Hero.ts的实现
hv.Attrs = getBuffNum();
// 肉鸽模式使用固定数值,否则使用等级计算
if (rogueHp !== undefined && rogueAttack !== undefined) {
// 肉鸽模式:使用固定数值
hv.hp = hv.hp_max = rogueHp;
hv.ap = rogueAttack;
hv.ap_base = rogueAttack;
console.log(`[Monster-Rogue]: 怪物${hero.name} - 固定HP:${rogueHp}, 固定AP:${rogueAttack}`);
// 计算基础属性(使用关卡倍数)
const baseHp = hero.hp;
const baseAp = hero.ap;
// 应用关卡倍数
let finalHp = baseHp;
let finalAp = baseAp;
if (stageMultipliers) {
finalHp = Math.floor(baseHp * stageMultipliers.hp);
finalAp = Math.floor(baseAp * stageMultipliers.attack);
console.log(`[Monster]: 怪物${hero.name} 关卡倍数 - HP: ${baseHp} x ${stageMultipliers.hp.toFixed(2)} = ${finalHp}, AP: ${baseAp} x ${stageMultipliers.attack.toFixed(2)} = ${finalAp}`);
} else {
// 普通模式根据Design.md设计文档计算怪物等级属性
const baseHp = hero.hp;
const baseAp = hero.ap;
// 怪物属性随等级增长 (根据Design.md中的公式)
// HP增长: Math.floor(baseHp * (1 + (level-1) * 0.3))
// AP增长: Math.floor(baseAp * (1 + (level-1) * 0.25))
const levelHp = Math.floor(baseHp * (1 + (lv - 1) * 0.5));
const levelAp = Math.floor(baseAp * (1 + (lv - 1) * 0.1));
hv.hp = hv.hp_max = levelHp;
hv.ap = levelAp;
hv.ap_base = levelAp;
console.log(`[Monster]: 怪物${hero.name}(等级${lv}) - 基础HP:${baseHp}->等级HP:${levelHp}, 基础AP:${baseAp}->等级AP:${levelAp}`);
console.log(`[Monster]: 怪物${hero.name} 使用基础属性 - HP: ${finalHp}, AP: ${finalAp}`);
}
hv.hp = hv.hp_max = finalHp;
hv.ap = finalAp;
hv.ap_base = finalAp;
// 设置基础属性到Attrs系统
hv.Attrs[BuffAttr.SPEED] = hv.speed = hv.speed_base = hero.speed;
hv.Attrs[BuffAttr.DIS] = hv.dis = hero.dis;
@@ -116,11 +112,11 @@ export class Monster extends ecs.Entity {
hv.apply_buff(buff.type, buff.value);
})
// 处理肉鸽模式的词条Buff
if (rogueBuffData && rogueBuffData.length > 0) {
console.log(`[Monster]: 怪物${hero.name}应用肉鸽词条:`, rogueBuffData);
rogueBuffData.forEach((buff:any)=>{
hv.apply_buff(buff.type, buff.value);
// 处理肉鸽模式的增强属性
if (enhancement && enhancement.buffList && enhancement.buffList.length > 0) {
console.log(`[Monster]: 怪物${hero.name}应用增强属性:`, enhancement.buffList.map((buff: any) => `${buff.name}:+${buff.value}`));
enhancement.buffList.forEach((buff:any)=>{
hv.apply_buff(buff.buffType, buff.value);
})
}