refactor(天赋系统): 将天赋和碎片集合改为完整记录并初始化默认值
- 将 `talents` 和 `talent_fragments` 的类型从 `Partial<Record>` 改为 `Record`,确保所有键始终存在 - 初始化集合对象时,为所有天赋类型和碎片类型设置默认值 0,避免后续的空值检查 - 更新数据恢复逻辑,使用 `Object.assign` 合并云端数据,保留本地初始化的完整结构 - 简化相关业务逻辑代码,移除不必要的空值检查和默认值回退
This commit is contained in:
@@ -20,10 +20,10 @@ export interface GameDate{
|
||||
gold:number,
|
||||
timestamp?: number, // 用于比对本地与云端数据的最新状态
|
||||
collection?: {
|
||||
talents: Partial<Record<TalentType, number>>,
|
||||
talents: Record<TalentType, number>,
|
||||
player_level: number,
|
||||
player_exp: number,
|
||||
talent_fragments: Partial<Record<TalentFragmentType, number>>,
|
||||
talent_fragments: Record<TalentFragmentType, number>,
|
||||
talent_points?: number,
|
||||
}
|
||||
}
|
||||
@@ -64,16 +64,37 @@ export class SingletonModuleComp extends ecs.Comp {
|
||||
current_guide:number=0
|
||||
|
||||
collection: {
|
||||
talents: Partial<Record<TalentType, number>>;
|
||||
talents: Record<TalentType, number>;
|
||||
player_level: number;
|
||||
player_exp: number;
|
||||
talent_fragments: Partial<Record<TalentFragmentType, number>>;
|
||||
talent_fragments: Record<TalentFragmentType, number>;
|
||||
talent_points?: number;
|
||||
} = {
|
||||
talents: {}, // 存储各个天赋的等级: { talent_id: level }
|
||||
talents: {
|
||||
[TalentType.Attack]: 0,
|
||||
[TalentType.Hp]: 0,
|
||||
[TalentType.Critical]: 0,
|
||||
[TalentType.WindFury]: 0,
|
||||
[TalentType.Freeze]: 0,
|
||||
[TalentType.Puncture]: 0,
|
||||
[TalentType.DeadTrigger]: 0,
|
||||
[TalentType.Summon]: 0,
|
||||
[TalentType.BuyDiscount]: 0,
|
||||
[TalentType.RefreshDiscount]: 0,
|
||||
[TalentType.SellBonus]: 0
|
||||
}, // 存储各个天赋的等级: { talent_id: level }
|
||||
player_level: 1, // 玩家等级
|
||||
player_exp: 0, // 玩家当前经验
|
||||
talent_fragments: {}, // 当前拥有的天赋碎片库存
|
||||
talent_fragments: {
|
||||
[TalentFragmentType.Power]: 0,
|
||||
[TalentFragmentType.Tempest]: 0,
|
||||
[TalentFragmentType.Vitality]: 0,
|
||||
[TalentFragmentType.Frost]: 0,
|
||||
[TalentFragmentType.Tactics]: 0,
|
||||
[TalentFragmentType.Spirit]: 0,
|
||||
[TalentFragmentType.Trade]: 0,
|
||||
[TalentFragmentType.Fate]: 0
|
||||
}, // 当前拥有的天赋碎片库存
|
||||
talent_points: 0, // 兼容旧存档的历史字段
|
||||
};
|
||||
|
||||
@@ -240,10 +261,14 @@ export class SingletonModuleComp extends ecs.Comp {
|
||||
// 恢复收集记录
|
||||
if (data.collection) {
|
||||
const remoteCol = data.collection;
|
||||
if (remoteCol.talents) this.collection.talents = remoteCol.talents;
|
||||
if (remoteCol.talents) {
|
||||
Object.assign(this.collection.talents, remoteCol.talents);
|
||||
}
|
||||
if (typeof remoteCol.player_level === 'number') this.collection.player_level = remoteCol.player_level;
|
||||
if (typeof remoteCol.player_exp === 'number') this.collection.player_exp = remoteCol.player_exp;
|
||||
if (remoteCol.talent_fragments) this.collection.talent_fragments = remoteCol.talent_fragments;
|
||||
if (remoteCol.talent_fragments) {
|
||||
Object.assign(this.collection.talent_fragments, remoteCol.talent_fragments);
|
||||
}
|
||||
if (typeof remoteCol.talent_points === 'number') this.collection.talent_points = remoteCol.talent_points;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user