|
|
@@ -10,6 +10,7 @@ import { PersistentSkillManager } from '../FourUI/SkillSystem/PersistentSkillMan
|
|
|
import { SkillManager } from './SkillSelection/SkillManager';
|
|
|
import { SaveDataManager } from '../LevelSystem/SaveDataManager';
|
|
|
import { WeaponInfo } from './BlockSelection/WeaponInfo';
|
|
|
+import { BlockInfo } from './BlockSelection/BlockInfo';
|
|
|
|
|
|
const { ccclass, property } = _decorator;
|
|
|
|
|
|
@@ -32,6 +33,7 @@ export interface BulletInitData {
|
|
|
autoTarget?: boolean; // 是否自动瞄准
|
|
|
weaponConfig?: WeaponConfig; // 直接传入的武器配置(优先级更高)
|
|
|
weaponInfo?: WeaponInfo; // WeaponInfo组件实例(用于冷却管理等)
|
|
|
+ blockInfo?: BlockInfo; // BlockInfo组件实例(用于获取稀有度等级)
|
|
|
}
|
|
|
|
|
|
@ccclass('WeaponBullet')
|
|
|
@@ -52,6 +54,7 @@ export class WeaponBullet extends Component {
|
|
|
private weaponConfig: WeaponConfig = null;
|
|
|
private weaponId: string = null; // 存储武器ID用于获取升级数据
|
|
|
private weaponInfo: WeaponInfo = null; // WeaponInfo组件实例
|
|
|
+ private blockInfo: BlockInfo = null; // BlockInfo组件实例
|
|
|
private isInitialized: boolean = false;
|
|
|
|
|
|
// === 静态武器配置缓存 ===
|
|
|
@@ -218,9 +221,10 @@ export class WeaponBullet extends Component {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- // 存储武器ID和WeaponInfo
|
|
|
+ // 存储武器ID、WeaponInfo和BlockInfo
|
|
|
this.weaponId = initData.weaponId;
|
|
|
this.weaponInfo = initData.weaponInfo || null;
|
|
|
+ this.blockInfo = initData.blockInfo || null;
|
|
|
|
|
|
// 获取武器配置
|
|
|
this.weaponConfig = initData.weaponConfig || WeaponBullet.getWeaponConfig(initData.weaponId);
|
|
|
@@ -672,24 +676,47 @@ export class WeaponBullet extends Component {
|
|
|
// 获取基础伤害
|
|
|
let baseDamage = this.weaponConfig.stats.damage;
|
|
|
|
|
|
- // 应用武器升级加成
|
|
|
+ // 应用武器升级加成 - 使用UpgradeController的伤害计算逻辑
|
|
|
const saveDataManager = SaveDataManager.getInstance();
|
|
|
if (saveDataManager && this.weaponId) {
|
|
|
const weaponData = saveDataManager.getWeapon(this.weaponId);
|
|
|
if (weaponData && weaponData.level > 0) {
|
|
|
- // 应用武器升级加成:升级后伤害 = 基础伤害 + (等级 - 1)
|
|
|
- baseDamage = this.weaponConfig.stats.damage + (weaponData.level - 1);
|
|
|
- console.log(`[WeaponBullet] 武器升级加成应用 - 武器ID: ${this.weaponId}, 等级: ${weaponData.level}, 基础伤害: ${this.weaponConfig.stats.damage}, 升级后伤害: ${baseDamage}`);
|
|
|
+ // 优先从武器配置的upgradeConfig中获取伤害值
|
|
|
+ if (this.weaponConfig.upgradeConfig && this.weaponConfig.upgradeConfig.levels) {
|
|
|
+ const levelConfig = this.weaponConfig.upgradeConfig.levels[weaponData.level.toString()];
|
|
|
+ if (levelConfig && typeof levelConfig.damage === 'number') {
|
|
|
+ baseDamage = levelConfig.damage;
|
|
|
+ console.log(`[WeaponBullet] 从upgradeConfig获取伤害 - 武器ID: ${this.weaponId}, 等级: ${weaponData.level}, 伤害: ${baseDamage}`);
|
|
|
+ } else {
|
|
|
+ // 如果upgradeConfig中没有伤害值,使用基础伤害 + 等级加成作为后备
|
|
|
+ baseDamage = this.weaponConfig.stats.damage + (weaponData.level - 1);
|
|
|
+ console.log(`[WeaponBullet] 使用基础伤害计算 - 武器ID: ${this.weaponId}, 等级: ${weaponData.level}, 基础伤害: ${this.weaponConfig.stats.damage}, 升级后伤害: ${baseDamage}`);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 如果没有upgradeConfig,使用默认公式
|
|
|
+ baseDamage = this.weaponConfig.stats.damage + (weaponData.level - 1);
|
|
|
+ console.log(`[WeaponBullet] 无upgradeConfig,使用默认公式 - 武器ID: ${this.weaponId}, 等级: ${weaponData.level}, 升级后伤害: ${baseDamage}`);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 应用稀有度伤害倍数(合成升级效果)
|
|
|
- // 从武器配置中获取稀有度,如果不存在则默认为 'common'
|
|
|
- const rarity = this.weaponConfig.rarity || 'common';
|
|
|
- const rarityMultiplier = this.getRarityDamageMultiplier(rarity);
|
|
|
+ // 优先从BlockInfo中获取稀有度等级,如果不存在则从武器配置中获取
|
|
|
+ let rarityLevel = 0; // 默认为common(0)
|
|
|
+ let rarityName = 'common';
|
|
|
+
|
|
|
+ if (this.blockInfo) {
|
|
|
+ rarityLevel = this.blockInfo.rarity;
|
|
|
+ rarityName = this.blockInfo.getRarityName();
|
|
|
+ } else if (this.weaponConfig && this.weaponConfig.rarity) {
|
|
|
+ // 兼容旧的JSON配置方式
|
|
|
+ rarityName = this.weaponConfig.rarity;
|
|
|
+ }
|
|
|
+
|
|
|
+ const rarityMultiplier = this.getRarityDamageMultiplierByLevel(rarityLevel);
|
|
|
if (rarityMultiplier > 1) {
|
|
|
baseDamage = baseDamage * rarityMultiplier;
|
|
|
- console.log(`[WeaponBullet] 稀有度伤害倍数应用 - 稀有度: ${rarity}, 倍数: ${rarityMultiplier}, 最终基础伤害: ${baseDamage}`);
|
|
|
+ console.log(`[WeaponBullet] 稀有度伤害倍数应用 - 稀有度等级: ${rarityLevel}(${rarityName}), 倍数: ${rarityMultiplier}, 最终基础伤害: ${baseDamage}`);
|
|
|
}
|
|
|
|
|
|
const skillManager = PersistentSkillManager.getInstance();
|
|
|
@@ -736,7 +763,7 @@ export class WeaponBullet extends Component {
|
|
|
const inGameCritBonus = inGameSkillManager && inGameCritLevel > 0 ?
|
|
|
((SkillManager.calculateCritChance(baseCritChance, inGameCritLevel) - baseCritChance) * 100).toFixed(1) : '0.0';
|
|
|
|
|
|
- console.log(`[WeaponBullet] 完整伤害计算完成 - 武器ID: ${this.weaponId}, 原始伤害: ${this.weaponConfig.stats.damage}, 稀有度: ${rarity}, 计算后基础伤害: ${baseDamage}, 最终伤害: ${finalDamage}, 暴击伤害: ${finalCritDamage}`);
|
|
|
+ console.log(`[WeaponBullet] 完整伤害计算完成 - 武器ID: ${this.weaponId}, 原始伤害: ${this.weaponConfig.stats.damage}, 稀有度: ${rarityName}, 计算后基础伤害: ${baseDamage}, 最终伤害: ${finalDamage}, 暴击伤害: ${finalCritDamage}`);
|
|
|
console.log(`[WeaponBullet] 暴击率详情 - 基础: ${(baseCritChance * 100).toFixed(1)}%, 局内技能等级: ${inGameCritLevel}, 局内技能加成: +${inGameCritBonus}%, 最终暴击率: ${(critChance * 100).toFixed(1)}%`);
|
|
|
}
|
|
|
|
|
|
@@ -779,4 +806,25 @@ export class WeaponBullet extends Component {
|
|
|
return 1;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据稀有度等级获取伤害倍数
|
|
|
+ * @param rarityLevel 稀有度等级 (0: common, 1: uncommon, 2: rare, 3: epic)
|
|
|
+ * @returns 伤害倍数
|
|
|
+ */
|
|
|
+ private getRarityDamageMultiplierByLevel(rarityLevel: number): number {
|
|
|
+ switch (rarityLevel) {
|
|
|
+ case 0: // common
|
|
|
+ return 1; // 1级,无倍数
|
|
|
+ case 1: // uncommon
|
|
|
+ return 1.5; // 2级,1.5倍伤害
|
|
|
+ case 2: // rare
|
|
|
+ return 2.25; // 3级,2.25倍伤害
|
|
|
+ case 3: // epic
|
|
|
+ return 8; // 4级,8倍伤害
|
|
|
+
|
|
|
+ default:
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|