refactor: 将刷新石替换为银币作为卡牌刷新消耗

1. 重构全局配置,移除刷新石相关定义,新增银币刷新消耗常量
2. 新增局外持久货币银币的数据结构与管理逻辑
3. 重构卡牌刷新经济系统,统一使用银币进行刷新消耗
4. 更新UI显示与事件通知,适配银币系统变更
5. 调整清屏奖励逻辑,将刷新石奖励改为金币奖励
This commit is contained in:
panFD
2026-09-10 14:12:51 +08:00
parent a02bf54ede
commit 317a500439
9 changed files with 1763 additions and 343 deletions

View File

@@ -21,6 +21,8 @@ export interface GameDate {
mission?: number,
diamond?: number,
gold?: number,
/** 银币:局外持久货币,用于局内刷新英雄卡牌,仅通过日常任务等途径积攒 */
silver?: number,
task?: number,
noStop?: boolean,
showInfo?: boolean,
@@ -110,6 +112,8 @@ export class SingletonModuleComp extends ecs.Comp {
mission: 1,
diamond: 100, //商店购买 及 双倍奖励资源
gold: 1000,
/** 银币:刷新英雄卡牌专用,每局不重置,仅日常积攒 */
silver: 0,
task: 0,
noStop: false,
showInfo: true,
@@ -157,7 +161,6 @@ export class SingletonModuleComp extends ecs.Comp {
level: 1,//关卡等级
max_mission: 4,//最大关卡
coin: 0,
refresh_stone: 0,//刷新石(刷新卡池时优先消耗,不足时消耗金币)
time: 15 * 60,//游戏时间
},
scores: {
@@ -216,6 +219,7 @@ export class SingletonModuleComp extends ecs.Comp {
gold: 0, // 金币数据(MVVM绑定字段,镜像 data.gold)
diamond: 0, // 钻石数据(MVVM绑定字段,镜像 data.diamond)
silver: 0, // 银币数据(MVVM绑定字段,镜像 data.silver,刷新卡牌消耗)
switch_effect: true, // 音效开关(MVVM绑定字段)
switch_music: true, // 音乐开关(MVVM绑定字段)
};
@@ -324,6 +328,7 @@ export class SingletonModuleComp extends ecs.Comp {
public syncCurrencyToView(): void {
this.vmdata.gold = this.data.gold ?? 0;
this.vmdata.diamond = this.data.diamond ?? 0;
this.vmdata.silver = this.data.silver ?? 0;
}
getGameDate() {
let data: GameDate = {
@@ -363,6 +368,22 @@ export class SingletonModuleComp extends ecs.Comp {
return true
}
/**
* 变更银币(正数获得 / 负数消耗),以 data 为权威源并镜像到 vmdata。
* Why: 银币为局外持久货币,仅用于刷新英雄卡牌,日常任务等途径积攒。
* @param silver 变动量
* @param is_sync 是否标记脏并触发云端/本地同步
*/
updateSilver(silver: number, is_sync: boolean = true) {
this.data.silver = Math.max(0, (this.data.silver ?? 0) + silver);
this.vmdata.silver = this.data.silver;
if (is_sync) {
gameDataSync.markDataDirty();
}
oops.message.dispatchEvent(GameEvent.SILVER_UPDATE)
return true
}
updateSwitchEffect(isOpen: boolean, is_sync: boolean = true) {
this.vmdata.switch_effect = isOpen;
if (oops.audio) oops.audio.switchEffect = isOpen;

View File

@@ -79,7 +79,7 @@ export enum GameEvent {
UpdateMissionGet = "UpdateMissionGet",
GlobalAttrChange = "GlobalAttrChange",
CoinAdd = "CoinAdd",
RefreshStone = "RefreshStone", // 刷新石数量变更事件
SILVER_UPDATE = "SILVER_UPDATE", // 银币数量变更事件(刷新卡牌消耗)
ShowSmallTip = "ShowSmallTip",
CardPoolUpgrade = "CardPoolUpgrade",
TriggerSkill = "TriggerSkill", // 瞬间触发施法事件

View File

@@ -73,9 +73,8 @@ export enum FightSet {
REFRESH_COST = 2,
BASE_COST = 5,
INIT_COIN = 7, // 初始金币数
INIT_REFRESH_STONE = 3, // 初始刷新石数量
/** 单次刷新消耗的刷新石数量 */
REFRESH_STONE_COST = 1,
/** 单次刷新卡牌消耗的银币数量 */
SILVER_REFRESH_COST = 1,
/** 全局默认闪避率(百分点),heroSet 未配置时生效 */
DEFAULT_DODGE = 15,
/** 全局默认命中率(百分点),heroSet 未配置时生效 */