import Utils from "../Script/module/Pay/Utils"; // 单项奖励;优先读取 count,兼容旧数据的 amount;infinite_health 数值单位为秒。 export interface SevenDayRewardItem { type: "coin" | "hammer" | "freeze" | "magic_wand" | "infinite_health" | "cat_skin"; amount?: number; count?: number; itemId?: number; // 猫皮肤奖励对应的猫咪编号。 } // 一天可以包含多项奖励,claimed 表示这一天已领取。 export interface SevenDayReward { day: number; items: SevenDayRewardItem[]; claimed: boolean; } // 服务端活动快照,也是弹窗显示和本次领取的数据来源。 export interface SevenDayActivityInfo { serverNow: string | number; activityId: string; status: string; triggerLevel: number; triggerReached: boolean; startAt: string | number; endAt: string | number; claimedCount: number; todayClaimed: boolean; canClaim: boolean; nextRewardDay: number; rewards: SevenDayReward[]; } /** 从活动查询快照生成的本地同步记录,不是独立领取接口的响应。 */ export interface SevenDayRewardReceipt { claimId: string; rewardDay: number; rewards: SevenDayRewardItem[]; claimedCount: number; todayClaimed: boolean; completed: boolean; } export interface SevenDayResponse { code: number; data: T; msg?: string; } /** 分包内的资产同步接口,不额外请求活动领取接口。 */ export default class SevenDayGiftApi { // 把解锁的猫皮肤同步到当前账号。 public static saveCat(catNum: number, callback: (response: SevenDayResponse<{ catArr: number[] }>) => void) { this.post("setCatArr", { uid: this.getUid(), action: "save", catNum, }, callback); } // 上传领取后的道具总量,不是本次奖励增量。 public static saveProps(propData: object, callback: (response: SevenDayResponse) => void) { this.post("userProp", { uid: this.getUid(), action: "save", propType: 0, propData: JSON.stringify(propData), }, callback); } // 统一从当前登录信息取得奖励所属账号。 public static getUid(): string { const storedUid = cc.fx.StorageMessage.getStorage("uid"); if (storedUid !== undefined && storedUid !== null && storedUid !== "") { cc.fx.GameConfig.GM_INFO.uid = storedUid; } return cc.fx.GameConfig.GM_INFO.uid || ""; } // 封装同步请求;超时和网络返回最多触发一次回调。 private static post(endpoint: string, params: object, callback: (response: SevenDayResponse) => void) { let completed = false; const timeoutHandle = setTimeout(() => { if (completed) return; completed = true; cc.warn("[SevenDayGiftApi] 请求超时:" + endpoint); callback({ code: 0, data: null, msg: "请求超时,请稍后重试" }); }, 5500); Utils.POST(endpoint, params, response => { if (completed) return; completed = true; clearTimeout(timeoutHandle); callback(response); }); } }