金币经验掉落
This commit is contained in:
@@ -116,6 +116,93 @@ export const MonsterDropTable: { [monsterId: number]: [number, number, number, n
|
||||
]
|
||||
};
|
||||
|
||||
// 基础资源掉落配置表 - 以普通怪为基础值
|
||||
export const BaseResourceDropConfig = {
|
||||
// 经验值配置
|
||||
exp: {
|
||||
baseValue: 100, // 普通怪基础经验值
|
||||
stageMultiplier: 1.15, // 关卡倍数 (降低增长)
|
||||
randomRange: 0.2, // 随机范围 (±20%)
|
||||
baseProbability: 1.0 // 基础掉落概率 (100%)
|
||||
},
|
||||
// 金币配置
|
||||
gold: {
|
||||
baseValue: 50, // 普通怪基础金币值
|
||||
stageMultiplier: 1.12, // 关卡倍数 (降低增长)
|
||||
randomRange: 0.25, // 随机范围 (±25%)
|
||||
baseProbability: 0.7 // 基础掉落概率 (70%)
|
||||
},
|
||||
// 钻石配置
|
||||
diamond: {
|
||||
baseValue: 2, // 基础钻石值
|
||||
stageMultiplier: 1.05, // 关卡倍数 (大幅降低增长)
|
||||
randomRange: 0.2, // 随机范围 (±20%)
|
||||
baseProbability: 0.0 // 基础掉落概率 (0%,需要品质加成)
|
||||
}
|
||||
};
|
||||
|
||||
// 怪物品质加成配置表 - 使用加法权重
|
||||
export const QualityBonusConfig = {
|
||||
[QualitySet.GREEN]: {
|
||||
// 绿色品质:基础值 + 加成
|
||||
expBonus: 0, // 经验值加成
|
||||
goldBonus: 0, // 金币加成
|
||||
diamondBonus: 0, // 钻石加成
|
||||
expProbabilityBonus: 0, // 经验掉落概率加成
|
||||
goldProbabilityBonus: 0, // 金币掉落概率加成
|
||||
diamondProbabilityBonus: 0 // 钻石掉落概率加成
|
||||
},
|
||||
[QualitySet.BLUE]: {
|
||||
// 蓝色品质:基础值 + 加成
|
||||
expBonus: 50, // 经验值 +50
|
||||
goldBonus: 25, // 金币 +25
|
||||
diamondBonus: 0, // 钻石加成 0
|
||||
expProbabilityBonus: 0, // 经验掉落概率加成
|
||||
goldProbabilityBonus: 0.1, // 金币掉落概率 +10%
|
||||
diamondProbabilityBonus: 0.2 // 钻石掉落概率 +20%
|
||||
},
|
||||
[QualitySet.PURPLE]: {
|
||||
// 紫色品质:基础值 + 加成
|
||||
expBonus: 100, // 经验值 +100
|
||||
goldBonus: 50, // 金币 +50
|
||||
diamondBonus: 1, // 钻石 +1
|
||||
expProbabilityBonus: 0, // 经验掉落概率加成
|
||||
goldProbabilityBonus: 0.2, // 金币掉落概率 +20%
|
||||
diamondProbabilityBonus: 0.1 // 钻石掉落概率 +10%(精英10%)
|
||||
},
|
||||
[QualitySet.ORANGE]: {
|
||||
// 橙色品质:基础值 + 加成
|
||||
expBonus: 200, // 经验值 +200
|
||||
goldBonus: 100, // 金币 +100
|
||||
diamondBonus: 3, // 钻石 +3
|
||||
expProbabilityBonus: 0, // 经验掉落概率加成
|
||||
goldProbabilityBonus: 0.3, // 金币掉落概率 +30%
|
||||
diamondProbabilityBonus: 1.0 // 钻石掉落概率 +100%(BOSS必掉)
|
||||
}
|
||||
};
|
||||
|
||||
// 关卡和buff加成配置表 - 使用加法权重
|
||||
export const StageBuffBonusConfig = {
|
||||
// 关卡加成配置
|
||||
stage: {
|
||||
expBonusPerStage: 5, // 每关经验值加成
|
||||
goldBonusPerStage: 2, // 每关金币加成
|
||||
diamondBonusPerStage: 0.1, // 每关钻石加成
|
||||
expProbabilityBonusPerStage: 0, // 每关经验掉落概率加成
|
||||
goldProbabilityBonusPerStage: 0, // 每关金币掉落概率加成
|
||||
diamondProbabilityBonusPerStage: 0 // 每关钻石掉落概率加成
|
||||
},
|
||||
// buff数量加成配置
|
||||
buff: {
|
||||
expBonusPerBuff: 10, // 每个buff经验值加成
|
||||
goldBonusPerBuff: 5, // 每个buff金币加成
|
||||
diamondBonusPerBuff: 0.5, // 每个buff钻石加成
|
||||
expProbabilityBonusPerBuff: 0, // 每个buff经验掉落概率加成
|
||||
goldProbabilityBonusPerBuff: 0.01, // 每个buff金币掉落概率加成
|
||||
diamondProbabilityBonusPerBuff: 0.005 // 每个buff钻石掉落概率加成
|
||||
}
|
||||
};
|
||||
|
||||
// 怪物掉落管理器
|
||||
export class MonsterDropManager {
|
||||
|
||||
@@ -213,5 +300,68 @@ export class MonsterDropManager {
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算怪物基础资源掉落(经验、金币、钻石)
|
||||
* @param monsterQuality 怪物品质
|
||||
* @param stageNumber 关卡数
|
||||
* @param buffCount buff数量
|
||||
* @returns 基础资源掉落结果
|
||||
*/
|
||||
static calculateBaseResourceDrops(monsterQuality: QualitySet, stageNumber: number, buffCount: number = 0): {exp: number, gold?: number, diamond?: number} {
|
||||
const result: {exp: number, gold?: number, diamond?: number} = {exp: 0};
|
||||
|
||||
// 获取品质加成
|
||||
const qualityBonus = QualityBonusConfig[monsterQuality];
|
||||
|
||||
// 计算经验值(必出)
|
||||
const expConfig = BaseResourceDropConfig.exp;
|
||||
const expValue = (expConfig.baseValue +
|
||||
qualityBonus.expBonus +
|
||||
StageBuffBonusConfig.stage.expBonusPerStage * stageNumber +
|
||||
StageBuffBonusConfig.buff.expBonusPerBuff * buffCount) *
|
||||
Math.pow(expConfig.stageMultiplier, stageNumber - 1);
|
||||
|
||||
// 添加随机范围
|
||||
const expRandomFactor = 1 + (Math.random() - 0.5) * 2 * expConfig.randomRange;
|
||||
result.exp = Math.floor(expValue * expRandomFactor);
|
||||
|
||||
// 金币与钻石独立判定,可同时掉落:
|
||||
// 使用加法权重系统:基础值 + 品质加成 + 关卡加成 + buff加成 + 关卡增长
|
||||
|
||||
// 金币判定
|
||||
const goldProbability = BaseResourceDropConfig.gold.baseProbability +
|
||||
qualityBonus.goldProbabilityBonus +
|
||||
StageBuffBonusConfig.stage.goldProbabilityBonusPerStage * stageNumber +
|
||||
StageBuffBonusConfig.buff.goldProbabilityBonusPerBuff * buffCount;
|
||||
if (Math.random() < goldProbability) {
|
||||
const goldConfig = BaseResourceDropConfig.gold;
|
||||
const goldValue = (goldConfig.baseValue +
|
||||
qualityBonus.goldBonus +
|
||||
StageBuffBonusConfig.stage.goldBonusPerStage * stageNumber +
|
||||
StageBuffBonusConfig.buff.goldBonusPerBuff * buffCount) *
|
||||
Math.pow(goldConfig.stageMultiplier, stageNumber - 1);
|
||||
const goldRandomFactor = 1 + (Math.random() - 0.5) * 2 * goldConfig.randomRange;
|
||||
result.gold = Math.floor(goldValue * goldRandomFactor);
|
||||
}
|
||||
|
||||
// 钻石判定
|
||||
const diamondProbability = BaseResourceDropConfig.diamond.baseProbability +
|
||||
qualityBonus.diamondProbabilityBonus +
|
||||
StageBuffBonusConfig.stage.diamondProbabilityBonusPerStage * stageNumber +
|
||||
StageBuffBonusConfig.buff.diamondProbabilityBonusPerBuff * buffCount;
|
||||
if (Math.random() < diamondProbability) {
|
||||
const diamondConfig = BaseResourceDropConfig.diamond;
|
||||
const diamondValue = (diamondConfig.baseValue +
|
||||
qualityBonus.diamondBonus +
|
||||
StageBuffBonusConfig.stage.diamondBonusPerStage * stageNumber +
|
||||
StageBuffBonusConfig.buff.diamondBonusPerBuff * buffCount) *
|
||||
Math.pow(diamondConfig.stageMultiplier, stageNumber - 1);
|
||||
const diamondRandomFactor = 1 + (Math.random() - 0.5) * 2 * diamondConfig.randomRange;
|
||||
result.diamond = Math.floor(diamondValue * diamondRandomFactor);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user