feat(battle): add silver and diamond reward system
1. 新增银币、钻石奖励配置到游戏结算配置表 2. 添加银币、钻石奖励的预制体与组件绑定 3. 实现结算逻辑:固定发放银币,按胜负区间随机发放钻石 4. 新增奖励UI展示条目,完整展示新增奖励类型
This commit is contained in:
@@ -200,6 +200,8 @@ export interface MonSkillSet {
|
||||
dead?: TriggerGrouped;
|
||||
/** 战斗开始触发 */
|
||||
fstart?: TriggerGrouped;
|
||||
/** 复活触发 */
|
||||
revive?: TriggerGrouped;
|
||||
/** 在技能池中的抽取权重 */
|
||||
weight: number;
|
||||
}
|
||||
@@ -355,6 +357,7 @@ export interface GeneratedMonster {
|
||||
atked?: TriggerGrouped;
|
||||
dead?: TriggerGrouped;
|
||||
fstart?: TriggerGrouped;
|
||||
revive?: TriggerGrouped;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -47,6 +47,10 @@ interface RewardResult {
|
||||
gold: number;
|
||||
/** 发放的天赋经验数量 */
|
||||
talentExp: number;
|
||||
/** 发放的银币数量 */
|
||||
silver: number;
|
||||
/** 发放的钻石数量 */
|
||||
diamond: number;
|
||||
/** 英雄碎片奖励列表 */
|
||||
fragments: FragmentReward[];
|
||||
}
|
||||
@@ -110,6 +114,12 @@ export class VictoryComp extends CCComp {
|
||||
@property({ type: Prefab, tooltip: "天赋经验奖励条目预制体(reward_item_exp.prefab,挂 RewardItemComp)" })
|
||||
reward_exp_prefab: Prefab = null!;
|
||||
|
||||
@property({ type: Prefab, tooltip: "银币奖励条目预制体(reward_item_silver.prefab,挂 RewardItemComp)" })
|
||||
reward_silver_prefab: Prefab = null!;
|
||||
|
||||
@property({ type: Prefab, tooltip: "钻石奖励条目预制体(reward_item_diamond.prefab,挂 RewardItemComp)" })
|
||||
reward_diamond_prefab: Prefab = null!;
|
||||
|
||||
/** 调试日志开关 */
|
||||
debugMode: boolean = false;
|
||||
/** 奖励等级(预留) */
|
||||
@@ -557,6 +567,11 @@ export class VictoryComp extends CCComp {
|
||||
const gold = Math.floor((cfg.gold.base + wave * cfg.gold.per_wave) * mult);
|
||||
const talentExp = Math.floor((cfg.talent_exp.base + wave * cfg.talent_exp.per_wave) * mult);
|
||||
|
||||
// 1.5 银币固定发放;钻石按输赢在 [min, max] 内随机(不吃胜利加成,避免与固定区间重复放大)
|
||||
const silver = cfg.silver;
|
||||
const dRange = isVictory ? cfg.diamond.victory : cfg.diamond.defeat;
|
||||
const diamond = dRange.min + Math.floor(Math.random() * (dRange.max - dRange.min + 1));
|
||||
|
||||
// 2. 英雄碎片:出场英雄各保底 + 1 个随机英雄
|
||||
const playedUuids = this.collectPlayedHeroUuids();
|
||||
const playedSet = new Set(playedUuids);
|
||||
@@ -574,6 +589,12 @@ export class VictoryComp extends CCComp {
|
||||
if (gold > 0) {
|
||||
smc.updateGold(gold); // 统一入口:改 data 持久层 + 镜像 vmdata + 标脏同步
|
||||
}
|
||||
if (silver > 0) {
|
||||
smc.updateSilver(silver);
|
||||
}
|
||||
if (diamond > 0) {
|
||||
smc.updateDiamond(diamond);
|
||||
}
|
||||
if (talentExp > 0) {
|
||||
smc.addTalentExp(talentExp);
|
||||
}
|
||||
@@ -581,10 +602,10 @@ export class VictoryComp extends CCComp {
|
||||
smc.addHeroFragments(f.uuid, f.count);
|
||||
}
|
||||
|
||||
this._rewardResult = { gold, talentExp, fragments };
|
||||
this._rewardResult = { gold, talentExp, silver, diamond, fragments };
|
||||
|
||||
mLogger.log(this.debugMode, 'VictoryComp', '[VictoryComp] 结算奖励发放', {
|
||||
isVictory, wave, gold, talentExp, fragments,
|
||||
isVictory, wave, gold, talentExp, silver, diamond, fragments,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -612,6 +633,20 @@ export class VictoryComp extends CCComp {
|
||||
items.push(node);
|
||||
}
|
||||
|
||||
// 银币条目
|
||||
if (this.reward_silver_prefab && r.silver > 0) {
|
||||
const node = instantiate(this.reward_silver_prefab);
|
||||
node.getComponent(RewardItemComp)?.setReward(r.silver);
|
||||
items.push(node);
|
||||
}
|
||||
|
||||
// 钻石条目
|
||||
if (this.reward_diamond_prefab && r.diamond > 0) {
|
||||
const node = instantiate(this.reward_diamond_prefab);
|
||||
node.getComponent(RewardItemComp)?.setReward(r.diamond);
|
||||
items.push(node);
|
||||
}
|
||||
|
||||
// 英雄碎片条目(复用 clips.prefab + ChipComp,num 子节点显示数量)
|
||||
if (this.clip_prefab) {
|
||||
for (const f of r.fragments) {
|
||||
|
||||
Reference in New Issue
Block a user