diff --git a/assets/Scene/HomeScene.fire b/assets/Scene/HomeScene.fire index 627ede87..f9305f73 100644 --- a/assets/Scene/HomeScene.fire +++ b/assets/Scene/HomeScene.fire @@ -1498,6 +1498,9 @@ }, { "__id__": 367 + }, + { + "__id__": 734 } ], "_active": true, @@ -31237,5 +31240,268 @@ "__id__": 731 }, "_id": "67zCbKKV9PvYlB9x+eob0L" + }, + { + "__type__": "cc.Node", + "_name": "chengxu", + "_objFlags": 0, + "_parent": { + "__id__": 31 + }, + "_children": [ + { + "__id__": 737 + } + ], + "_active": false, + "_components": [ + { + "__id__": 735 + }, + { + "__id__": 736 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 193, + "height": 179 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -414.356, + -1248.26, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "3ad7c088-184a-4fb5-a7c2-affdb3ce19be" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 734 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "6f59a7ab-37f7-4e9f-b703-f4a3a548801a" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "6ebdc726-a5e2-40f3-bee2-f5b9801c8e46" + }, + { + "__type__": "cc.Button", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 734 + }, + "_enabled": true, + "_normalMaterial": null, + "_grayMaterial": null, + "duration": 0.1, + "zoomScale": 1.1, + "clickEvents": [], + "_N$interactable": true, + "_N$enableAutoGrayEffect": false, + "_N$transition": 3, + "transition": 3, + "_N$normalColor": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_N$pressedColor": { + "__type__": "cc.Color", + "r": 211, + "g": 211, + "b": 211, + "a": 255 + }, + "pressedColor": { + "__type__": "cc.Color", + "r": 211, + "g": 211, + "b": 211, + "a": 255 + }, + "_N$hoverColor": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "hoverColor": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_N$disabledColor": { + "__type__": "cc.Color", + "r": 124, + "g": 124, + "b": 124, + "a": 255 + }, + "_N$normalSprite": null, + "_N$pressedSprite": null, + "pressedSprite": null, + "_N$hoverSprite": null, + "hoverSprite": null, + "_N$disabledSprite": null, + "_N$target": null, + "_id": "55c173c4-2081-4215-92f0-e205c04659c9" + }, + { + "__type__": "cc.Node", + "_name": "red", + "_objFlags": 0, + "_parent": { + "__id__": 734 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 738 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 56, + "height": 56 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 73.095, + 63.753, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "11711833-8dde-4d70-8eac-7bf38990b96b" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 737 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "e124860a-ae6d-4aac-a0e2-5efc12a67b22" + }, + "_type": 0, + "_sizeMode": 1, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": null, + "_id": "5f745abf-7461-4316-81df-2176c5495311" } -] \ No newline at end of file +] diff --git a/assets/Script/GameManager.ts b/assets/Script/GameManager.ts index 0375649a..634b5ffb 100644 --- a/assets/Script/GameManager.ts +++ b/assets/Script/GameManager.ts @@ -8,6 +8,7 @@ import Utils from "./module/Pay/Utils"; import { MiniGameManager } from "./Sdk/MiniGameManager"; import { MiniGameSdk } from "./Sdk/MiniGameSdk"; +import MiniProgramBenefitsBridge from "./module/MiniProgramBenefitsBridge"; const { ccclass, property } = cc._decorator; @@ -70,6 +71,7 @@ export default class GameManager extends cc.Component { if (typeof wx !== 'undefined' && wx !== null) { //@ts-ignore const launchOptions = wx.getLaunchOptionsSync(); + MiniProgramBenefitsBridge.instance.capture(launchOptions, "cold"); this.updateWucaiEntry(launchOptions); const query = launchOptions.query || {}; if (query.ge_ad_id) cc.fx.GameConfig.GM_INFO.ge_ad_id = query.ge_ad_id; @@ -171,6 +173,7 @@ export default class GameManager extends cc.Component { onShow(options?: any) { if (options) { + MiniProgramBenefitsBridge.instance.capture(options, "show"); this.updateWucaiEntry(options); } cc.audioEngine.resumeAll(); @@ -525,6 +528,7 @@ export default class GameManager extends cc.Component { cc.fx.GameTool.getHealth((data) => { this.load5 = true; }); + MiniProgramBenefitsBridge.instance.onLogin(data.data); this.load6 = true; cc.fx.GameTool.iosCanPay(); diff --git a/assets/Script/JiaZai.ts b/assets/Script/JiaZai.ts index cb1dc4e7..9fd11757 100644 --- a/assets/Script/JiaZai.ts +++ b/assets/Script/JiaZai.ts @@ -19,6 +19,7 @@ import { applyStarterPackStatus, starterPackRemaining, starterPackTimeText, star import { initProvinceLocator } from "./module/Position/GetPosition"; import LoadingCatAnimation from "./LoadingCatAnimation"; import BlockAssetManager from "./module/Tool/BlockAssetManager"; +import MiniProgramBenefitsBridge from "./module/MiniProgramBenefitsBridge"; const { ccclass, property } = cc._decorator; @ccclass @@ -84,6 +85,7 @@ export default class JiaZai extends cc.Component { private starterPackDefaultPosition: cc.Vec2 = null; private starterPackOpening = false; private starterPackChecking = false; + private benefitsEntryOffset: cc.Vec2 = null; // 缓存 reward 预制体 private static cachedRewardPrefab: cc.Prefab | null = null; @@ -846,6 +848,7 @@ export default class JiaZai extends cc.Component { } onDestroy() { + MiniProgramBenefitsBridge.instance.detach(this.node); this.homeAutomaticTasks = []; this.homePopupOpenRequest++; this._sRankRequestId++; @@ -1066,6 +1069,7 @@ export default class JiaZai extends cc.Component { this.refreshNewPlayerActivityButtons(); this.setAdaptation(); + MiniProgramBenefitsBridge.instance.attach(this.node); // 加载广告 // cc.fx.GameTool.preloadRewardedVideoAd().then((success) => { // if (success) { @@ -1149,6 +1153,7 @@ export default class JiaZai extends cc.Component { "xinshou", "yicon", "shop", + "chengxu", "jungle", "hammer", "posBtn", @@ -3116,7 +3121,7 @@ export default class JiaZai extends cc.Component { return top && top.getChildByName("xinshou"); } - /** Jungle 隐藏时由新手礼包补位;两者同时显示时恢复原布局。 */ + /** 新手礼包补位时,福利入口保持场景中配置的相对间距。 */ private refreshHomeActivityEntryLayout(): void { let starterPackButton = this.getStarterPackHomeButton(); let jungleButton = this.getJungleTreasureHomeButton(); @@ -3128,10 +3133,26 @@ export default class JiaZai extends cc.Component { this.starterPackDefaultPosition = cc.v2(starterPackButton.x, starterPackButton.y); } + const benefitsButton = starterPackButton.parent.getChildByName("chengxu"); + if (benefitsButton && !this.benefitsEntryOffset) { + this.benefitsEntryOffset = cc.v2( + benefitsButton.x - this.starterPackDefaultPosition.x, + benefitsButton.y - this.starterPackDefaultPosition.y, + ); + } + let targetPosition = starterPackButton.active && !jungleButton.active ? cc.v2(jungleButton.x, jungleButton.y) : this.starterPackDefaultPosition; starterPackButton.setPosition(targetPosition); + if (benefitsButton && this.benefitsEntryOffset) { + // Hidden activities do not reserve slots above the benefits entry. + const benefitsPosition = starterPackButton.active + ? cc.v2(targetPosition.x + this.benefitsEntryOffset.x, targetPosition.y + this.benefitsEntryOffset.y) + : jungleButton.active ? this.starterPackDefaultPosition : cc.v2(jungleButton.x, jungleButton.y); + benefitsButton.setPosition(benefitsPosition); + } + MiniProgramBenefitsBridge.instance.refreshEntry(); } private setStarterPackHomeButtonVisible(visible: boolean): void { @@ -4072,7 +4093,11 @@ export default class JiaZai extends cc.Component { checkStarter_pack() { if (this.deferHomePopupWhileTransfer("starterPack", () => this.checkStarter_pack())) return; - if (cc.fx.GameConfig.GM_INFO.level < 15 || !cc.fx.GameConfig.GM_INFO.canIos || this.starterPackChecking) return; + if (cc.fx.GameConfig.GM_INFO.level < 15 || !cc.fx.GameConfig.GM_INFO.canIos) { + this.refreshHomeActivityEntryLayout(); + return; + } + if (this.starterPackChecking) return; this.starterPackChecking = true; const apply = (res) => { this.starterPackChecking = false; diff --git a/assets/Script/module/MiniProgramBenefitsBridge.ts b/assets/Script/module/MiniProgramBenefitsBridge.ts new file mode 100644 index 00000000..4574c0f2 --- /dev/null +++ b/assets/Script/module/MiniProgramBenefitsBridge.ts @@ -0,0 +1,392 @@ +import LoadingCatAnimation from "../LoadingCatAnimation"; +import SevenDayGiftBootstrapApi from "../seven_day_gift/SevenDayGiftBootstrapApi"; + +declare const wx: any; + +const BUNDLE = "mini_program_benefits"; +const TASKS = ["favorite_entry", "desktop_entry"]; + +/** HomeScene entry bridge. UI and the reward adapter live in the lazy bundle. */ +export default class MiniProgramBenefitsBridge { + static readonly instance = new MiniProgramBenefitsBridge(); + private uid = ""; + private pendingEntries: { [task: string]: number } = {}; + private state: any = {}; + private diagnostics: any[] = []; + private home: cc.Node = null; + private entryNode: cc.Node = null; + private entryRed: cc.Node = null; + private entryFrame: cc.SpriteFrame = null; + private entryVisual: cc.Node = null; + private onEntryTouch = (): void => { this.open(); }; + private session: any = null; + private rewardRequests = 0; + private testMount = 0; + private testNode: cc.Node = null; + private testBundle: cc.AssetManager.Bundle = null; + private bundleUsers = 0; + private sharedBundle: cc.AssetManager.Bundle = null; + private releaseBundleUser(): void { + this.bundleUsers--; + if (this.bundleUsers === 0 && this.sharedBundle) { + this.sharedBundle.releaseAll(); + cc.assetManager.removeBundle(this.sharedBundle); + this.sharedBundle = null; + } + } + private listeners: Array<() => void> = []; + + isWechat(): boolean { + return cc.sys.platform === cc.sys.WECHAT_GAME && !!this.wxApi(); + } + private wxApi(): any { return typeof wx !== "undefined" ? wx : null; } + protected info(): any { return cc.fx.GameConfig.GM_INFO as any; } + getUid(): string { return this.uid; } + getState(): any { return this.state; } + getTestEnvironment() { return SevenDayGiftBootstrapApi.getTestEnvironment(); } + getTestSnapshot(): any { + return { uid: this.uid, level: this.info().level, environment: this.getTestEnvironment(), + loginWelfare: this.info().miniProgramWelfare, state: this.state, + eligibility: this.readEligibility(), diagnostics: this.getDiagnostics(), + entryVisible: !!(this.entryNode && this.entryNode.active), + redDot: !!(this.entryNode && this.entryNode.active && this.entryRed && this.entryRed.active), + panelBusy: !!this.session }; + } + setTestEligibility(task?: string): void { + if (!this.getTestEnvironment().allowed) throw new Error("仅独立测试服可操作"); + if (!this.uid) throw new Error("请等待登录完成"); + if (this.session) throw new Error("请先关闭福利弹窗并等待释放完成"); + if (task && TASKS.indexOf(task) < 0) throw new Error("未知入口类型"); + const eligibility = task ? this.readEligibility() : {}; + if (task) eligibility[task] = Date.now(); + cc.sys.localStorage.setItem(this.getEligibilityKey(), JSON.stringify(eligibility)); + this.pendingEntries = {}; + TASKS.forEach(id => this.state[id] = { ...this.state[id], eligibleAt: eligibility[id] || 0 }); + this.changed(); + } + private getEligibilityKey(): string { return "mini_program_benefits_eligibility_v1:" + this.uid; } + clearTestClaimCache(): void { + if (!this.getTestEnvironment().allowed) throw new Error("仅独立测试服可操作"); + if (!this.uid) throw new Error("请等待登录完成"); + if (this.session || this.rewardRequests) throw new Error("请先关闭福利弹窗并等待领取请求完成"); + const prop = cc.fx.StorageMessage.getStorage("prop"); + if (prop && prop.welfareCredits) { + const credits = { ...prop.welfareCredits }; + ["favorite", "desktop"].forEach(type => delete credits["welfare:" + this.uid + ":" + type]); + cc.fx.StorageMessage.setStorage("prop", { ...prop, welfareCredits: credits }); + } + const flags = this.info().miniProgramWelfare; + TASKS.forEach((task, index) => { + const key = index === 0 ? "favorite" : "desktop"; + this.state[task] = { eligibleAt: this.state[task] && this.state[task].eligibleAt || 0, + claimedAt: flags && flags[key] === true ? 1 : 0, acknowledged: true }; + }); + this.changed(); + } + private readEligibility(): any { + try { + const saved = JSON.parse(cc.sys.localStorage.getItem(this.getEligibilityKey()) || "{}"); + const result: any = {}; + TASKS.forEach(task => { + if (saved && typeof saved[task] === "number" && Number.isFinite(saved[task]) && saved[task] > 0) result[task] = saved[task]; + }); + return result; + } catch (_) { return {}; } + } + getRewardStorageKey(): string { return "mini_program_benefits_rewards_v1:" + this.uid; } + getDiagnostics(): any[] { return this.diagnostics.map(item => ({ ...item })); } + subscribe(callback: () => void): () => void { + this.listeners.push(callback); + return () => { this.listeners = this.listeners.filter(item => item !== callback); }; + } + private changed(): void { + this.refreshEntry(); + this.listeners.slice().forEach(callback => callback()); + } + + // Device-tested 1104/1023 record local eligibility; this is not server-verified entry proof. + capture(options: any, lifecycle: "cold" | "show"): void { + if (!this.isWechat()) return; + // Match the panel: cold launch options may describe an older entry after re-entry. + const api = this.wxApi(); + if (api && typeof api.getEnterOptionsSync === "function") { + try { + const current = api.getEnterOptionsSync(); + if (current && Number(current.scene) > 0) options = current; + } catch (_) { /* Older clients can still use the lifecycle callback options. */ } + } + this.diagnostics.push({ scene: Number(options && options.scene) || 0, lifecycle, observedAt: Date.now() }); + this.diagnostics = this.diagnostics.slice(-24); + const scene = Number(options && options.scene); + const task = scene === 1104 ? "favorite_entry" : scene === 1023 ? "desktop_entry" : ""; + if (task) { + this.pendingEntries[task] = Date.now(); + this.saveEntryEligibility(); + } + } + private saveEntryEligibility(): void { + if (!this.uid || !Object.keys(this.pendingEntries).length) return; + const eligibility = this.readEligibility(); + Object.keys(this.pendingEntries).forEach(task => { + eligibility[task] = eligibility[task] || this.pendingEntries[task]; + }); + try { cc.sys.localStorage.setItem(this.getEligibilityKey(), JSON.stringify(eligibility)); } + catch (_) { this.toast("入口资格保存失败,请从对应入口重新进入重试"); return; } + Object.keys(this.pendingEntries).forEach(task => { + this.state[task] = { ...this.state[task], eligibleAt: eligibility[task] }; + }); + this.pendingEntries = {}; + this.changed(); + } + onLogin(user: any): void { + if (!this.isWechat()) return; + const nextUid = String(user && user._id || this.info().uid || ""); + if (this.uid !== nextUid) { + this.close(); + if (this.uid) this.pendingEntries = {}; + } + this.uid = nextUid; + const welfare = user && user.miniProgramWelfare; + this.info().miniProgramWelfare = welfare; + const eligibility = this.uid ? this.readEligibility() : {}; + this.state = {}; + TASKS.forEach((task, index) => { + const key = index === 0 ? "favorite" : "desktop"; + this.state[task] = { eligibleAt: eligibility[task] || 0, claimedAt: welfare && welfare[key] === true ? 1 : 0, acknowledged: true }; + }); + this.saveEntryEligibility(); + this.changed(); + } + bindRewardApi(api: any): void { + if (this.session && !this.session.cancelled) this.session.api = api; + } + private async request(action: string, params: any = {}): Promise { + if (!this.uid) throw new Error("登录尚未完成,请稍后重试"); + const session = this.session; + if (!session || session.cancelled || !session.api) throw new Error("请重新打开福利面板"); + const uid = this.uid; + this.rewardRequests++; + let data: any; + try { data = await session.api.request(action, params, Number(this.info().level)); } + finally { this.rewardRequests--; } + if (uid !== this.uid) throw new Error("账号已切换,请重新打开"); + this.state = data.state; + this.changed(); + return data; + } + refresh(): Promise { return this.request("read"); } + claim(task: string): Promise { return this.request("claim", { task }); } + acknowledge(task: string, receiptId: string): Promise { return this.request("ack", { task, receiptId }); } + + attach(home: cc.Node): void { + const sceneEntry = cc.find("Load/Top/chengxu", home); + if (!this.isWechat()) { + if (sceneEntry) sceneEntry.active = false; + return; + } + if (this.home === home && this.entryNode && cc.isValid(this.entryNode)) return; + this.detach(); + this.home = home; + // 暂停加载测试面板;恢复测试时重新启用,并打开预制体 entry 节点。 + // this.mountTestPanel(home); + // HomeScene owns this node and its position; never replace or reposition it. + if (!sceneEntry) return; + const entry = this.entryNode = sceneEntry; + const sceneSprite = entry.getComponent(cc.Sprite); + if (!sceneSprite || !sceneSprite.spriteFrame) { + // Text fallback for isolated test scenes or a missing scene sprite. + const visual = this.entryVisual = new cc.Node("benefitsVisual"); + visual.parent = entry; visual.setContentSize(entry.getContentSize()); + const graphics = visual.addComponent(cc.Graphics); + graphics.fillColor = cc.color(246, 206, 115); + graphics.roundRect(-89, -74, 178, 148, 24); graphics.fill(); + const text = new cc.Node("label"); text.active = false; text.parent = visual; + const label = text.addComponent(cc.Label); + label.useSystemFont = true; label.fontFamily = "Arial"; + label.fontSize = 34; label.lineHeight = 41; + label.horizontalAlign = cc.Label.HorizontalAlign.CENTER; + label.verticalAlign = cc.Label.VerticalAlign.CENTER; + label.overflow = cc.Label.Overflow.SHRINK; + label.string = "小程序\n福利"; + text.setContentSize(168, 126); text.active = true; + text.color = cc.color(108, 60, 37); + // Only this small entry texture lives in resources; the UI bundle remains lazy. + if (cc.resources) cc.resources.load("texture/mini-program-benefits-entry", cc.SpriteFrame, (error, frame: cc.SpriteFrame) => { + if (error || !frame) return; + if (this.entryNode !== entry || this.entryVisual !== visual || !cc.isValid(visual, true)) { + frame.addRef(); frame.decRef(); return; + } + frame.addRef(); this.entryFrame = frame; + graphics.enabled = false; text.active = false; + const sprite = visual.addComponent(cc.Sprite); sprite.spriteFrame = frame; + sprite.sizeMode = cc.Sprite.SizeMode.CUSTOM; sprite.trim = false; + visual.setContentSize(entry.getContentSize()); + }); + } + // HomeScene binds this activity's badge directly to the shared UI/red sprite. + this.entryRed = entry.getChildByName("red"); + if (!this.entryRed) { + // Isolated test scenes may omit the serialized badge. + this.entryRed = new cc.Node("red"); this.entryRed.parent = entry; + this.entryRed.setPosition(73.095, 63.753); + this.entryRed.setContentSize(56, 56); + } + entry.on(cc.Node.EventType.TOUCH_END, this.onEntryTouch); + this.refreshEntry(); + } + detach(home?: cc.Node): void { + if (home && this.home !== home) return; + this.close(); + this.testMount++; + if (this.testNode && cc.isValid(this.testNode)) this.testNode.destroy(); + this.testNode = null; + if (this.testBundle) { + this.testBundle = null; + cc.director.once(cc.Director.EVENT_AFTER_DRAW, () => this.releaseBundleUser()); + } + if (this.entryNode && cc.isValid(this.entryNode)) { + this.entryNode.off(cc.Node.EventType.TOUCH_END, this.onEntryTouch); + this.entryNode.active = false; + } + if (this.entryVisual && cc.isValid(this.entryVisual)) this.entryVisual.destroy(); + if (this.entryRed && cc.isValid(this.entryRed)) this.entryRed.active = false; + this.entryVisual = null; + const frame = this.entryFrame; this.entryFrame = null; + if (frame) cc.director.once(cc.Director.EVENT_AFTER_DRAW, () => frame.decRef()); + this.entryNode = this.entryRed = this.home = null; + } + private mountTestPanel(home: cc.Node): void { + if (!this.getTestEnvironment().allowed) return; + const token = ++this.testMount; + this.bundleUsers++; + cc.assetManager.loadBundle(BUNDLE, (error, bundle) => { + if (error || !bundle) { this.releaseBundleUser(); this.toast("福利测试面板加载失败"); return; } + this.sharedBundle = bundle; + const valid = () => token === this.testMount && this.home === home + && cc.isValid(home, true) && this.getTestEnvironment().allowed; + if (!valid()) { this.releaseBundleUser(); return; } + bundle.load("test/BenefitsRuntimeTest", cc.Prefab, (loadError, prefab: cc.Prefab) => { + if (loadError || !prefab || !valid()) { this.releaseBundleUser(); return; } + const ctor = cc.js.getClassByName("BenefitsRuntimeTest"); + if (!ctor) { this.releaseBundleUser(); this.toast("请重新构建福利活动分包"); return; } + this.testBundle = bundle; + const node = this.testNode = cc.instantiate(prefab); + node.active = false; + const component: any = node.addComponent(ctor as any); + component.initialize(this); + node.parent = home; node.zIndex = 3002; node.active = true; + }); + }); + } + refreshEntry(): void { + if (!this.entryNode || !cc.isValid(this.entryNode)) return; + const allClaimed = TASKS.every(id => this.state[id] && this.state[id].claimedAt); + const pendingReceipt = TASKS.some(id => this.state[id] && this.state[id].claimedAt && !this.state[id].acknowledged); + // Keep the entry until an outstanding awarded receipt has been shown/acknowledged after response loss. + this.entryNode.active = Number(this.info().level) >= 1 && (!allClaimed || pendingReceipt); + this.entryRed.active = TASKS.some(id => this.state[id] && this.state[id].eligibleAt && !this.state[id].claimedAt) || pendingReceipt; + } + + async open(): Promise { + if (!this.home || !cc.isValid(this.home) || Number(this.info().level) < 1) return; + if (this.session) { + if (!this.session.cancelled) return; + await this.session.done; + return this.open(); // recheck after awaiting: multiple rapid reopen clicks still create one session + } + const session: any = { home: this.home, cancelled: false, bundle: null, node: null }; + this.session = session; + session.done = this.loadPanel(session); + await session.done; + } + private startEntryLoading(session: any): void { + const home: cc.Node = session.home; + const template = home.getChildByName("Loading") + || (home.parent && home.parent.getChildByName("Loading")); + if (!template) return; + const parent = template.parent; + const size = parent.getContentSize(); + const factor = Math.min(1, size.width / 1080, size.height / 1920); + const viewport = new cc.Node("BenefitsLoading"); + viewport.setContentSize(size.width / factor, size.height / factor); + viewport.scale = factor; viewport.parent = parent; viewport.zIndex = cc.macro.MAX_ZINDEX; + viewport.addComponent(cc.BlockInputEvents); + const loading = cc.instantiate(template); loading.parent = viewport; + // Clone only the existing visual; all animation remains in the shared implementation. + session.stopLoading = () => { + LoadingCatAnimation.stop(loading); + viewport.active = false; viewport.destroy(); + }; + LoadingCatAnimation.play(loading); + } + + private stopEntryLoading(session: any): void { + const stop = session.stopLoading; session.stopLoading = null; + if (stop) stop(); + } + + private async loadPanel(session: any): Promise { + this.bundleUsers++; + try { + this.startEntryLoading(session); + session.bundle = await new Promise((resolve, reject) => { + cc.assetManager.loadBundle(BUNDLE, (error, bundle) => error ? reject(error) : resolve(bundle)); + }); + this.sharedBundle = session.bundle; + if (session.cancelled || !cc.isValid(session.home)) return; + const bundle: cc.AssetManager.Bundle = session.bundle; + const prefab = await new Promise((resolve, reject) => { + bundle.load("prefab/BenefitsWindow", cc.Prefab, (error, asset) => error ? reject(error) : resolve(asset as cc.Prefab)); + }); + if (session.cancelled || !cc.isValid(session.home, true)) return; + session.node = cc.instantiate(prefab); + session.node.parent = session.home; session.node.zIndex = 3000; + const panel: any = session.node.getComponent("MiniProgramBenefitsPanel"); + if (!panel) throw new Error("福利预制体缺少控制组件"); + panel.init(this); + } catch (error) { + session.cancelled = true; + if (cc.isValid(session.home) && this.home === session.home) this.toast("福利加载失败,请重试"); + } finally { + this.stopEntryLoading(session); + session.loaded = true; + if (session.cancelled || !cc.isValid(session.home)) await this.releaseSession(session); + } + } + close(): void { + const session = this.session; + if (!session || session.cancelled) return; + session.cancelled = true; + this.stopEntryLoading(session); + if (session.node && cc.isValid(session.node)) { session.node.active = false; session.node.destroy(); } + if (session.loaded) session.done = this.releaseSession(session); + } + onPanelDestroyed(node: cc.Node): void { + if (this.session && this.session.node === node) this.close(); + } + private async releaseSession(session: any): Promise { + if (session.releasing) return session.releasing; + session.releasing = new Promise(resolve => { + const release = () => { + // Test entry and activity window share the same bundle; release after both leave. + this.releaseBundleUser(); + session.api = session.bundle = session.node = session.home = null; + if (this.session === session) this.session = null; + resolve(); + }; + if (session.node) { + if (cc.isValid(session.node)) session.node.destroy(); + // destroy() is deferred: release textures only after onDestroy has detached listeners/sprites. + cc.director.once(cc.Director.EVENT_AFTER_DRAW, release); + } else release(); + }); + return session.releasing; + } + toast(message: string): void { + const wx = this.wxApi(); + if (wx && wx.showToast) wx.showToast({ title: message, icon: "none", duration: 2500 }); + } +} + + + diff --git a/assets/Script/module/MiniProgramBenefitsBridge.ts.meta b/assets/Script/module/MiniProgramBenefitsBridge.ts.meta new file mode 100644 index 00000000..4a00f547 --- /dev/null +++ b/assets/Script/module/MiniProgramBenefitsBridge.ts.meta @@ -0,0 +1,10 @@ +{ + "ver": "1.1.0", + "uuid": "a5161766-f26e-47d5-8354-5605b1d925c5", + "importer": "typescript", + "isPlugin": false, + "loadPluginInWeb": true, + "loadPluginInNative": true, + "loadPluginInEditor": false, + "subMetas": {} +} \ No newline at end of file diff --git a/assets/Script/seven_day_gift/SevenDayGiftHost.ts b/assets/Script/seven_day_gift/SevenDayGiftHost.ts index 2abb07e6..9039ef7e 100644 --- a/assets/Script/seven_day_gift/SevenDayGiftHost.ts +++ b/assets/Script/seven_day_gift/SevenDayGiftHost.ts @@ -32,7 +32,8 @@ export default class SevenDayGiftHost extends cc.Component { onLoad() { if (this.node.parent) this.node.setContentSize(this.node.parent.getContentSize()); cc.game.on(cc.game.EVENT_SHOW, this.onGameShow, this); - this.loadTestEntry(); + // 暂停加载测试面板;恢复测试时重新启用,并打开预制体 entry 节点。 + // this.loadTestEntry(); if (CC_PREVIEW) return; this.queryActivity(true); } diff --git a/assets/mini_program_benefits.meta b/assets/mini_program_benefits.meta new file mode 100644 index 00000000..bf64ae73 --- /dev/null +++ b/assets/mini_program_benefits.meta @@ -0,0 +1,15 @@ +{ + "ver": "1.1.3", + "uuid": "15a3cae2-3ba9-4a53-a115-616f78ce9c4c", + "importer": "folder", + "isBundle": true, + "bundleName": "mini_program_benefits", + "priority": 1, + "compressionType": { + "wechatgame": "subpackage" + }, + "optimizeHotUpdate": {}, + "inlineSpriteFrames": {}, + "isRemoteBundle": {}, + "subMetas": {} +} \ No newline at end of file diff --git a/assets/mini_program_benefits/README.md b/assets/mini_program_benefits/README.md new file mode 100644 index 00000000..5bb22565 --- /dev/null +++ b/assets/mini_program_benefits/README.md @@ -0,0 +1,50 @@ +# 小程序福利活动 + +更新日期:2026-09-18。按当前工作区源码核对;这是文档总入口,不代表已上传发布。 + +## 文档导航 + +| 文档 | 用途 | +| --- | --- | +| [测试与验收](docs/mini-program-benefits-testing.md) | 白字面板操作、字段解释、回归步骤 | +| [接口与状态](docs/mini-program-welfare-backend.md) | 登录、领取、资产同步、失败重试限制 | +| [预制体维护](docs/mini-program-benefits-prefabs.md) | 编辑入口、节点约束、加载释放 | +| [0914 美术记录](docs/mini-program-benefits-art-0914.md) | 素材来源历史,不作为当前功能规范 | + +## 功能规则 + +| 任务 | 微信入口 scene | 内部任务 ID | 服务端 type | 每项奖励 | +| --- | --- | --- | --- | --- | +| 我的小游戏/小程序入口 | 1104 | favorite_entry | favorite | 冻结、锤子、魔法棒各 1 | +| 桌面入口 | 1023 | desktop_entry | desktop | 冻结、锤子、魔法棒各 1 | + +入口资格由客户端观察微信进入参数记录;“已添加”本身不授予资格。优先使用 getEnterOptionsSync 的有效 scene。登录前暂存资格,登录后按账号保存;普通退出重登保留,清缓存或换设备可能丢失。 + +首页仅在微信小游戏平台启用,GM_INFO.level >= 1 时展示正常福利入口。是否已领取以登录返回 miniProgramWelfare 为准,成功领取后更新内存。可领取或有待确认奖励时亮红点;两项都领取且没有待确认回执时隐藏入口。不会自动打开福利弹窗。 + +领奖先由 miniProgramWelfare 接口确认,再本地加道具并通过 userProp 上传总量。当前会话重试避免重复加奖;跨重启补偿限制见接口文档。 + +## 当前代码归属 + +| 目录/文件 | 职责 | +| --- | --- | +| script/MiniProgramBenefitsPanel.ts | 福利页面、引导、领取展示 | +| script/MiniProgramBenefitsReward.ts | 领取确认、加道具、总量上传 | +| prefab/、texture/、icons/ | 活动预制体、美术和图标 | +| test/BenefitsRuntimeTest.ts、对应 prefab | 首页白字测试面板 | +| assets/Script/module/MiniProgramBenefitsBridge.ts | 主包桥接:入口、登录、红点、分包生命周期 | +| assets/resources/texture/mini-program-benefits-entry.png | 原有 resources 分包中的首页入口图 | + +test/ 是普通目录,与活动共用 mini_program_benefits 分包;没有独立测试分包注册。独立预览场景、Mock 适配器和旧重置按钮已移除。自动化测试在 tools/,不作为游戏资源打包。 + +主要接入点为 GameManager.ts(启动/回前台、登录)、JiaZai.ts(挂载、卸载、布局补位)及 HomeScene.fire 的 Load/Top/chengxu。2026-09-18 工作区仍存在七日 Host、项目配置和四个 meta 删除等未提交变化;旧文档“已恢复”的描述不再适用,发布前需单独核对,不能全部归为福利改动。 + +## 加载与发布状态 + +正式环境点击福利入口时加载活动包,窗口销毁后释放。当前白字测试入口已暂停:Bridge.attach 中 mountTestPanel 调用已注释,BenefitsRuntimeTest.prefab 的 entry 未激活,各环境均不自动显示。测试代码仍保留在包内;恢复这两处后才按独立测试服门禁加载,并在测试面板与福利窗口都不再使用时释放共享包。 + +用户已反馈清理前的功能测试无问题。之后进行了移除 Mock、合并测试目录和共享资源释放调整,尚未重新构建、上传或完成这一版的真机回归。 + +2026-09-17 历史自动化记录:福利相关 41 项、新手礼包 37 项,共 78 项通过。测试使用隔离桩,不访问真实服务器;后续以实际运行输出为准。运行方式见测试文档。 + +2026-09-18 提交前复验:使用本机已安装的 TypeScript,福利客户端、奖励、新手礼包三个测试文件共 80 项通过;七日测试面板另 5 项通过。此前依赖缺失已通过指定模块路径解决。测试为本地隔离验证,尚不代表真机或线上验收完成。 diff --git a/assets/mini_program_benefits/README.md.meta b/assets/mini_program_benefits/README.md.meta new file mode 100644 index 00000000..2e4a36fa --- /dev/null +++ b/assets/mini_program_benefits/README.md.meta @@ -0,0 +1,6 @@ +{ + "ver": "2.0.2", + "uuid": "ea3e7d12-23cf-4df1-a2ad-7b564facf4df", + "importer": "text", + "subMetas": {} +} \ No newline at end of file diff --git a/assets/gacha_bundle/img/cat.meta b/assets/mini_program_benefits/docs.meta similarity index 81% rename from assets/gacha_bundle/img/cat.meta rename to assets/mini_program_benefits/docs.meta index 12976874..dab3e896 100644 --- a/assets/gacha_bundle/img/cat.meta +++ b/assets/mini_program_benefits/docs.meta @@ -1,6 +1,6 @@ { "ver": "1.1.3", - "uuid": "c9754f56-ad49-4bcc-a712-8f8e9e59dbb0", + "uuid": "cf08b9ce-43f1-45aa-8dab-d39d5d3499c8", "importer": "folder", "isBundle": false, "bundleName": "", diff --git a/assets/mini_program_benefits/docs/mini-program-benefits-art-0914.md b/assets/mini_program_benefits/docs/mini-program-benefits-art-0914.md new file mode 100644 index 00000000..6091eae7 --- /dev/null +++ b/assets/mini_program_benefits/docs/mini-program-benefits-art-0914.md @@ -0,0 +1,41 @@ +# 福利界面美术替换 · 0914(历史记录) + +归档说明(2026-09-17):本文保留 0914 素材来源及当时验证记录,不代表当前功能。当前已删除 Mock 和独立预览;guide-panel 改为预制体中的九宫格拉伸,不再运行时拆分网格。最新实现见 [活动总览](../README.md) 与 [预制体维护](mini-program-benefits-prefabs.md)。 + +替换开发包:`MiniProgramBenefits/MatchMaster`。 + +## 资源 + +福利弹窗资源位于 `assets/mini_program_benefits/texture/`。从 0914 素材包原样复制 PNG,生成独立 Cocos 2.4 SpriteFrame 元数据: + +| 文件 | 原素材 | 用途 | +| --- | --- | --- | +| panel | dikk | 主弹窗底板,九宫格拉伸 | +| guide-panel | 地块 | 指引底板,运行时分段重复网格 | +| task | dikuang | 任务行底板 | +| title-list | 小程序福利字 | 主标题 | +| title-favorite | 添加小程序字 | 小程序指引标题 | +| title-desktop | 添加到桌面大字 | 桌面指引标题 | +| guide-favorite | 添加小程序说明字 | 小程序操作说明 | +| guide-desktop | 添加桌面文字 | 桌面操作说明 | +| favorite | 图0 | 小程序图标 | +| desktop | shoujitu | 桌面图标 | +| view / claim | 查看小按钮 / 领取小按钮 | 随资格切换的按钮 | +| close | 项目 assets/res/close.png | 关闭按钮,独立副本 | + +首页入口图 `小程序福利.png` 放在 `assets/resources/texture/mini-program-benefits-entry.png`,只加载入口小图,不提前加载整个福利 Bundle。引用在离开首页时释放。 + +未导入 JPG 效果图、尺寸标注 PNG 或未使用的文字切片。 + +## 当时行为(已被当前实现替代) + +保留当前 Mock 资格、领取、确认、刷新、重置和退出逻辑。奖励仍为冻结、锤子、魔法棒各 1;效果图中的无限体力和金币未改为实际配置。美术缺失时继续显示文字占位。 + +## 当时验证记录 + +- 25 项自动测试(包含原有 23 项及入口图资源释放测试)。 +- 福利 Panel/Bridge/Mock 使用 Creator 2.4 类型定义进行类型检查。 +- Cocos Creator 2.4.15 浏览器引擎渲染四页;验证领取确认、指引返回及连续 20 次切页时运行时网格 SpriteFrame 的释放。 + +以上为 0914 当时的验证范围;当前构建及验收状态见最新测试文档。 + diff --git a/assets/mini_program_benefits/docs/mini-program-benefits-art-0914.md.meta b/assets/mini_program_benefits/docs/mini-program-benefits-art-0914.md.meta new file mode 100644 index 00000000..db7ea547 --- /dev/null +++ b/assets/mini_program_benefits/docs/mini-program-benefits-art-0914.md.meta @@ -0,0 +1,6 @@ +{ + "subMetas": {}, + "ver": "2.0.2", + "importer": "text", + "uuid": "f65f07bc-3e59-4df3-80f5-bff6770bc5c0" +} \ No newline at end of file diff --git a/assets/mini_program_benefits/docs/mini-program-benefits-prefabs.md b/assets/mini_program_benefits/docs/mini-program-benefits-prefabs.md new file mode 100644 index 00000000..93ee039c --- /dev/null +++ b/assets/mini_program_benefits/docs/mini-program-benefits-prefabs.md @@ -0,0 +1,41 @@ +# 小程序福利预制体维护 + +更新日期:2026-09-18。[返回活动总览](../README.md) + +## 编辑入口 + +活动预制体位于 assets/mini_program_benefits/prefab/,均属于 mini_program_benefits 分包。在 Cocos Creator 2.4.15 中双击编辑。 + +| 预制体 | 用途 | +| --- | --- | +| BenefitsWindow | 全屏遮罩、Motion 运动容器、控制组件及四个 prefab 属性引用 | +| BenefitsMain | 两个任务 Task0/Task1,View/Claim/Claimed 控制显示状态 | +| BenefitsFavoriteGuide | 收藏入口操作引导 | +| BenefitsDesktopGuide | 桌面入口操作引导 | +| BenefitsReward | 奖励遮罩、三种道具及数量展示 | + +四个引用属性 mainPrefab、favoritePrefab、desktopPrefab、rewardPrefab 均不可为空。保留节点名称与层级,脚本按名称绑定按钮和状态;可调整图片、尺寸、文字和位置。页面整体由脚本缩放适配,Motion 承担开关动画。 + +两个引导页的 Content/Background 引用同包 guide-panel SpriteFrame,使用九宫格拉伸;旧版运行时拆网格切片方案已不适用。 + +## 首页入口与补位 + +正式入口为 HomeScene.fire 的 Load/Top/chengxu,red 为红点。Bridge 优先使用场景已有 SpriteFrame;缺图时才动态加载 resources/texture/mini-program-benefits-entry 兜底。 + +JiaZai.refreshHomeActivityEntryLayout 控制补位:礼包可见时保持福利与礼包的相对间距;礼包隐藏但丛林宝藏可见时占礼包默认位;两者都隐藏时占丛林宝藏位。调整场景坐标后检查所有显隐组合。 + +## 测试面板 + +当前 mountTestPanel 调用被注释,测试 prefab 的 entry 未激活。以下动态挂载与共享包规则只在恢复测试入口后适用。 + +普通目录 test/ 下的 BenefitsRuntimeTest.prefab 保存内置 UI,主包桥接加载后动态添加 BenefitsRuntimeTest 组件。不要重复手动挂载该脚本。根节点下 entry 为白字入口,panel 为可关闭面板。 + +运行时会将 entry 的点击区域设置为 200 × 88,并在 lateUpdate 根据首页 Load/Top/rank 换算坐标放到排行榜左侧。调整 prefab 中 entry 的位置不能覆盖这一运行时定位逻辑。 + +## 加载与释放 + +正式入口加载 prefab/BenefitsWindow;主窗口的引用由 Cocos 加载依赖。三个内容页实例化一次,通过 active 切页;领奖时单独实例化 BenefitsReward,无 shop 或公共 RewardWindow 依赖。 + +恢复测试入口后,独立测试服先加载 test/BenefitsRuntimeTest,测试 UI 与业务 UI 共用活动 Bundle。关闭福利窗口不会释放白字仍使用的共享包;离开首页销毁测试 UI,所有持有者释放后才 releaseAll/removeBundle。释放安排在节点销毁之后,避免引用已释放资源。 + +当前各环境都不自动挂载测试面板,关闭福利窗口即可释放其活动包。代码或素材变更后须重新构建微信包,旧 build 产物不能作为当前版本验证依据。 diff --git a/assets/mini_program_benefits/docs/mini-program-benefits-prefabs.md.meta b/assets/mini_program_benefits/docs/mini-program-benefits-prefabs.md.meta new file mode 100644 index 00000000..7d374a96 --- /dev/null +++ b/assets/mini_program_benefits/docs/mini-program-benefits-prefabs.md.meta @@ -0,0 +1,6 @@ +{ + "subMetas": {}, + "ver": "2.0.2", + "importer": "text", + "uuid": "d094e0c7-81d3-47ef-a179-63eb78b97063" +} \ No newline at end of file diff --git a/assets/mini_program_benefits/docs/mini-program-benefits-testing.md b/assets/mini_program_benefits/docs/mini-program-benefits-testing.md new file mode 100644 index 00000000..1f01092c --- /dev/null +++ b/assets/mini_program_benefits/docs/mini-program-benefits-testing.md @@ -0,0 +1,70 @@ +# 小程序福利测试与验收 + +更新日期:2026-09-18。[返回活动总览](../README.md) + +## 白字入口(当前暂停) + +当前不会自动显示:MiniProgramBenefitsBridge.attach 中 mountTestPanel 调用已注释,BenefitsRuntimeTest.prefab 的 entry 未激活。以下面板操作及涉及白字的回归步骤均以恢复这两处并重新构建为前提;当前版应检查各环境白字均不出现。本次只更新文档,保留暂停状态。 + +恢复后,首页排行榜按钮左侧显示“福利测试”,点击区域为 200 × 88 设计单位,随界面缩放并跟随排行榜位置。白字入口不受首关或两项已领取的正常入口隐藏规则限制。 + +与七日活动复用同一环境判断:微信开发版/体验版,且测试地址和正式地址不同源时才加载并允许操作;正式版不显示。代码在 assets/mini_program_benefits/test/ 普通目录中,随活动分包加载,无独立测试包。重新构建后生效,不需要手动挂组件。 + +| 操作 | 效果 | +| --- | --- | +| 打开白字面板 | 刷新当前 UID、关卡、登录/领取快照、入口红点及最近微信 scene | +| 模拟收藏入口 | 给当前账号保存收藏资格,不伪造微信生命周期记录 | +| 模拟桌面入口 | 给当前账号保存桌面资格,不伪造微信生命周期记录 | +| 清本地资格 | 清当前账号两项资格,不清服务端领取标记、道具或奖励回执 | +| 清本地领取缓存 | 清当前账号两项 prop.welfareCredits 防重记录和内存领取回执;保留道具数量、入口资格、其他账号缓存及登录领取标记。需关闭福利并等待请求完成 | +| 打开福利 | 进入实际福利弹窗;要求登录完成并通过第 1 关,领取会影响测试账号 | + +修改资格或清领取缓存前须关闭福利窗口并等待释放结束。重新打开测试面板会更新快照,但不会重新请求服务器登录数据。重复测试同一账号领奖时,清本地领取缓存,由后端重置领取标记,再重新登录;清缓存不会扣回已发道具。 + +## 如何看字段 + +| 字段 | 含义 | +| --- | --- | +| 登录返回 miniProgramWelfare | favorite / desktop 为 false 表示未领取,true 表示已领取;当前会话领取成功也会更新 | +| 本地资格 {} | 当前账号尚未在本机保存对应入口资格 | +| favorite_entry / desktop_entry | 收藏福利 / 桌面福利 | +| eligibleAt | 资格时间戳;0 表示无资格 | +| claimedAt | 领取标记;0 表示未领,登录同步可能为 1,本次领取成功时为时间戳 | +| acknowledged | 奖励展示确认标记;必须结合 claimedAt 判断,单独 true 不代表领过 | +| deliveryPending | true 表示领取已确认,但道具同步尚待完成 | +| receiptId | 领奖回执,用于客户端加奖防重与展示确认 | +| scene / lifecycle / observedAt | 微信入口值、cold/show 生命周期、观察时间戳;只保留最近 24 条 | + +“当前领取状态”是客户端内存状态:资格来自本机,已领取状态来自登录/领奖结果,不是每次展示都查询服务器。普通入口如 1001 不会新增本活动资格。 + +## 建议回归顺序 + +1. 未过首关时进入首页:正常福利入口隐藏;测试服白字仍可用。 +2. 模拟两种入口资格,再通过首关:正常入口显示且红点亮。 +3. 分别打开引导与领取:确认两项各发冻结、锤子、魔法棒各 1,关闭奖励后状态更新。 +4. 两项完成:正常入口隐藏,白字仍可查看;清本地资格不会使已领取福利重新可领。 +5. 从微信实际收藏入口(1104)、桌面入口(1023)进入,核对记录;模拟按钮不能替代真实入口验证。 +6. 断网/上传失败后,在同一会话重新打开福利,确认不重复加奖;跨退出限制见接口文档。 +7. 连续打开关闭福利与白字面板、离开再回首页,检查界面和资源释放;检查正式版白字不显示。 + +## 自动化与当前验证范围 + +在项目根目录使用 Node.js 和 TypeScript 4.9+: + + node --test tools/tests/mini-program-benefits-client.test.cjs tools/tests/mini-program-benefits-reward.test.cjs tools/test-starter-pack.cjs + +可通过 TYPESCRIPT_PATH 指定 TypeScript 模块路径。测试在 tools/,使用隔离桩,不对真实服务器发请求。 + +2026-09-17 历史记录:福利 41 项、新手礼包 37 项,共 78 项通过;覆盖入口资格、登录状态、账号隔离、失败重试、重复发奖防护、资源共享释放及首页相关行为。源码检查未发现福利相关编译错误,不代表整个项目无历史编译错误。 + +用户已反馈清理前功能测试无问题。其后移除 Mock、合并测试分包等最终改动尚未重新构建/上传和完成真机回归。独立预览场景、Mock 适配器、旧重置按钮均已移除。 + +## 2026-09-18 核验与发布待办 + +首次执行因缺少 typescript 未启动。提交前使用本机已安装模块复验:上面三个文件共 80 项通过,tools/test-seven-day-debug.cjs 另 5 项通过。福利测试通过 TYPESCRIPT_PATH 指定模块;七日测试使用 NODE_PATH 指向包含 typescript 的 node_modules。package.json 已声明依赖,其他机器可安装开发依赖后运行;npm test 仍是占位命令。 + +- 已完成本次自动化复验;后续代码变动后重跑相关用例。 +- 重新构建微信包,验收真实 1104/1023 入口、登录字段、加奖及 userProp 同步。 +- 验证丛林宝藏和新手礼包显隐组合下的福利入口补位。 +- 验证双击领取、超时、切换账号、上传失败后的同会话重试;跨重启补偿限制见接口文档。 +- 留存构建版本、目标服务器、设备、验收日期和实际结果;本地源码核对不能证明线上已更新。 diff --git a/assets/mini_program_benefits/docs/mini-program-benefits-testing.md.meta b/assets/mini_program_benefits/docs/mini-program-benefits-testing.md.meta new file mode 100644 index 00000000..236891ea --- /dev/null +++ b/assets/mini_program_benefits/docs/mini-program-benefits-testing.md.meta @@ -0,0 +1,6 @@ +{ + "subMetas": {}, + "ver": "2.0.2", + "importer": "text", + "uuid": "0d1c616c-705c-48c8-a98a-cc1471ce9780" +} \ No newline at end of file diff --git a/assets/mini_program_benefits/docs/mini-program-welfare-backend.md b/assets/mini_program_benefits/docs/mini-program-welfare-backend.md new file mode 100644 index 00000000..798e50c1 --- /dev/null +++ b/assets/mini_program_benefits/docs/mini-program-welfare-backend.md @@ -0,0 +1,38 @@ +# 小程序福利接口与状态 + +更新日期:2026-09-18。以当前客户端实现为准。[返回活动总览](../README.md) + +## 状态来源 + +| 数据 | 来源与保存位置 | 说明 | +| --- | --- | --- | +| miniProgramWelfare.favorite / desktop | 登录接口返回,保存在运行时 GM_INFO | boolean;true 为已领取,领取确认成功后本会话也更新 | +| 入口资格 | 本机 mini_program_benefits_eligibility_v1: | favorite_entry、desktop_entry 对应正数时间戳;按账号隔离 | +| 当前领取状态 | Bridge 的内存 state | 登录时重建;包含资格、领取、展示确认及待同步状态 | +| prop.welfareCredits | 本地道具缓存 | 按福利回执记录已加奖,避免重试再次增加道具 | +| mini_program_benefits_rewards_v1: | 请求串行队列标识 | 当前代码不把完整领取状态写入这个同名存储键 | + +旧 Mock 数据不读取,也不迁移。清本地入口资格不改变服务器领取状态、道具数量或回执。完整运行时回执不跨登录/重启恢复。 + +## 接口流程 + +1. 登录提供 miniProgramWelfare: { favorite: boolean, desktop: boolean }。字段缺失或类型错误时,实际领取被拒绝并提示重新登录。 +2. 客户端检查已过首关、已获得对应入口资格及道具基数有效。 +3. Utils.POST("miniProgramWelfare", { uid, type }),type 为 favorite 或 desktop;Utils 自动附加 token,并按现有环境规则选址。 +4. code === 1 后更新已领取标记,生成 welfare:: 回执,设置 acknowledged=false、deliveryPending=true。 +5. 本地 prop.welfareCredits 无此回执时,冻结、锤子、魔法棒各加 1(道具 ID 2001、2002、2003),写入道具缓存并校验回执已保存。 +6. Utils.POST("userProp", { uid, action: "save", propType: 0, propData })。propData 为 JSON 字符串,包含 freeze、hammer、magic_wand 的当前总量,不是本次增加量。成功后 deliveryPending=false。 +7. 播放活动奖励展示,玩家关闭展示后 acknowledged=true。两项已领取且无未确认回执时隐藏首页入口。 + +领取确认不直接视为服务端已经加道具。当前客户端固定发放数量,不解析福利接口返回的奖励清单。完整成功/重复领取响应样本未随当前项目文档保存,客户端只使用 code === 1 和失败时的 msg;服务端必须保证已消费的领取不能再次返回可重复发奖的成功确认。 + +## 查询与重试边界 + +- 没有单独的福利状态查询接口接入。白字面板恢复启用后显示本次登录及领奖后的内存快照,当前入口已暂停。 +- 正常福利面板的 read 操作读取内存,并会重试尚未完成的道具上传;不是向服务器查询福利资格。 +- 同账号请求串行。账号切换后拒绝旧请求结果;miniProgramWelfare 和 userProp 每个请求等待上限均为 5500 ms,迟到或重复回调不重复处理。 +- 当前会话上传失败后重新打开福利可重试上传当前道具总量,已记录回执的奖励不重复增加。 +- 福利确认与道具保存是两个独立请求。确认成功响应丢失、确认后退出、重新登录或缓存丢失,可能造成“已领取但漏发/未同步”;现有客户端不能保证跨重启补偿。 +- userProp 是总量写入,不能保证多设备并发修改的原子性。可靠补发及跨设备一致性需要后端回执或原子发奖机制支持。 + +测试记录与发布状态统一见 [测试文档](mini-program-benefits-testing.md),不在此重复维护测试数量。 diff --git a/assets/mini_program_benefits/docs/mini-program-welfare-backend.md.meta b/assets/mini_program_benefits/docs/mini-program-welfare-backend.md.meta new file mode 100644 index 00000000..055d52bb --- /dev/null +++ b/assets/mini_program_benefits/docs/mini-program-welfare-backend.md.meta @@ -0,0 +1,6 @@ +{ + "subMetas": {}, + "ver": "2.0.2", + "importer": "text", + "uuid": "3bb97217-4d87-41fb-8a03-61588522e767" +} \ No newline at end of file diff --git a/assets/libs/dn-sdk-minigame.meta b/assets/mini_program_benefits/icons.meta similarity index 81% rename from assets/libs/dn-sdk-minigame.meta rename to assets/mini_program_benefits/icons.meta index ee68961c..68298e85 100644 --- a/assets/libs/dn-sdk-minigame.meta +++ b/assets/mini_program_benefits/icons.meta @@ -1,6 +1,6 @@ { "ver": "1.1.3", - "uuid": "543de93e-fba1-410a-a3cf-8b39b912464a", + "uuid": "7770e353-2f40-43bf-8ba2-4f48f2362f76", "importer": "folder", "isBundle": false, "bundleName": "", diff --git a/assets/mini_program_benefits/icons/freeze.png b/assets/mini_program_benefits/icons/freeze.png new file mode 100644 index 00000000..31bf597f Binary files /dev/null and b/assets/mini_program_benefits/icons/freeze.png differ diff --git a/assets/mini_program_benefits/icons/freeze.png.meta b/assets/mini_program_benefits/icons/freeze.png.meta new file mode 100644 index 00000000..931eb253 --- /dev/null +++ b/assets/mini_program_benefits/icons/freeze.png.meta @@ -0,0 +1,38 @@ +{ + "ver": "2.3.7", + "uuid": "28686dda-a277-4ea7-8bee-15e2feffe9d0", + "importer": "texture", + "type": "sprite", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": true, + "width": 316, + "height": 316, + "platformSettings": {}, + "subMetas": { + "freeze": { + "ver": "1.0.6", + "uuid": "9f43f6b5-7793-4797-9b0d-ba17117898a9", + "importer": "sprite-frame", + "rawTextureUuid": "28686dda-a277-4ea7-8bee-15e2feffe9d0", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0.5, + "trimX": 38, + "trimY": 12, + "width": 240, + "height": 291, + "rawWidth": 316, + "rawHeight": 316, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {} + } + } +} \ No newline at end of file diff --git a/assets/mini_program_benefits/icons/hammer.png b/assets/mini_program_benefits/icons/hammer.png new file mode 100644 index 00000000..ef6b3ba0 Binary files /dev/null and b/assets/mini_program_benefits/icons/hammer.png differ diff --git a/assets/mini_program_benefits/icons/hammer.png.meta b/assets/mini_program_benefits/icons/hammer.png.meta new file mode 100644 index 00000000..b1864409 --- /dev/null +++ b/assets/mini_program_benefits/icons/hammer.png.meta @@ -0,0 +1,38 @@ +{ + "ver": "2.3.7", + "uuid": "5e88b64d-25ac-4792-8ac6-4a86197bcbc3", + "importer": "texture", + "type": "sprite", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": true, + "width": 316, + "height": 316, + "platformSettings": {}, + "subMetas": { + "hammer": { + "ver": "1.0.6", + "uuid": "d2016222-467a-440f-9912-a45523322466", + "importer": "sprite-frame", + "rawTextureUuid": "5e88b64d-25ac-4792-8ac6-4a86197bcbc3", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": -0.5, + "offsetY": 0, + "trimX": 6, + "trimY": 0, + "width": 303, + "height": 316, + "rawWidth": 316, + "rawHeight": 316, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {} + } + } +} \ No newline at end of file diff --git a/assets/mini_program_benefits/icons/magic.png b/assets/mini_program_benefits/icons/magic.png new file mode 100644 index 00000000..c47c55d5 Binary files /dev/null and b/assets/mini_program_benefits/icons/magic.png differ diff --git a/assets/mini_program_benefits/icons/magic.png.meta b/assets/mini_program_benefits/icons/magic.png.meta new file mode 100644 index 00000000..ebde0fb1 --- /dev/null +++ b/assets/mini_program_benefits/icons/magic.png.meta @@ -0,0 +1,38 @@ +{ + "ver": "2.3.7", + "uuid": "51cbf9ee-9c8b-4d2a-92dc-3d57610acc57", + "importer": "texture", + "type": "sprite", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": true, + "width": 316, + "height": 316, + "platformSettings": {}, + "subMetas": { + "magic": { + "ver": "1.0.6", + "uuid": "93a1c53b-7530-429e-a8dd-2e60e0ade38e", + "importer": "sprite-frame", + "rawTextureUuid": "51cbf9ee-9c8b-4d2a-92dc-3d57610acc57", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 8.5, + "offsetY": -7.5, + "trimX": 25, + "trimY": 17, + "width": 283, + "height": 297, + "rawWidth": 316, + "rawHeight": 316, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {} + } + } +} \ No newline at end of file diff --git a/assets/mini_program_benefits/prefab.meta b/assets/mini_program_benefits/prefab.meta new file mode 100644 index 00000000..ecb4f12c --- /dev/null +++ b/assets/mini_program_benefits/prefab.meta @@ -0,0 +1,13 @@ +{ + "ver": "1.1.3", + "uuid": "3bddd4a5-3d93-4918-a111-b2c0d1303fc9", + "importer": "folder", + "isBundle": false, + "bundleName": "", + "priority": 1, + "compressionType": {}, + "optimizeHotUpdate": {}, + "inlineSpriteFrames": {}, + "isRemoteBundle": {}, + "subMetas": {} +} \ No newline at end of file diff --git a/assets/mini_program_benefits/prefab/BenefitsDesktopGuide.prefab b/assets/mini_program_benefits/prefab/BenefitsDesktopGuide.prefab new file mode 100644 index 00000000..d940f59a --- /dev/null +++ b/assets/mini_program_benefits/prefab/BenefitsDesktopGuide.prefab @@ -0,0 +1,2617 @@ +[ + { + "__type__": "cc.Prefab", + "_name": "", + "_objFlags": 0, + "_native": "", + "data": { + "__id__": 1 + }, + "optimizationPolicy": 0, + "asyncLoadAssets": false, + "readonly": false + }, + { + "__type__": "cc.Node", + "_name": "BenefitsDesktopGuide", + "_objFlags": 0, + "_parent": null, + "_children": [ + { + "__id__": 3 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 2 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 950, + "height": 1064 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "84970782-b3d5-4bcc-a5ad-34b3bb53b523" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "bfb96269-e8ef-46d0-9e5e-a8c4289d3a1f", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Content", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [ + { + "__id__": 5 + }, + { + "__id__": 8 + }, + { + "__id__": 11 + }, + { + "__id__": 14 + }, + { + "__id__": 17 + }, + { + "__id__": 70 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 4 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 950, + "height": 940 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + -108, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "bcfb2198-3a02-489c-b1fc-95908347d0a8" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "7382ea1f-2c36-4f11-bee9-1d4dceddcd35", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Background", + "_objFlags": 0, + "_parent": { + "__id__": 3 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 7 + } + ], + "_prefab": { + "__id__": 6 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 902, + "height": 940 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 83, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "2655308f-b973-4b8d-ba18-12af95adc741" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "f9de784e-466b-4093-bf10-e3dbb910599a", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 5 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "77480e0d-fe09-4873-8aea-61df6b4bbf64" + }, + "_type": 1, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "6e10fd97-1df3-408f-b860-252c9509b119" + }, + { + "__type__": "cc.Node", + "_name": "Title", + "_objFlags": 0, + "_parent": { + "__id__": 3 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 10 + } + ], + "_prefab": { + "__id__": 9 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 740, + "height": 239.41176470588235 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 510, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "8989f07b-882c-4ac6-9ffc-4514e899e9d0" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "a03982e3-8e00-4ffe-a2a9-8a74c8ff7157", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 8 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "1ee4a1a7-9771-4505-8d96-3ebe899d21f5" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "b668d98e-f37c-4d33-a2b2-524d3d19f567" + }, + { + "__type__": "cc.Node", + "_name": "Close", + "_objFlags": 0, + "_parent": { + "__id__": 3 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 13 + } + ], + "_prefab": { + "__id__": 12 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 92, + "height": 92 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 403, + 443, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "e5a78636-3067-40c4-9632-2c1ca2e07446" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "40f47ac3-741e-4f8b-b1be-14874802592e", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 11 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "67398214-36f6-46c1-a5e8-5b1fc859281a" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "f902fffa-afc2-4acb-8dd3-388bfe6758f7" + }, + { + "__type__": "cc.Node", + "_name": "Instructions", + "_objFlags": 0, + "_parent": { + "__id__": 3 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 16 + } + ], + "_prefab": { + "__id__": 15 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 765, + "height": 483.54771784232366 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 12, + 88.22614107883817, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "f1f13624-7188-4263-89b5-14bdf7cd1b20" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "1023a4a9-386b-4f08-bfbc-497bb18bb85f", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 14 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "371e7dd2-4438-440b-b1b3-b599d1c325ca" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "284428ed-159f-4dfa-8b2c-e76dc92e2187" + }, + { + "__type__": "cc.Node", + "_name": "Rewards", + "_objFlags": 0, + "_parent": { + "__id__": 3 + }, + "_children": [ + { + "__id__": 19 + }, + { + "__id__": 36 + }, + { + "__id__": 53 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 18 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + -240, + 0, + 0, + 0, + 0, + 1, + 1.05, + 1.05, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "c948712d-4603-42c4-81a4-234203e40883" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "9fa20512-2147-4755-8113-740c0d450968", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Item0", + "_objFlags": 0, + "_parent": { + "__id__": 17 + }, + "_children": [ + { + "__id__": 21 + }, + { + "__id__": 24 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 20 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 180, + "height": 210 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -133, + 10, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "437974d1-5f6a-4fdd-bcee-9d978589c79e" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "0b7dd9df-329a-44e0-8f5c-9a294d277472", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Icon", + "_objFlags": 0, + "_parent": { + "__id__": 19 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 23 + } + ], + "_prefab": { + "__id__": 22 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 89.0721649484536, + "height": 108 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "eb05f630-7acd-4dab-8ae5-29c64ddb0545" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "202715d9-d505-4867-a8bb-b6293a5a92bf", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 21 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "9f43f6b5-7793-4797-9b0d-ba17117898a9" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": null, + "_id": "ab5047c4-eb32-4eb7-aa0f-3033039536db" + }, + { + "__type__": "cc.Node", + "_name": "Quantity", + "_objFlags": 0, + "_parent": { + "__id__": 19 + }, + "_children": [ + { + "__id__": 26 + }, + { + "__id__": 29 + }, + { + "__id__": 32 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 25 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "a59cd751-6191-47a0-a895-f78a47ddd67d" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "712045e7-818d-440f-aa3f-cf1ec1e9f08b", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Times", + "_objFlags": 0, + "_parent": { + "__id__": 24 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 28 + } + ], + "_prefab": { + "__id__": 27 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 26.15625, + "height": 27 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 9.680179696449024, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "4429f8a7-351c-4148-9280-18f864d62ee5" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "2a2ec882-33e6-4ca3-8bb3-0d227ccbbb2f", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 26 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "26ab48f6-c12d-48be-90c7-e06d6a075945" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "787fbdae-e4b6-4f58-a34c-d29f5d2f9d0f" + }, + { + "__type__": "cc.Node", + "_name": "One", + "_objFlags": 0, + "_parent": { + "__id__": 24 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 31 + } + ], + "_prefab": { + "__id__": 30 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 33.77777777777778, + "height": 38 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 37.64719358533792, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "9c16dc79-ec22-4f45-a755-94bffad9848a" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "a34d3540-5377-4ffc-a2b3-864fe98c2fb0", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 29 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "011c8cfa-9a31-4c2c-8e40-13d8ef5cba75" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "f4709f27-b6b8-47ee-ac3e-5ea3cd8de29d" + }, + { + "__type__": "cc.Node", + "_name": "Count", + "_objFlags": 0, + "_parent": { + "__id__": 24 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 34 + }, + { + "__id__": 35 + } + ], + "_prefab": { + "__id__": 33 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 90, + "height": 50 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 16.536082474226802, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "c74eda5f-17cb-4cdc-9234-fa158046b0c4" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "49f64793-523f-49eb-be03-e3ccd7eaadbb", + "sync": false + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 32 + }, + "_enabled": true, + "_materials": [], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "×2", + "_N$string": "×2", + "_fontSize": 36, + "_lineHeight": 43, + "_enableWrapText": false, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 2, + "_N$cacheMode": 0, + "_id": "a4e448c0-b827-44db-94f2-f55576fc20bf", + "_N$fontSize": 36, + "_N$enableWrapText": true, + "_fontFamily": "Arial" + }, + { + "__type__": "cc.LabelOutline", + "_name": "", + "_objFlags": 0, + "_enabled": true, + "_id": "5efe560e-9fc6-4eb0-85de-352dd5369e17", + "node": { + "__id__": 32 + }, + "_color": { + "__type__": "cc.Color", + "r": 126, + "g": 75, + "b": 42, + "a": 255 + }, + "_width": 3 + }, + { + "__type__": "cc.Node", + "_name": "Item1", + "_objFlags": 0, + "_parent": { + "__id__": 17 + }, + "_children": [ + { + "__id__": 38 + }, + { + "__id__": 41 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 37 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 180, + "height": 210 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 10, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "08185166-5907-47a4-9154-421073eea55a" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "5addc8ae-3834-4321-b92c-fcdb60fa905e", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Icon", + "_objFlags": 0, + "_parent": { + "__id__": 36 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 40 + } + ], + "_prefab": { + "__id__": 39 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 103.55696202531645, + "height": 108 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "5d3a3585-17e0-40a4-b4e6-a040211571db" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "9d6d4578-37c3-4b5a-83a8-7f6bd20d5c0b", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 38 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "d2016222-467a-440f-9912-a45523322466" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": null, + "_id": "bb0848c5-609d-4e79-b813-24f3afd697d4" + }, + { + "__type__": "cc.Node", + "_name": "Quantity", + "_objFlags": 0, + "_parent": { + "__id__": 36 + }, + "_children": [ + { + "__id__": 43 + }, + { + "__id__": 46 + }, + { + "__id__": 49 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 42 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "78fa3583-6716-4d80-aaf0-77ef2bee4530" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "f7b6ec3f-c3de-45f6-b70e-779473c9509a", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Times", + "_objFlags": 0, + "_parent": { + "__id__": 41 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 45 + } + ], + "_prefab": { + "__id__": 44 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 26.15625, + "height": 27 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 16.922578234880447, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "c9b40e72-d6da-4f42-ad0b-cb832da7ef02" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "82eb5707-da52-4496-8706-71862a238907", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 43 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "26ab48f6-c12d-48be-90c7-e06d6a075945" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "bcb9df32-f84e-4c27-848e-94c4bc89fc0c" + }, + { + "__type__": "cc.Node", + "_name": "One", + "_objFlags": 0, + "_parent": { + "__id__": 41 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 48 + } + ], + "_prefab": { + "__id__": 47 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 33.77777777777778, + "height": 38 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 44.88959212376933, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "d08ccaa3-393e-4c67-b57d-f839972c7b15" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "f5c3030e-c9b2-4cb3-b2b8-b5cda3d3c8cd", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 46 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "011c8cfa-9a31-4c2c-8e40-13d8ef5cba75" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "e6b37c22-7670-4830-839d-13cd3378a612" + }, + { + "__type__": "cc.Node", + "_name": "Count", + "_objFlags": 0, + "_parent": { + "__id__": 41 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 51 + }, + { + "__id__": 52 + } + ], + "_prefab": { + "__id__": 50 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 90, + "height": 50 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 23.778481012658226, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "ffe15378-0f1d-417b-b988-04a569af8d61" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "40373bb7-6a0f-423b-a46d-ade6b798cffd", + "sync": false + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 49 + }, + "_enabled": true, + "_materials": [], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "×2", + "_N$string": "×2", + "_fontSize": 36, + "_lineHeight": 43, + "_enableWrapText": false, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 2, + "_N$cacheMode": 0, + "_id": "f89491ec-01e4-44ae-b2a1-9f31e7fac305", + "_N$fontSize": 36, + "_N$enableWrapText": true, + "_fontFamily": "Arial" + }, + { + "__type__": "cc.LabelOutline", + "_name": "", + "_objFlags": 0, + "_enabled": true, + "_id": "cc856d8b-3795-422c-a5ac-4ef72d137a21", + "node": { + "__id__": 49 + }, + "_color": { + "__type__": "cc.Color", + "r": 126, + "g": 75, + "b": 42, + "a": 255 + }, + "_width": 3 + }, + { + "__type__": "cc.Node", + "_name": "Item2", + "_objFlags": 0, + "_parent": { + "__id__": 17 + }, + "_children": [ + { + "__id__": 55 + }, + { + "__id__": 58 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 54 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 180, + "height": 210 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 133, + 10, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "60c74025-11f4-4712-beee-3f6aeeb0e429" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "d3f13b9e-fe6b-4189-a834-7cfea1d42b4f", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Icon", + "_objFlags": 0, + "_parent": { + "__id__": 53 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 57 + } + ], + "_prefab": { + "__id__": 56 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 102.9090909090909, + "height": 108 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "cc547ced-da9b-45de-8d20-16be9748d90c" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "d7e63147-02f9-45bd-82a6-91a73eff3dcd", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 55 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "93a1c53b-7530-429e-a8dd-2e60e0ade38e" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": null, + "_id": "84b04e21-4ad6-47f2-a0b9-96384a24a904" + }, + { + "__type__": "cc.Node", + "_name": "Quantity", + "_objFlags": 0, + "_parent": { + "__id__": 53 + }, + "_children": [ + { + "__id__": 60 + }, + { + "__id__": 63 + }, + { + "__id__": 66 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 59 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "65e36a8a-7330-44a6-ba5c-1c5e90a17c74" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "f47164a1-edd4-47d6-96e8-36f48bfd6a9a", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Times", + "_objFlags": 0, + "_parent": { + "__id__": 58 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 62 + } + ], + "_prefab": { + "__id__": 61 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 26.15625, + "height": 27 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 16.598642676767675, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "bfe13827-90b3-499b-9297-7e9b9e61e02d" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "d848aa54-7e8f-4f00-9538-de67976f8255", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 60 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "26ab48f6-c12d-48be-90c7-e06d6a075945" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "657caf40-ea03-4943-952e-4d060a26a7ab" + }, + { + "__type__": "cc.Node", + "_name": "One", + "_objFlags": 0, + "_parent": { + "__id__": 58 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 65 + } + ], + "_prefab": { + "__id__": 64 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 33.77777777777778, + "height": 38 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 44.56565656565657, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "3c27b6ea-6e82-47f4-a8f9-c3f94f65e413" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "f1bf7632-fbad-4377-b23c-e84257ac79eb", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 63 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "011c8cfa-9a31-4c2c-8e40-13d8ef5cba75" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "4fd68ff9-1134-4487-92a7-28786e5e4888" + }, + { + "__type__": "cc.Node", + "_name": "Count", + "_objFlags": 0, + "_parent": { + "__id__": 58 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 68 + }, + { + "__id__": 69 + } + ], + "_prefab": { + "__id__": 67 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 90, + "height": 50 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 23.454545454545453, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "43786db4-2da5-4ff4-aa93-4e10c4c33dc6" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "cb1ef548-cf93-4e87-9186-d6b9deb4d474", + "sync": false + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 66 + }, + "_enabled": true, + "_materials": [], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "×2", + "_N$string": "×2", + "_fontSize": 36, + "_lineHeight": 43, + "_enableWrapText": false, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 2, + "_N$cacheMode": 0, + "_id": "7b3a2a1f-9512-41be-99c1-3712aa58a5d0", + "_N$fontSize": 36, + "_N$enableWrapText": true, + "_fontFamily": "Arial" + }, + { + "__type__": "cc.LabelOutline", + "_name": "", + "_objFlags": 0, + "_enabled": true, + "_id": "4a662e3b-74ee-4814-8d7e-10fbdb298a41", + "node": { + "__id__": 66 + }, + "_color": { + "__type__": "cc.Color", + "r": 126, + "g": 75, + "b": 42, + "a": 255 + }, + "_width": 3 + }, + { + "__type__": "cc.Node", + "_name": "Message", + "_objFlags": 0, + "_parent": { + "__id__": 3 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 72 + } + ], + "_prefab": { + "__id__": 71 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 760, + "height": 38 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + -351, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "789eb5e0-17f3-4f80-b44a-f8a348fc7951" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "6ab4650d-4ee4-45a3-b180-68edb392756d", + "sync": false + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 70 + }, + "_enabled": true, + "_materials": [], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "", + "_N$string": "", + "_fontSize": 23, + "_lineHeight": 30, + "_enableWrapText": false, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 2, + "_N$cacheMode": 0, + "_id": "6039fb39-0d87-47d3-b1d7-33fa0ba4d479", + "_N$fontSize": 23, + "_N$enableWrapText": true, + "_fontFamily": "Arial" + } +] diff --git a/assets/mini_program_benefits/prefab/BenefitsDesktopGuide.prefab.meta b/assets/mini_program_benefits/prefab/BenefitsDesktopGuide.prefab.meta new file mode 100644 index 00000000..e49fdda8 --- /dev/null +++ b/assets/mini_program_benefits/prefab/BenefitsDesktopGuide.prefab.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.3.2", + "uuid": "18d25094-31fe-4576-be2a-36b8733c0b70", + "importer": "prefab", + "optimizationPolicy": "AUTO", + "asyncLoadAssets": false, + "readonly": false, + "subMetas": {} +} \ No newline at end of file diff --git a/assets/mini_program_benefits/prefab/BenefitsFavoriteGuide.prefab b/assets/mini_program_benefits/prefab/BenefitsFavoriteGuide.prefab new file mode 100644 index 00000000..2dbb1a78 --- /dev/null +++ b/assets/mini_program_benefits/prefab/BenefitsFavoriteGuide.prefab @@ -0,0 +1,2617 @@ +[ + { + "__type__": "cc.Prefab", + "_name": "", + "_objFlags": 0, + "_native": "", + "data": { + "__id__": 1 + }, + "optimizationPolicy": 0, + "asyncLoadAssets": false, + "readonly": false + }, + { + "__type__": "cc.Node", + "_name": "BenefitsFavoriteGuide", + "_objFlags": 0, + "_parent": null, + "_children": [ + { + "__id__": 3 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 2 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 950, + "height": 1234 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "658a5b6c-5e6b-405e-8bf4-81ee4794c9ea" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "06c47b89-b1ea-4d4b-8446-385c08964b34", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Content", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [ + { + "__id__": 5 + }, + { + "__id__": 8 + }, + { + "__id__": 11 + }, + { + "__id__": 14 + }, + { + "__id__": 17 + }, + { + "__id__": 70 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 4 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 950, + "height": 1110 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + -23, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "a474e10f-6256-44b1-94bd-47c7a0bfe370" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "7b72a190-aafe-4248-9f59-158ddb5fbc2b", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Background", + "_objFlags": 0, + "_parent": { + "__id__": 3 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 7 + } + ], + "_prefab": { + "__id__": 6 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 902, + "height": 1110 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + -2, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "fb5eecc6-99b6-4180-9237-b6973cb5dfd0" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "8cb8334d-5427-42e4-ab4c-c25cedef2956", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 5 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "77480e0d-fe09-4873-8aea-61df6b4bbf64" + }, + "_type": 1, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "db0759af-f8ad-4e81-b738-9cba4e9ced16" + }, + { + "__type__": "cc.Node", + "_name": "Title", + "_objFlags": 0, + "_parent": { + "__id__": 3 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 10 + } + ], + "_prefab": { + "__id__": 9 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 740, + "height": 239.41176470588235 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 510, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "23e6e4d4-472a-4452-81a8-e1c20a43217b" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "eb3e7262-1120-4245-b62e-4f1eb6828c9c", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 8 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "6df5bfb7-df44-4981-b6cf-b183290a991e" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "9b608b60-9c30-4ba6-b925-8932aa9edead" + }, + { + "__type__": "cc.Node", + "_name": "Close", + "_objFlags": 0, + "_parent": { + "__id__": 3 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 13 + } + ], + "_prefab": { + "__id__": 12 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 92, + "height": 92 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 403, + 443, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "b3885962-3c84-439e-bb3f-206eef1db56c" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "2e7ea12c-1542-4f6f-b0e5-e1dec199d55b", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 11 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "67398214-36f6-46c1-a5e8-5b1fc859281a" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "2e8be91d-d633-492e-8edd-49bf08561772" + }, + { + "__type__": "cc.Node", + "_name": "Instructions", + "_objFlags": 0, + "_parent": { + "__id__": 3 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 16 + } + ], + "_prefab": { + "__id__": 15 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 765, + "height": 622 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 12, + 19, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "6c37a581-4fc5-4f44-9f9b-cd8d7d5ea775" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "dca00160-5bf2-4af4-8712-a711f5f366e9", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 14 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "c2ef578d-39d4-44a6-a2c5-5af635ae1492" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "29f1acbc-4c7a-4e05-989e-0056df906bc8" + }, + { + "__type__": "cc.Node", + "_name": "Rewards", + "_objFlags": 0, + "_parent": { + "__id__": 3 + }, + "_children": [ + { + "__id__": 19 + }, + { + "__id__": 36 + }, + { + "__id__": 53 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 18 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + -410, + 0, + 0, + 0, + 0, + 1, + 1.05, + 1.05, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "776a0a70-680e-4b5a-a929-512ca11e0b22" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "dfd13f68-e234-42c8-ab47-51ad2fc3585b", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Item0", + "_objFlags": 0, + "_parent": { + "__id__": 17 + }, + "_children": [ + { + "__id__": 21 + }, + { + "__id__": 24 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 20 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 180, + "height": 210 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -133, + 10, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "1ad57e62-ef4a-4f66-83b9-e2c872d359de" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "3af2280b-388c-45c1-8cd0-cb38ed4f5ec0", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Icon", + "_objFlags": 0, + "_parent": { + "__id__": 19 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 23 + } + ], + "_prefab": { + "__id__": 22 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 89.0721649484536, + "height": 108 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "0263e641-220e-4d33-bc31-80f27d078ec7" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "78ca57e0-e571-4793-a241-43f41566cd63", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 21 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "9f43f6b5-7793-4797-9b0d-ba17117898a9" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": null, + "_id": "11af22c1-59c7-4047-a3b5-ad33d5eb8af5" + }, + { + "__type__": "cc.Node", + "_name": "Quantity", + "_objFlags": 0, + "_parent": { + "__id__": 19 + }, + "_children": [ + { + "__id__": 26 + }, + { + "__id__": 29 + }, + { + "__id__": 32 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 25 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "bff314cd-6932-4b03-a20b-fadbbed28391" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "3db13c60-6f4f-40c4-a3bd-d8d778a554d9", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Times", + "_objFlags": 0, + "_parent": { + "__id__": 24 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 28 + } + ], + "_prefab": { + "__id__": 27 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 26.15625, + "height": 27 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 9.680179696449024, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "8287394c-041d-4ecd-ada1-2bbf404c5dbb" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "82e8f299-4418-488a-97e7-4246a8a0eb5b", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 26 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "26ab48f6-c12d-48be-90c7-e06d6a075945" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "bb3ecf89-01c3-4b1f-8312-9478644f3df8" + }, + { + "__type__": "cc.Node", + "_name": "One", + "_objFlags": 0, + "_parent": { + "__id__": 24 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 31 + } + ], + "_prefab": { + "__id__": 30 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 33.77777777777778, + "height": 38 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 37.64719358533792, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "5dd25d3f-a70f-4531-bfc6-e53fd1861456" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "a8b442cc-c794-4974-a089-4fde6d47b332", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 29 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "011c8cfa-9a31-4c2c-8e40-13d8ef5cba75" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "079ff473-1cbb-4015-98e8-decd0c0346b4" + }, + { + "__type__": "cc.Node", + "_name": "Count", + "_objFlags": 0, + "_parent": { + "__id__": 24 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 34 + }, + { + "__id__": 35 + } + ], + "_prefab": { + "__id__": 33 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 90, + "height": 50 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 16.536082474226802, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "bb0b3650-9d2a-4d0f-a210-278ac954b9d1" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "62020936-e60e-4b9a-928a-6e594759e898", + "sync": false + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 32 + }, + "_enabled": true, + "_materials": [], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "×2", + "_N$string": "×2", + "_fontSize": 36, + "_lineHeight": 43, + "_enableWrapText": false, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 2, + "_N$cacheMode": 0, + "_id": "c8896f48-8128-496e-b925-d26a1ff3fd30", + "_N$fontSize": 36, + "_N$enableWrapText": true, + "_fontFamily": "Arial" + }, + { + "__type__": "cc.LabelOutline", + "_name": "", + "_objFlags": 0, + "_enabled": true, + "_id": "a6b0e280-4369-43e6-bb0e-8434e480bf8e", + "node": { + "__id__": 32 + }, + "_color": { + "__type__": "cc.Color", + "r": 126, + "g": 75, + "b": 42, + "a": 255 + }, + "_width": 3 + }, + { + "__type__": "cc.Node", + "_name": "Item1", + "_objFlags": 0, + "_parent": { + "__id__": 17 + }, + "_children": [ + { + "__id__": 38 + }, + { + "__id__": 41 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 37 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 180, + "height": 210 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 10, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "467e2c19-420c-4a93-b46c-705f7f7a1684" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "cf750f97-b2cf-4324-9ee4-e0442bfc3f6c", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Icon", + "_objFlags": 0, + "_parent": { + "__id__": 36 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 40 + } + ], + "_prefab": { + "__id__": 39 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 103.55696202531645, + "height": 108 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "782d4128-30f0-49d8-91fd-fe71e03b0e20" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "77c73dd3-a9a7-4c83-839d-38347d186c83", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 38 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "d2016222-467a-440f-9912-a45523322466" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": null, + "_id": "cd79645e-c982-4496-8cdb-3c4909cdc5cb" + }, + { + "__type__": "cc.Node", + "_name": "Quantity", + "_objFlags": 0, + "_parent": { + "__id__": 36 + }, + "_children": [ + { + "__id__": 43 + }, + { + "__id__": 46 + }, + { + "__id__": 49 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 42 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "bedfd6c0-4fed-4868-b106-dc93f5f2a46a" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "b173e2f1-21a9-40b8-8c1b-25fcfbcb813b", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Times", + "_objFlags": 0, + "_parent": { + "__id__": 41 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 45 + } + ], + "_prefab": { + "__id__": 44 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 26.15625, + "height": 27 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 16.922578234880447, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "1d1727fc-d976-40b0-b217-cddc6bf41fb4" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "e183f5e6-9798-4948-b885-a54f040d803a", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 43 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "26ab48f6-c12d-48be-90c7-e06d6a075945" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "7fcfa6d4-4cfb-4abf-8aea-79f1758eeaba" + }, + { + "__type__": "cc.Node", + "_name": "One", + "_objFlags": 0, + "_parent": { + "__id__": 41 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 48 + } + ], + "_prefab": { + "__id__": 47 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 33.77777777777778, + "height": 38 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 44.88959212376933, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "20513e00-4462-4e5c-ad03-8a5eda8071f4" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "51f2c4dc-436b-4a8c-9f85-4cfb7fc392e7", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 46 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "011c8cfa-9a31-4c2c-8e40-13d8ef5cba75" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "06bd3e4f-7588-49e3-bb5a-8e37095c05c5" + }, + { + "__type__": "cc.Node", + "_name": "Count", + "_objFlags": 0, + "_parent": { + "__id__": 41 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 51 + }, + { + "__id__": 52 + } + ], + "_prefab": { + "__id__": 50 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 90, + "height": 50 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 23.778481012658226, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "9c2aa8a8-5025-4410-a378-7ba59c3c5e80" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "426d6f1d-c525-49ce-864f-9584e1dfcd28", + "sync": false + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 49 + }, + "_enabled": true, + "_materials": [], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "×2", + "_N$string": "×2", + "_fontSize": 36, + "_lineHeight": 43, + "_enableWrapText": false, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 2, + "_N$cacheMode": 0, + "_id": "2e0dda25-00d4-4d75-ad08-323577230806", + "_N$fontSize": 36, + "_N$enableWrapText": true, + "_fontFamily": "Arial" + }, + { + "__type__": "cc.LabelOutline", + "_name": "", + "_objFlags": 0, + "_enabled": true, + "_id": "bca355e8-6208-4a0a-a29a-d5e4eb8eff40", + "node": { + "__id__": 49 + }, + "_color": { + "__type__": "cc.Color", + "r": 126, + "g": 75, + "b": 42, + "a": 255 + }, + "_width": 3 + }, + { + "__type__": "cc.Node", + "_name": "Item2", + "_objFlags": 0, + "_parent": { + "__id__": 17 + }, + "_children": [ + { + "__id__": 55 + }, + { + "__id__": 58 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 54 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 180, + "height": 210 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 133, + 10, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "5d01c633-1fef-4930-baba-925792eb5567" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "ec6c16d3-7244-4806-a51e-82266b419e51", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Icon", + "_objFlags": 0, + "_parent": { + "__id__": 53 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 57 + } + ], + "_prefab": { + "__id__": 56 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 102.9090909090909, + "height": 108 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "21ebb3f5-8f4a-4e3c-a223-fed9baa1d208" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "b3a36366-d067-4ade-8f1b-d4c4597ce83a", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 55 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "93a1c53b-7530-429e-a8dd-2e60e0ade38e" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": null, + "_id": "830ed874-3527-4b21-9d8e-62df4bc6b6a5" + }, + { + "__type__": "cc.Node", + "_name": "Quantity", + "_objFlags": 0, + "_parent": { + "__id__": 53 + }, + "_children": [ + { + "__id__": 60 + }, + { + "__id__": 63 + }, + { + "__id__": 66 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 59 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "c451c937-f294-43a0-bfa9-b836e3b7ff0a" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "30e1aaa0-b5ea-4746-862b-c5bef5abbfa5", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Times", + "_objFlags": 0, + "_parent": { + "__id__": 58 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 62 + } + ], + "_prefab": { + "__id__": 61 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 26.15625, + "height": 27 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 16.598642676767675, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "d7a656ba-52c4-40b3-9cc4-a438975d4fa8" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "31501246-e02a-4f7f-b8eb-8c8706e8c37f", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 60 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "26ab48f6-c12d-48be-90c7-e06d6a075945" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "39821276-303f-4b4e-ae8b-7a1657788ed8" + }, + { + "__type__": "cc.Node", + "_name": "One", + "_objFlags": 0, + "_parent": { + "__id__": 58 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 65 + } + ], + "_prefab": { + "__id__": 64 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 33.77777777777778, + "height": 38 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 44.56565656565657, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "474b927a-0ff2-414c-8a21-1142083cecb7" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "417fc77c-caae-4fc3-8088-871fb3d75ae0", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 63 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "011c8cfa-9a31-4c2c-8e40-13d8ef5cba75" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "7b8c61df-ec11-4a4b-8975-d3a6f8154c6a" + }, + { + "__type__": "cc.Node", + "_name": "Count", + "_objFlags": 0, + "_parent": { + "__id__": 58 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 68 + }, + { + "__id__": 69 + } + ], + "_prefab": { + "__id__": 67 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 90, + "height": 50 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 23.454545454545453, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "702f99cb-b3e3-46d0-85a2-69bca81a7c55" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "5cfefae4-aeb5-4436-bbf1-5a738ba713f8", + "sync": false + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 66 + }, + "_enabled": true, + "_materials": [], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "×2", + "_N$string": "×2", + "_fontSize": 36, + "_lineHeight": 43, + "_enableWrapText": false, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 2, + "_N$cacheMode": 0, + "_id": "21fee24b-1804-469c-8997-984189b605ec", + "_N$fontSize": 36, + "_N$enableWrapText": true, + "_fontFamily": "Arial" + }, + { + "__type__": "cc.LabelOutline", + "_name": "", + "_objFlags": 0, + "_enabled": true, + "_id": "eb9e5ed9-dc69-4b0a-9741-5ef982c63d9f", + "node": { + "__id__": 66 + }, + "_color": { + "__type__": "cc.Color", + "r": 126, + "g": 75, + "b": 42, + "a": 255 + }, + "_width": 3 + }, + { + "__type__": "cc.Node", + "_name": "Message", + "_objFlags": 0, + "_parent": { + "__id__": 3 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 72 + } + ], + "_prefab": { + "__id__": 71 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 760, + "height": 38 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + -521, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "90191243-a317-4a9e-ace6-488c099ef0ab" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "f31c5ebb-60e2-4668-8eb3-d008fac170cd", + "sync": false + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 70 + }, + "_enabled": true, + "_materials": [], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "", + "_N$string": "", + "_fontSize": 23, + "_lineHeight": 30, + "_enableWrapText": false, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 2, + "_N$cacheMode": 0, + "_id": "ed55d017-61f8-4949-9709-96652d00abc5", + "_N$fontSize": 23, + "_N$enableWrapText": true, + "_fontFamily": "Arial" + } +] diff --git a/assets/mini_program_benefits/prefab/BenefitsFavoriteGuide.prefab.meta b/assets/mini_program_benefits/prefab/BenefitsFavoriteGuide.prefab.meta new file mode 100644 index 00000000..6fdf805f --- /dev/null +++ b/assets/mini_program_benefits/prefab/BenefitsFavoriteGuide.prefab.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.3.2", + "uuid": "53f2f7a7-d02a-4b8f-9e3b-a982e80e65b9", + "importer": "prefab", + "optimizationPolicy": "AUTO", + "asyncLoadAssets": false, + "readonly": false, + "subMetas": {} +} \ No newline at end of file diff --git a/assets/mini_program_benefits/prefab/BenefitsMain.prefab b/assets/mini_program_benefits/prefab/BenefitsMain.prefab new file mode 100644 index 00000000..db81de88 --- /dev/null +++ b/assets/mini_program_benefits/prefab/BenefitsMain.prefab @@ -0,0 +1,5662 @@ +[ + { + "__type__": "cc.Prefab", + "_name": "", + "_objFlags": 0, + "_native": "", + "data": { + "__id__": 1 + }, + "optimizationPolicy": 0, + "asyncLoadAssets": false, + "readonly": false + }, + { + "__type__": "cc.Node", + "_name": "BenefitsMain", + "_objFlags": 0, + "_parent": null, + "_children": [ + { + "__id__": 3 + }, + { + "__id__": 6 + }, + { + "__id__": 9 + }, + { + "__id__": 12 + }, + { + "__id__": 83 + }, + { + "__id__": 154 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 2 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 950, + "height": 1280 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "e203a1e2-3efe-4d9c-a62a-4727a7666579" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "7290563f-2297-40f0-a2b1-4c4b585e8282", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Background", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 5 + } + ], + "_prefab": { + "__id__": 4 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 950, + "height": 1010 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "8a88fe10-2721-4271-83ea-91bcd9036259" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "dd1cb62e-02dc-4a43-9aa1-cf106983bf38", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 3 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "2562cef8-4823-429f-adc9-5a757340942d" + }, + "_type": 1, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "16d2b0f7-d960-4035-a42e-74584b08d245" + }, + { + "__type__": "cc.Node", + "_name": "Title", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 8 + } + ], + "_prefab": { + "__id__": 7 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 740, + "height": 193.31460674157304 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 260, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "0914c09b-2563-43c4-92b5-d8de4ac10972" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "b6992482-d2a8-4785-a22c-9a54b079ddab", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 6 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "0877f183-4746-46f2-a2fb-d2b19f680af9" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "642967fd-b4ff-4ce4-a69c-1d3e775f9a8c" + }, + { + "__type__": "cc.Node", + "_name": "Close", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 11 + } + ], + "_prefab": { + "__id__": 10 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 92, + "height": 92 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 403, + 480, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "fb199b5f-374f-4a46-88f7-27156be59f73" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "d686d85b-96ab-45ed-aabb-ef10778a4229", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 9 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "67398214-36f6-46c1-a5e8-5b1fc859281a" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "1c26dcd0-50fa-4ca0-818f-f7a3b8b9cea0" + }, + { + "__type__": "cc.Node", + "_name": "Task0", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [ + { + "__id__": 15 + }, + { + "__id__": 18 + }, + { + "__id__": 21 + }, + { + "__id__": 74 + }, + { + "__id__": 77 + }, + { + "__id__": 80 + } + ], + "_active": true, + "_components": [ + { + "__id__": 14 + } + ], + "_prefab": { + "__id__": 13 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 818, + "height": 222 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + -30, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "bf38b116-706a-40d6-b9f9-5e56298c7eac" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "f6a5ce8e-3cfd-4312-b74d-5dd04d57fb5a", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 12 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "db3bc0a7-ec60-4031-9692-f32d157dae7e" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "fbe2c949-0808-4d5b-bad0-82dbc8c5fea2" + }, + { + "__type__": "cc.Node", + "_name": "TaskIcon", + "_objFlags": 0, + "_parent": { + "__id__": 12 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 17 + } + ], + "_prefab": { + "__id__": 16 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 166, + "height": 166 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -300, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "a5124705-c552-42d1-8594-ed95c8b2f75d" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "e5bff326-39fd-470b-a068-1ac80f21d3b3", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 15 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "dc83d9bc-5368-4d53-917b-58607f6f24c0" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "af4ca1bf-c7a2-41e6-a1d6-ac37da55eb38" + }, + { + "__type__": "cc.Node", + "_name": "TaskTitle", + "_objFlags": 0, + "_parent": { + "__id__": 12 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 20 + } + ], + "_prefab": { + "__id__": 19 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 332, + "height": 39 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -24, + 68, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "31c73417-cdf3-4d87-9a68-e2aadc273b9c" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "67baf54e-2812-4087-8bf3-5e130d99ebb1", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 18 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "8c702fbc-5dcf-4208-ba4e-d268bab82455" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "665b8513-ce21-4c86-a3a6-2d15451c4db4" + }, + { + "__type__": "cc.Node", + "_name": "Rewards", + "_objFlags": 0, + "_parent": { + "__id__": 12 + }, + "_children": [ + { + "__id__": 23 + }, + { + "__id__": 40 + }, + { + "__id__": 57 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 22 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -20, + -22, + 0, + 0, + 0, + 0, + 1, + 0.84, + 0.84, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "a950b8e6-65ca-4183-9e32-eca312dc26c2" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "d68fc619-8514-41c5-ade9-c5b2a406ffbf", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Item0", + "_objFlags": 0, + "_parent": { + "__id__": 21 + }, + "_children": [ + { + "__id__": 25 + }, + { + "__id__": 28 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 24 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 180, + "height": 210 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -133, + 10, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "5335e123-78bb-4cf3-be5f-fcc68231c288" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "9751c502-ece4-4c7b-b74a-e62816a09e4a", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Icon", + "_objFlags": 0, + "_parent": { + "__id__": 23 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 27 + } + ], + "_prefab": { + "__id__": 26 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 89.0721649484536, + "height": 108 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "1412f9fc-7e4e-473f-be18-235e517096ba" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "5a7695fa-1e4b-4493-82de-b48abca23a96", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 25 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "9f43f6b5-7793-4797-9b0d-ba17117898a9" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": null, + "_id": "10c63b67-8ad0-44a8-aa91-5add92f23c6a" + }, + { + "__type__": "cc.Node", + "_name": "Quantity", + "_objFlags": 0, + "_parent": { + "__id__": 23 + }, + "_children": [ + { + "__id__": 30 + }, + { + "__id__": 33 + }, + { + "__id__": 36 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 29 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "ab96a287-e278-4b0f-bdba-aef94530cd1a" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "fe93f6ef-65aa-4ef1-b4f8-28b374001dcd", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Times", + "_objFlags": 0, + "_parent": { + "__id__": 28 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 32 + } + ], + "_prefab": { + "__id__": 31 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 26.15625, + "height": 27 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 9.680179696449024, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "8ff7b976-f6b6-458f-ac3c-fc4ecb877805" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "dadd277b-9291-46c3-9bd3-01ff1b5bf76e", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 30 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "26ab48f6-c12d-48be-90c7-e06d6a075945" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "7149569d-7d2d-4658-bdd2-8b44dea957e0" + }, + { + "__type__": "cc.Node", + "_name": "One", + "_objFlags": 0, + "_parent": { + "__id__": 28 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 35 + } + ], + "_prefab": { + "__id__": 34 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 33.77777777777778, + "height": 38 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 37.64719358533792, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "d6ad312e-4d97-4223-9f6d-5476e2756794" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "87236ecc-c31d-45b4-9482-ea34a08fd7e3", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 33 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "011c8cfa-9a31-4c2c-8e40-13d8ef5cba75" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "0eb171ac-0315-4d74-9f1e-27c7d9cb4681" + }, + { + "__type__": "cc.Node", + "_name": "Count", + "_objFlags": 0, + "_parent": { + "__id__": 28 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 38 + }, + { + "__id__": 39 + } + ], + "_prefab": { + "__id__": 37 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 90, + "height": 50 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 16.536082474226802, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "c4189767-b3df-4b0c-95d4-ea22363d133b" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "3b533255-278f-4c70-848c-5da91e2f9000", + "sync": false + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 36 + }, + "_enabled": true, + "_materials": [], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "×2", + "_N$string": "×2", + "_fontSize": 36, + "_lineHeight": 43, + "_enableWrapText": false, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 2, + "_N$cacheMode": 0, + "_id": "4a6a6131-3b32-4118-ac95-3bb4b4b6a6de", + "_N$fontSize": 36, + "_N$enableWrapText": true, + "_fontFamily": "Arial" + }, + { + "__type__": "cc.LabelOutline", + "_name": "", + "_objFlags": 0, + "_enabled": true, + "_id": "e9d967d3-56bf-48fd-8bd8-f0e6bfc1f935", + "node": { + "__id__": 36 + }, + "_color": { + "__type__": "cc.Color", + "r": 126, + "g": 75, + "b": 42, + "a": 255 + }, + "_width": 3 + }, + { + "__type__": "cc.Node", + "_name": "Item1", + "_objFlags": 0, + "_parent": { + "__id__": 21 + }, + "_children": [ + { + "__id__": 42 + }, + { + "__id__": 45 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 41 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 180, + "height": 210 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 10, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "73bfc304-803f-40cf-ba9e-71230d225fa5" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "8873e9ec-0f61-479b-8c30-c7a8a1caef95", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Icon", + "_objFlags": 0, + "_parent": { + "__id__": 40 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 44 + } + ], + "_prefab": { + "__id__": 43 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 103.55696202531645, + "height": 108 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "91fbca15-4560-4764-8bfb-83eec0b5eea1" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "0a52c9ef-19f2-476f-b14f-2b1f5d6e90b6", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 42 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "d2016222-467a-440f-9912-a45523322466" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": null, + "_id": "2ca842cc-01fd-41b3-8ce2-a129a6638be6" + }, + { + "__type__": "cc.Node", + "_name": "Quantity", + "_objFlags": 0, + "_parent": { + "__id__": 40 + }, + "_children": [ + { + "__id__": 47 + }, + { + "__id__": 50 + }, + { + "__id__": 53 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 46 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "df75ec72-75d1-48b6-b885-7f1872107b30" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "a6a80d5a-9d37-410b-ae50-6d6fc6e1b008", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Times", + "_objFlags": 0, + "_parent": { + "__id__": 45 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 49 + } + ], + "_prefab": { + "__id__": 48 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 26.15625, + "height": 27 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 16.922578234880447, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "fffc98b0-6abb-4f87-a719-15bc94cc86e6" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "1496e09d-04ca-495a-a9c0-7602c4f51485", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 47 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "26ab48f6-c12d-48be-90c7-e06d6a075945" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "1635a76f-5294-42fe-9670-14ecfc70a76f" + }, + { + "__type__": "cc.Node", + "_name": "One", + "_objFlags": 0, + "_parent": { + "__id__": 45 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 52 + } + ], + "_prefab": { + "__id__": 51 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 33.77777777777778, + "height": 38 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 44.88959212376933, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "c7380a62-1fc2-44a2-b041-f5dda0353ee4" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "84f514c3-9956-47e4-afed-a9f2be467f5d", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 50 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "011c8cfa-9a31-4c2c-8e40-13d8ef5cba75" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "68a42a9d-e945-4871-8db3-b957c22ea4e2" + }, + { + "__type__": "cc.Node", + "_name": "Count", + "_objFlags": 0, + "_parent": { + "__id__": 45 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 55 + }, + { + "__id__": 56 + } + ], + "_prefab": { + "__id__": 54 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 90, + "height": 50 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 23.778481012658226, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "9283a2df-4b6b-46c5-b3f7-10c444b6695b" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "aba1a431-26dc-4238-9674-2daba1a6a754", + "sync": false + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 53 + }, + "_enabled": true, + "_materials": [], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "×2", + "_N$string": "×2", + "_fontSize": 36, + "_lineHeight": 43, + "_enableWrapText": false, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 2, + "_N$cacheMode": 0, + "_id": "daa6b09e-76c4-4cb9-ba45-7536ae9c87b4", + "_N$fontSize": 36, + "_N$enableWrapText": true, + "_fontFamily": "Arial" + }, + { + "__type__": "cc.LabelOutline", + "_name": "", + "_objFlags": 0, + "_enabled": true, + "_id": "c870c9fa-3302-40d2-987e-b226c65584d2", + "node": { + "__id__": 53 + }, + "_color": { + "__type__": "cc.Color", + "r": 126, + "g": 75, + "b": 42, + "a": 255 + }, + "_width": 3 + }, + { + "__type__": "cc.Node", + "_name": "Item2", + "_objFlags": 0, + "_parent": { + "__id__": 21 + }, + "_children": [ + { + "__id__": 59 + }, + { + "__id__": 62 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 58 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 180, + "height": 210 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 133, + 10, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "c1dce968-c73b-415f-9fd5-87a9980e6321" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "7285e9ae-ab1a-4c62-8d84-95bd9d013e09", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Icon", + "_objFlags": 0, + "_parent": { + "__id__": 57 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 61 + } + ], + "_prefab": { + "__id__": 60 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 102.9090909090909, + "height": 108 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "bd041e48-d3e3-4de2-b18b-6b90178111c2" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "6b5f985a-9cb9-4606-b642-9f4f5ab772e2", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 59 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "93a1c53b-7530-429e-a8dd-2e60e0ade38e" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": null, + "_id": "724253f8-647f-41fc-8e2b-63710139608e" + }, + { + "__type__": "cc.Node", + "_name": "Quantity", + "_objFlags": 0, + "_parent": { + "__id__": 57 + }, + "_children": [ + { + "__id__": 64 + }, + { + "__id__": 67 + }, + { + "__id__": 70 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 63 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "410ef00a-7e12-4af9-9239-9fa3f62089a8" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "8e6df91f-ea6e-4a70-9818-215e051c84d3", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Times", + "_objFlags": 0, + "_parent": { + "__id__": 62 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 66 + } + ], + "_prefab": { + "__id__": 65 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 26.15625, + "height": 27 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 16.598642676767675, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "96711e3a-98b1-4dde-ad2e-35d0cb8c72ad" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "154d019a-3453-4936-bbf9-d765e5d67228", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 64 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "26ab48f6-c12d-48be-90c7-e06d6a075945" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "5e147e15-0ec7-4e22-8817-390935d9dd9c" + }, + { + "__type__": "cc.Node", + "_name": "One", + "_objFlags": 0, + "_parent": { + "__id__": 62 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 69 + } + ], + "_prefab": { + "__id__": 68 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 33.77777777777778, + "height": 38 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 44.56565656565657, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "202ab998-eeb5-4030-8110-c722b9a2cc82" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "183b3c01-efe4-4f57-a00d-edffab74b94b", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 67 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "011c8cfa-9a31-4c2c-8e40-13d8ef5cba75" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "0e9cbe6d-1082-4c1a-bd41-fbf72197a7ed" + }, + { + "__type__": "cc.Node", + "_name": "Count", + "_objFlags": 0, + "_parent": { + "__id__": 62 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 72 + }, + { + "__id__": 73 + } + ], + "_prefab": { + "__id__": 71 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 90, + "height": 50 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 23.454545454545453, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "729ba464-3806-47e2-89d6-98764156b056" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "db518db0-c53c-4baa-b4f3-7d2d5c86e248", + "sync": false + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 70 + }, + "_enabled": true, + "_materials": [], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "×2", + "_N$string": "×2", + "_fontSize": 36, + "_lineHeight": 43, + "_enableWrapText": false, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 2, + "_N$cacheMode": 0, + "_id": "e7fe6782-e0ef-4e9b-a76d-459319b467db", + "_N$fontSize": 36, + "_N$enableWrapText": true, + "_fontFamily": "Arial" + }, + { + "__type__": "cc.LabelOutline", + "_name": "", + "_objFlags": 0, + "_enabled": true, + "_id": "73cbfd4d-acae-44bd-8f3e-7b7dd9ca334d", + "node": { + "__id__": 70 + }, + "_color": { + "__type__": "cc.Color", + "r": 126, + "g": 75, + "b": 42, + "a": 255 + }, + "_width": 3 + }, + { + "__type__": "cc.Node", + "_name": "View", + "_objFlags": 0, + "_parent": { + "__id__": 12 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 76 + } + ], + "_prefab": { + "__id__": 75 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 200, + "height": 96 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 282, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "bb5e1106-7836-4fee-a3ec-e908ce08051a" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "b661013f-29be-49b2-92b9-a9e6c8ba6362", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 74 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "8791583b-79b5-48ee-ba2f-27988ec87c3c" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "fbc945ca-92c7-4bfb-b83b-872b6819abd5" + }, + { + "__type__": "cc.Node", + "_name": "Claim", + "_objFlags": 0, + "_parent": { + "__id__": 12 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 79 + } + ], + "_prefab": { + "__id__": 78 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 200, + "height": 96 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 282, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "d712ee94-50f1-4cca-9c02-811346de1e68" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "f1a30041-9fac-4cc8-a54c-a40bddd615ff", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 77 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "f55f5c8c-5140-4ce2-8b7c-52c8cf519714" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "05bf2e4d-5d0b-4c6b-adde-44fb30048ec9" + }, + { + "__type__": "cc.Node", + "_name": "Claimed", + "_objFlags": 0, + "_parent": { + "__id__": 12 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 82 + } + ], + "_prefab": { + "__id__": 81 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 117.07317073170731, + "height": 96 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 282, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "374f87b7-1377-48f5-ac7a-9fc18a76f3e2" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "1df40ac6-94c1-4ade-93cf-26f86bf33ace", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 80 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "91ab9ed1-902b-4062-9e65-cecc117d4e50" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "0b4484db-3289-480b-a93f-0d53766a09d9" + }, + { + "__type__": "cc.Node", + "_name": "Task1", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [ + { + "__id__": 86 + }, + { + "__id__": 89 + }, + { + "__id__": 92 + }, + { + "__id__": 145 + }, + { + "__id__": 148 + }, + { + "__id__": 151 + } + ], + "_active": true, + "_components": [ + { + "__id__": 85 + } + ], + "_prefab": { + "__id__": 84 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 818, + "height": 222 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + -272, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "e1936c31-2f69-4c6d-9d6e-cf636c4ea8f1" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "1c5ab04a-38d5-4ca3-a6d8-eb5cf45c8ceb", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 83 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "db3bc0a7-ec60-4031-9692-f32d157dae7e" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "ad08c2a0-1f71-4598-a3af-429347a2df28" + }, + { + "__type__": "cc.Node", + "_name": "TaskIcon", + "_objFlags": 0, + "_parent": { + "__id__": 83 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 88 + } + ], + "_prefab": { + "__id__": 87 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 166, + "height": 166 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -300, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "fac538dd-6d12-47e4-abfb-e6849964a5ba" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "bbf2b9e7-080a-4bfe-80ec-4acdd67c91b8", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 86 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "11350710-460d-4637-8e97-62d6ce0dfc94" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "3ae57798-9e5f-4870-a05b-5f65a16ae1ef" + }, + { + "__type__": "cc.Node", + "_name": "TaskTitle", + "_objFlags": 0, + "_parent": { + "__id__": 83 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 91 + } + ], + "_prefab": { + "__id__": 90 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 206, + "height": 38 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -87, + 68, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "27447be0-0e12-4f8c-a1e5-a35a239ec200" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "296a107f-c57d-401b-9b57-ecc55de3d25e", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 89 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "6195066d-ffde-42dd-946a-98391261422d" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "8c7f67eb-3527-4639-89c0-53fc343d789d" + }, + { + "__type__": "cc.Node", + "_name": "Rewards", + "_objFlags": 0, + "_parent": { + "__id__": 83 + }, + "_children": [ + { + "__id__": 94 + }, + { + "__id__": 111 + }, + { + "__id__": 128 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 93 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -20, + -22, + 0, + 0, + 0, + 0, + 1, + 0.84, + 0.84, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "5d1632ce-8917-4b2c-8d44-d9a41b631c32" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "c292b6bf-e107-4673-b873-8a717c4afa1b", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Item0", + "_objFlags": 0, + "_parent": { + "__id__": 92 + }, + "_children": [ + { + "__id__": 96 + }, + { + "__id__": 99 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 95 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 180, + "height": 210 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -133, + 10, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "7e98187a-514b-4a3f-b781-cbd88dcbad8e" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "c375dc29-bf42-429f-a25f-d7b7206fa91d", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Icon", + "_objFlags": 0, + "_parent": { + "__id__": 94 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 98 + } + ], + "_prefab": { + "__id__": 97 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 89.0721649484536, + "height": 108 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "263dae79-9843-4303-ae9c-793bde876e89" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "39da7e46-ee6e-42a7-8071-361b433ec08f", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 96 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "9f43f6b5-7793-4797-9b0d-ba17117898a9" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": null, + "_id": "9822ba7d-c9aa-477a-81d1-382f31146466" + }, + { + "__type__": "cc.Node", + "_name": "Quantity", + "_objFlags": 0, + "_parent": { + "__id__": 94 + }, + "_children": [ + { + "__id__": 101 + }, + { + "__id__": 104 + }, + { + "__id__": 107 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 100 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "04a30ab3-0691-442f-acfa-384829d849e3" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "f872cfe1-7380-4a24-b2a9-14ee59b0ed89", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Times", + "_objFlags": 0, + "_parent": { + "__id__": 99 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 103 + } + ], + "_prefab": { + "__id__": 102 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 26.15625, + "height": 27 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 9.680179696449024, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "86892240-4b36-4c89-9600-dc4282af4cae" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "aa00797d-cba7-494f-bea8-aa84adbd2aa0", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 101 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "26ab48f6-c12d-48be-90c7-e06d6a075945" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "d1c2e778-5ebc-4e99-bc37-34fe96b2ac12" + }, + { + "__type__": "cc.Node", + "_name": "One", + "_objFlags": 0, + "_parent": { + "__id__": 99 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 106 + } + ], + "_prefab": { + "__id__": 105 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 33.77777777777778, + "height": 38 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 37.64719358533792, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "f6c54f75-e374-489b-a606-d505a58c61d3" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "97f2a91b-b045-40a4-8158-aa5ee9c126dc", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 104 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "011c8cfa-9a31-4c2c-8e40-13d8ef5cba75" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "f8567c61-8b64-453d-b361-a48cd0479d3d" + }, + { + "__type__": "cc.Node", + "_name": "Count", + "_objFlags": 0, + "_parent": { + "__id__": 99 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 109 + }, + { + "__id__": 110 + } + ], + "_prefab": { + "__id__": 108 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 90, + "height": 50 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 16.536082474226802, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "83f1939d-2969-4c6e-864c-5397c428e141" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "4bdc0f64-0a27-4895-9671-a83ef30e7fdf", + "sync": false + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 107 + }, + "_enabled": true, + "_materials": [], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "×2", + "_N$string": "×2", + "_fontSize": 36, + "_lineHeight": 43, + "_enableWrapText": false, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 2, + "_N$cacheMode": 0, + "_id": "94299c72-cc73-43f0-87fa-1fd085214217", + "_N$fontSize": 36, + "_N$enableWrapText": true, + "_fontFamily": "Arial" + }, + { + "__type__": "cc.LabelOutline", + "_name": "", + "_objFlags": 0, + "_enabled": true, + "_id": "cfd9056b-8580-4723-9c84-731eec2b7ad0", + "node": { + "__id__": 107 + }, + "_color": { + "__type__": "cc.Color", + "r": 126, + "g": 75, + "b": 42, + "a": 255 + }, + "_width": 3 + }, + { + "__type__": "cc.Node", + "_name": "Item1", + "_objFlags": 0, + "_parent": { + "__id__": 92 + }, + "_children": [ + { + "__id__": 113 + }, + { + "__id__": 116 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 112 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 180, + "height": 210 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 10, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "74e1342f-d8fb-4a49-b6db-97ef9aa75fb4" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "efbc656f-4893-4577-9991-65d08ac79ec9", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Icon", + "_objFlags": 0, + "_parent": { + "__id__": 111 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 115 + } + ], + "_prefab": { + "__id__": 114 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 103.55696202531645, + "height": 108 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "6d0d96a0-6db9-4762-b562-1212c0727453" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "e2e002e6-8bed-4a1f-a326-c1e9db745e12", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 113 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "d2016222-467a-440f-9912-a45523322466" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": null, + "_id": "89b3acac-1213-4953-9e23-c5460cb105f6" + }, + { + "__type__": "cc.Node", + "_name": "Quantity", + "_objFlags": 0, + "_parent": { + "__id__": 111 + }, + "_children": [ + { + "__id__": 118 + }, + { + "__id__": 121 + }, + { + "__id__": 124 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 117 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "ed332840-8d73-407e-af14-0293fcb796ee" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "85dc709f-bf97-49e0-afb8-1224a9a87456", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Times", + "_objFlags": 0, + "_parent": { + "__id__": 116 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 120 + } + ], + "_prefab": { + "__id__": 119 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 26.15625, + "height": 27 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 16.922578234880447, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "b2467aa6-592f-4e37-bfcf-845706b1fbc3" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "69abf8b5-0839-4b7e-850d-7371a6cc51b4", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 118 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "26ab48f6-c12d-48be-90c7-e06d6a075945" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "a4e3566c-5583-4a23-8f0f-45b8dcdd6809" + }, + { + "__type__": "cc.Node", + "_name": "One", + "_objFlags": 0, + "_parent": { + "__id__": 116 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 123 + } + ], + "_prefab": { + "__id__": 122 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 33.77777777777778, + "height": 38 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 44.88959212376933, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "61d9e2b8-5293-4253-aec5-9bde962a2e9e" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "db1ff890-354b-4c01-a9ec-357897ba8677", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 121 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "011c8cfa-9a31-4c2c-8e40-13d8ef5cba75" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "6242641c-2f7e-4909-a1ff-73c16c4f4238" + }, + { + "__type__": "cc.Node", + "_name": "Count", + "_objFlags": 0, + "_parent": { + "__id__": 116 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 126 + }, + { + "__id__": 127 + } + ], + "_prefab": { + "__id__": 125 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 90, + "height": 50 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 23.778481012658226, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "cfa2cd90-c57c-493f-bbad-0629f83d7647" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "018f6364-ef40-4c5d-882c-5666eaec7ade", + "sync": false + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 124 + }, + "_enabled": true, + "_materials": [], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "×2", + "_N$string": "×2", + "_fontSize": 36, + "_lineHeight": 43, + "_enableWrapText": false, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 2, + "_N$cacheMode": 0, + "_id": "74a67f12-289c-4e6b-9391-5bcdb01a0008", + "_N$fontSize": 36, + "_N$enableWrapText": true, + "_fontFamily": "Arial" + }, + { + "__type__": "cc.LabelOutline", + "_name": "", + "_objFlags": 0, + "_enabled": true, + "_id": "40113568-3819-4234-acaa-0e06e3052648", + "node": { + "__id__": 124 + }, + "_color": { + "__type__": "cc.Color", + "r": 126, + "g": 75, + "b": 42, + "a": 255 + }, + "_width": 3 + }, + { + "__type__": "cc.Node", + "_name": "Item2", + "_objFlags": 0, + "_parent": { + "__id__": 92 + }, + "_children": [ + { + "__id__": 130 + }, + { + "__id__": 133 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 129 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 180, + "height": 210 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 133, + 10, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "62782b89-5bed-4b9d-a4aa-07672561d500" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "4e44bed2-b0b1-469d-ba87-f8b459307b03", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Icon", + "_objFlags": 0, + "_parent": { + "__id__": 128 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 132 + } + ], + "_prefab": { + "__id__": 131 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 102.9090909090909, + "height": 108 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "3a849df8-a571-4a83-98df-95ec9f1a6776" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "0ed8a873-03b3-4bf6-95fc-d2f0f314d7ff", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 130 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "93a1c53b-7530-429e-a8dd-2e60e0ade38e" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": null, + "_id": "9912b0c1-5f3b-4f88-b98f-4bbaf0bbefd1" + }, + { + "__type__": "cc.Node", + "_name": "Quantity", + "_objFlags": 0, + "_parent": { + "__id__": 128 + }, + "_children": [ + { + "__id__": 135 + }, + { + "__id__": 138 + }, + { + "__id__": 141 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 134 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "2fcd7c10-3f0e-4a1b-ae19-5266999e90ae" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "9d7bafb1-ee07-4aaa-a9b0-9538b749dc68", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Times", + "_objFlags": 0, + "_parent": { + "__id__": 133 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 137 + } + ], + "_prefab": { + "__id__": 136 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 26.15625, + "height": 27 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 16.598642676767675, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "07a4360f-2dd0-4fb6-8f0c-8b16d6d9b965" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "c8ecd655-0e8e-421d-9209-3b726b279556", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 135 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "26ab48f6-c12d-48be-90c7-e06d6a075945" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "1e3b9943-e134-4372-b734-c320d4eca05b" + }, + { + "__type__": "cc.Node", + "_name": "One", + "_objFlags": 0, + "_parent": { + "__id__": 133 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 140 + } + ], + "_prefab": { + "__id__": 139 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 33.77777777777778, + "height": 38 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 44.56565656565657, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "f79fc7ef-4e5f-467f-b7ff-6a99af74549e" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "d84913a7-998d-4382-9c38-db338870b6fe", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 138 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "011c8cfa-9a31-4c2c-8e40-13d8ef5cba75" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "eaa573e3-d4b7-48ff-ae54-c11c825785b1" + }, + { + "__type__": "cc.Node", + "_name": "Count", + "_objFlags": 0, + "_parent": { + "__id__": 133 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 143 + }, + { + "__id__": 144 + } + ], + "_prefab": { + "__id__": 142 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 90, + "height": 50 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 23.454545454545453, + -46, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "a566ad21-eaa8-4191-8e10-30fdbf3e3aee" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "fb4e5f02-f9f6-4b78-86eb-516cc08c3e6d", + "sync": false + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 141 + }, + "_enabled": true, + "_materials": [], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "×2", + "_N$string": "×2", + "_fontSize": 36, + "_lineHeight": 43, + "_enableWrapText": false, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 2, + "_N$cacheMode": 0, + "_id": "6bfcbdc1-42ad-45c2-9f11-55ae9a28180c", + "_N$fontSize": 36, + "_N$enableWrapText": true, + "_fontFamily": "Arial" + }, + { + "__type__": "cc.LabelOutline", + "_name": "", + "_objFlags": 0, + "_enabled": true, + "_id": "560e970c-46b8-4391-9ac5-4ea0d6dda38a", + "node": { + "__id__": 141 + }, + "_color": { + "__type__": "cc.Color", + "r": 126, + "g": 75, + "b": 42, + "a": 255 + }, + "_width": 3 + }, + { + "__type__": "cc.Node", + "_name": "View", + "_objFlags": 0, + "_parent": { + "__id__": 83 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 147 + } + ], + "_prefab": { + "__id__": 146 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 200, + "height": 96 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 282, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "60a6b123-47fa-4997-87f5-a957b14b5803" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "2d091626-e1c1-45ea-954d-eb37c660e634", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 145 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "8791583b-79b5-48ee-ba2f-27988ec87c3c" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "6c5eb4c1-d245-4bd6-bee8-0721f6220319" + }, + { + "__type__": "cc.Node", + "_name": "Claim", + "_objFlags": 0, + "_parent": { + "__id__": 83 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 150 + } + ], + "_prefab": { + "__id__": 149 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 200, + "height": 96 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 282, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "2c9e6c2d-4b97-4012-999e-cfe3c148d74c" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "0fa84b7c-0394-4b50-b9ea-a66807e67931", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 148 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "f55f5c8c-5140-4ce2-8b7c-52c8cf519714" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "8994c577-9045-4bd8-892a-3167290e6aeb" + }, + { + "__type__": "cc.Node", + "_name": "Claimed", + "_objFlags": 0, + "_parent": { + "__id__": 83 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 153 + } + ], + "_prefab": { + "__id__": 152 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 117.07317073170731, + "height": 96 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 282, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "7578523a-bc64-4ddc-974a-7205dacc0361" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "b16a8fe7-5866-42c9-8297-9c68819ba8b5", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 151 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "91ab9ed1-902b-4062-9e65-cecc117d4e50" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "8eccf172-291e-4de8-a80c-129838e97d87" + }, + { + "__type__": "cc.Node", + "_name": "Message", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 156 + } + ], + "_prefab": { + "__id__": 155 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 760, + "height": 38 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + -485, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "d5dc4628-2b1d-42d6-b2b5-bacc60152078" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "fee2f809-8c28-469a-a9fa-cff0d269c848", + "sync": false + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 154 + }, + "_enabled": true, + "_materials": [], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "", + "_N$string": "", + "_fontSize": 23, + "_lineHeight": 30, + "_enableWrapText": false, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 2, + "_N$cacheMode": 0, + "_id": "59ce3cfb-88e7-40ce-b37d-b48a5028ec2c", + "_N$fontSize": 23, + "_N$enableWrapText": true, + "_fontFamily": "Arial" + } +] \ No newline at end of file diff --git a/assets/mini_program_benefits/prefab/BenefitsMain.prefab.meta b/assets/mini_program_benefits/prefab/BenefitsMain.prefab.meta new file mode 100644 index 00000000..bc4cda2a --- /dev/null +++ b/assets/mini_program_benefits/prefab/BenefitsMain.prefab.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.3.2", + "uuid": "35246572-2373-43fe-9657-71199e7ec388", + "importer": "prefab", + "optimizationPolicy": "AUTO", + "asyncLoadAssets": false, + "readonly": false, + "subMetas": {} +} \ No newline at end of file diff --git a/assets/mini_program_benefits/prefab/BenefitsReward.prefab b/assets/mini_program_benefits/prefab/BenefitsReward.prefab new file mode 100644 index 00000000..197854a5 --- /dev/null +++ b/assets/mini_program_benefits/prefab/BenefitsReward.prefab @@ -0,0 +1,2182 @@ +[ + { + "__type__": "cc.Prefab", + "_name": "", + "_objFlags": 0, + "_native": "", + "data": { + "__id__": 1 + }, + "optimizationPolicy": 0, + "asyncLoadAssets": false, + "readonly": false + }, + { + "__type__": "cc.Node", + "_name": "BenefitsReward", + "_objFlags": 0, + "_parent": null, + "_children": [ + { + "__id__": 2 + }, + { + "__id__": 5 + } + ], + "_active": true, + "_components": [ + { + "__id__": 60 + } + ], + "_prefab": { + "__id__": 61 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 1080, + "height": 1920 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Node", + "_name": "Mask", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 3 + } + ], + "_prefab": { + "__id__": 4 + }, + "_opacity": 140, + "_color": { + "__type__": "cc.Color", + "r": 0, + "g": 0, + "b": 0, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 1080, + "height": 1920 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 2 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "01b3819b-d35e-4e1d-a37b-88ab4e33a15c" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "2dd64a1b-0203-4da2-a41c-651792d89241", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Board", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [ + { + "__id__": 6 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 59 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 680, + "height": 700 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Node", + "_name": "Rewards", + "_objFlags": 0, + "_parent": { + "__id__": 5 + }, + "_children": [ + { + "__id__": 7 + }, + { + "__id__": 24 + }, + { + "__id__": 41 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 58 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Node", + "_name": "Item0", + "_objFlags": 0, + "_parent": { + "__id__": 6 + }, + "_children": [ + { + "__id__": 8 + }, + { + "__id__": 11 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 23 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 180, + "height": 210 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -205, + 30, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Node", + "_name": "Icon", + "_objFlags": 0, + "_parent": { + "__id__": 7 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 9 + } + ], + "_prefab": { + "__id__": 10 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 119.58762886597938, + "height": 145 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 8 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "9f43f6b5-7793-4797-9b0d-ba17117898a9" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": null, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "b3537610-8a2b-4352-8d26-edac6be18cad", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Quantity", + "_objFlags": 0, + "_parent": { + "__id__": 7 + }, + "_children": [ + { + "__id__": 12 + }, + { + "__id__": 15 + }, + { + "__id__": 18 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 22 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Node", + "_name": "Times", + "_objFlags": 0, + "_parent": { + "__id__": 11 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 13 + } + ], + "_prefab": { + "__id__": 14 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 31.96875, + "height": 33 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 18.920550544100806, + -67.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 12 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "26ab48f6-c12d-48be-90c7-e06d6a075945" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "c5595ca2-c9ab-4c3f-97da-8148c32f6e05", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "One", + "_objFlags": 0, + "_parent": { + "__id__": 11 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 16 + } + ], + "_prefab": { + "__id__": 17 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 40.888888888888886, + "height": 46 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 53.34936998854525, + -67.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 15 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "011c8cfa-9a31-4c2c-8e40-13d8ef5cba75" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "d1ff7162-a460-4c2f-a6d1-264da387519f", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Count", + "_objFlags": 0, + "_parent": { + "__id__": 11 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 19 + }, + { + "__id__": 20 + } + ], + "_prefab": { + "__id__": 21 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 90, + "height": 50 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 35.79381443298969, + -67.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 18 + }, + "_enabled": true, + "_materials": [], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "×2", + "_N$string": "×2", + "_fontSize": 36, + "_lineHeight": 43, + "_enableWrapText": false, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 2, + "_N$cacheMode": 0, + "_id": "" + }, + { + "__type__": "cc.LabelOutline", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 18 + }, + "_enabled": true, + "_color": { + "__type__": "cc.Color", + "r": 126, + "g": 75, + "b": 42, + "a": 255 + }, + "_width": 3, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "26f0f8f1-1a6a-446b-8030-913cea663a82", + "sync": false + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "e7834adc-91d9-4b53-be8c-a0b300f2286b", + "sync": false + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "73e9e059-74d9-409a-8989-ef70af872e6c", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Item1", + "_objFlags": 0, + "_parent": { + "__id__": 6 + }, + "_children": [ + { + "__id__": 25 + }, + { + "__id__": 28 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 40 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 180, + "height": 210 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 30, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Node", + "_name": "Icon", + "_objFlags": 0, + "_parent": { + "__id__": 24 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 26 + } + ], + "_prefab": { + "__id__": 27 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 139.03481012658227, + "height": 145 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 25 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "d2016222-467a-440f-9912-a45523322466" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": null, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "d2aeadd4-94f3-4adf-b218-8ce285927875", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Quantity", + "_objFlags": 0, + "_parent": { + "__id__": 24 + }, + "_children": [ + { + "__id__": 29 + }, + { + "__id__": 32 + }, + { + "__id__": 35 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 39 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Node", + "_name": "Times", + "_objFlags": 0, + "_parent": { + "__id__": 28 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 30 + } + ], + "_prefab": { + "__id__": 31 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 31.96875, + "height": 33 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 28.64414117440225, + -67.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 29 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "26ab48f6-c12d-48be-90c7-e06d6a075945" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "6065e54c-1993-46f7-8b82-3103f42b9462", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "One", + "_objFlags": 0, + "_parent": { + "__id__": 28 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 33 + } + ], + "_prefab": { + "__id__": 34 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 40.888888888888886, + "height": 46 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 63.07296061884669, + -67.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 32 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "011c8cfa-9a31-4c2c-8e40-13d8ef5cba75" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "46cb016c-b43a-4224-9cce-508c34308f8e", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Count", + "_objFlags": 0, + "_parent": { + "__id__": 28 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 36 + }, + { + "__id__": 37 + } + ], + "_prefab": { + "__id__": 38 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 90, + "height": 50 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 45.517405063291136, + -67.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 35 + }, + "_enabled": true, + "_materials": [], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "×2", + "_N$string": "×2", + "_fontSize": 36, + "_lineHeight": 43, + "_enableWrapText": false, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 2, + "_N$cacheMode": 0, + "_id": "" + }, + { + "__type__": "cc.LabelOutline", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 35 + }, + "_enabled": true, + "_color": { + "__type__": "cc.Color", + "r": 126, + "g": 75, + "b": 42, + "a": 255 + }, + "_width": 3, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "bc7d450b-3345-4994-933c-35499a24faaa", + "sync": false + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "7e6184c2-cc41-43f8-a235-66b1b311cf2e", + "sync": false + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "5788558d-dd09-4f59-8c06-7431e7233f83", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Item2", + "_objFlags": 0, + "_parent": { + "__id__": 6 + }, + "_children": [ + { + "__id__": 42 + }, + { + "__id__": 45 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 57 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 180, + "height": 210 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 205, + 30, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Node", + "_name": "Icon", + "_objFlags": 0, + "_parent": { + "__id__": 41 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 43 + } + ], + "_prefab": { + "__id__": 44 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 138.16498316498317, + "height": 145 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 42 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "93a1c53b-7530-429e-a8dd-2e60e0ade38e" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": null, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "7de6d897-aa0d-4838-8670-028ded65daf0", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Quantity", + "_objFlags": 0, + "_parent": { + "__id__": 41 + }, + "_children": [ + { + "__id__": 46 + }, + { + "__id__": 49 + }, + { + "__id__": 52 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 56 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Node", + "_name": "Times", + "_objFlags": 0, + "_parent": { + "__id__": 45 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 47 + } + ], + "_prefab": { + "__id__": 48 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 31.96875, + "height": 33 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 28.2092276936027, + -67.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 46 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "26ab48f6-c12d-48be-90c7-e06d6a075945" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "4996b723-6f27-49f3-b3f0-4857bad37272", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "One", + "_objFlags": 0, + "_parent": { + "__id__": 45 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 50 + } + ], + "_prefab": { + "__id__": 51 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 40.888888888888886, + "height": 46 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 62.63804713804714, + -67.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 49 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "011c8cfa-9a31-4c2c-8e40-13d8ef5cba75" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "b174f78d-ab25-4cf5-9a27-52e12bfcab5a", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Count", + "_objFlags": 0, + "_parent": { + "__id__": 45 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 53 + }, + { + "__id__": 54 + } + ], + "_prefab": { + "__id__": 55 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 90, + "height": 50 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 45.082491582491585, + -67.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 52 + }, + "_enabled": true, + "_materials": [], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "×2", + "_N$string": "×2", + "_fontSize": 36, + "_lineHeight": 43, + "_enableWrapText": false, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 2, + "_N$cacheMode": 0, + "_id": "" + }, + { + "__type__": "cc.LabelOutline", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 52 + }, + "_enabled": true, + "_color": { + "__type__": "cc.Color", + "r": 126, + "g": 75, + "b": 42, + "a": 255 + }, + "_width": 3, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "faa8bbdf-7076-4a50-b648-264a03100f33", + "sync": false + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "54aab2e5-ec94-4080-9c6e-29cabe0a5a9a", + "sync": false + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "f81f86e6-0e98-4466-a64b-0d5d42a7c9ce", + "sync": false + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "227c0081-e03c-459d-af13-46132a68a86a", + "sync": false + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "e3c30546-a4af-4970-b0d0-d03f23fd4071", + "sync": false + }, + { + "__type__": "cc.BlockInputEvents", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "", + "sync": false + } +] \ No newline at end of file diff --git a/assets/mini_program_benefits/prefab/BenefitsReward.prefab.meta b/assets/mini_program_benefits/prefab/BenefitsReward.prefab.meta new file mode 100644 index 00000000..09a64003 --- /dev/null +++ b/assets/mini_program_benefits/prefab/BenefitsReward.prefab.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.3.2", + "uuid": "ed22cca6-aecf-4707-b134-729ac6799a1e", + "importer": "prefab", + "optimizationPolicy": "AUTO", + "asyncLoadAssets": false, + "readonly": false, + "subMetas": {} +} \ No newline at end of file diff --git a/assets/mini_program_benefits/prefab/BenefitsWindow.prefab b/assets/mini_program_benefits/prefab/BenefitsWindow.prefab new file mode 100644 index 00000000..6e8ed061 --- /dev/null +++ b/assets/mini_program_benefits/prefab/BenefitsWindow.prefab @@ -0,0 +1,382 @@ +[ + { + "__type__": "cc.Prefab", + "_name": "", + "_objFlags": 0, + "_native": "", + "data": { + "__id__": 1 + }, + "optimizationPolicy": 0, + "asyncLoadAssets": false, + "readonly": false + }, + { + "__type__": "cc.Node", + "_name": "MiniProgramBenefitsPanel", + "_objFlags": 0, + "_parent": null, + "_children": [ + { + "__id__": 3 + }, + { + "__id__": 7 + } + ], + "_active": true, + "_components": [ + { + "__id__": 11 + } + ], + "_prefab": { + "__id__": 2 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 1080, + "height": 1920 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "28aeb831-bb17-4cc7-ae35-0eff80a6705f" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "7f4d80d6-c5b5-4a16-8b88-ba1d67766552", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Mask", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 5 + }, + { + "__id__": 6 + } + ], + "_prefab": { + "__id__": 4 + }, + "_opacity": 140, + "_color": { + "__type__": "cc.Color", + "r": 0, + "g": 0, + "b": 0, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 1080, + "height": 1920 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "25ea0918-6ff1-47c8-83ba-260d8ef858da" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "74430445-4f98-400c-8bf9-0744b538bb9f", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 3 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "01b3819b-d35e-4e1d-a37b-88ab4e33a15c" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": false, + "_atlas": null, + "_id": "3c9fe01e-3845-4fbf-a160-4e2e939b8c54" + }, + { + "__type__": "cc.BlockInputEvents", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 3 + }, + "_enabled": true, + "_id": "3ee656fe-fc70-4970-b94d-46f6aad93ec1" + }, + { + "__type__": "cc.Node", + "_name": "Motion", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [ + { + "__id__": 9 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 8 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 1080, + "height": 1920 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "2a90a50b-bbdb-4133-899f-11899b61f54c" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "6e52e663-f5c6-4474-949b-417fb36cb50f", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "Pages", + "_objFlags": 0, + "_parent": { + "__id__": 7 + }, + "_children": [], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 10 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 950, + "height": 1280 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "d24889d7-beb5-41a2-89a0-243f133757f8" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "1a00c0bc-1521-44d5-89d7-5f21c853b30e", + "sync": false + }, + { + "__type__": "5beddgtO2xJa7pgWeAnhNxK", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "_id": "7cd6fa76-57a8-48dc-b595-9164ce0339bb", + "mainPrefab": { + "__uuid__": "35246572-2373-43fe-9657-71199e7ec388" + }, + "favoritePrefab": { + "__uuid__": "53f2f7a7-d02a-4b8f-9e3b-a982e80e65b9" + }, + "desktopPrefab": { + "__uuid__": "18d25094-31fe-4576-be2a-36b8733c0b70" + }, + "rewardPrefab": { + "__uuid__": "ed22cca6-aecf-4707-b134-729ac6799a1e" + } + } +] \ No newline at end of file diff --git a/assets/mini_program_benefits/prefab/BenefitsWindow.prefab.meta b/assets/mini_program_benefits/prefab/BenefitsWindow.prefab.meta new file mode 100644 index 00000000..7c04dda6 --- /dev/null +++ b/assets/mini_program_benefits/prefab/BenefitsWindow.prefab.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.3.2", + "uuid": "c98f228a-466e-41d0-921a-422ce8895712", + "importer": "prefab", + "optimizationPolicy": "AUTO", + "asyncLoadAssets": false, + "readonly": false, + "subMetas": {} +} \ No newline at end of file diff --git a/assets/passCheck/script.meta b/assets/mini_program_benefits/script.meta similarity index 81% rename from assets/passCheck/script.meta rename to assets/mini_program_benefits/script.meta index 4535ee22..c66de1b4 100644 --- a/assets/passCheck/script.meta +++ b/assets/mini_program_benefits/script.meta @@ -1,6 +1,6 @@ { "ver": "1.1.3", - "uuid": "4a7bec4e-6a81-4d81-86d8-edf1656cf2cf", + "uuid": "ff630dbc-066b-4f2e-bb6f-9e26e5220577", "importer": "folder", "isBundle": false, "bundleName": "", diff --git a/assets/mini_program_benefits/script/MiniProgramBenefitsPanel.ts b/assets/mini_program_benefits/script/MiniProgramBenefitsPanel.ts new file mode 100644 index 00000000..a038b30d --- /dev/null +++ b/assets/mini_program_benefits/script/MiniProgramBenefitsPanel.ts @@ -0,0 +1,183 @@ +import MiniProgramBenefitsReward from "./MiniProgramBenefitsReward"; +const { ccclass, property } = cc._decorator; +const TASKS = ["favorite_entry", "desktop_entry"]; + +/** Layout and artwork live in bundle prefabs. This component only binds state, events and motion. */ +@ccclass +export default class MiniProgramBenefitsPanel extends cc.Component { + @property(cc.Prefab) mainPrefab: cc.Prefab = null; + @property(cc.Prefab) favoritePrefab: cc.Prefab = null; + @property(cc.Prefab) desktopPrefab: cc.Prefab = null; + @property(cc.Prefab) rewardPrefab: cc.Prefab = null; + private host: any; + private motion: cc.Node; + private mask: cc.Node; + private pages: cc.Node; + private views: { [key: string]: cc.Node } = {}; + private page = "list"; + private message = ""; + private busy = false; + private claiming = false; + private closing = false; + private generation = 0; + private unsubscribe: () => void; + private cancelReward: () => void; + private shownReceipts = new Set(); + + init(host: any): void { + this.host = host; + host.bindRewardApi(new MiniProgramBenefitsReward(host.getRewardStorageKey(), host.getUid(), () => host.getState())); + const canvas = cc.find("Canvas"); + this.node.setContentSize(canvas ? canvas.getContentSize() : cc.view.getVisibleSize()); + this.mask = this.node.getChildByName("Mask"); + this.mask.setContentSize(this.node.getContentSize()); + this.motion = this.node.getChildByName("Motion"); this.pages = this.motion.getChildByName("Pages"); + [this.mainPrefab, this.favoritePrefab, this.desktopPrefab].forEach((prefab, index) => { + if (!prefab) throw new Error("福利页面预制体缺失"); + const key = index === 0 ? "list" : TASKS[index - 1]; + const view = this.views[key] = cc.instantiate(prefab); view.parent = this.pages; + const content = view.getChildByName("Content") || view; + content.getChildByName("Close").on(cc.Node.EventType.TOUCH_END, () => { + if (this.closing || this.busy) return; + if (key === "list") this.closeWithAnimation(); + else { this.page = "list"; this.message = ""; this.render(); } + }); + if (key === "list") TASKS.forEach((task, i) => { + const row = view.getChildByName("Task" + i); + row.getChildByName("View").on(cc.Node.EventType.TOUCH_END, () => { + if (this.busy || this.closing) return; + this.page = task; this.message = ""; this.render(); + }); + row.getChildByName("Claim").on(cc.Node.EventType.TOUCH_END, () => this.claim(task)); + }); + }); + this.unsubscribe = host.subscribe(() => { if (!this.busy) this.render(); }); + this.render(); this.refresh(); this.playOpenAnimation(); + } + private playOpenAnimation(): void { + this.motion.scale = 0.86; + cc.tween(this.motion).to(0.20, { scale: 1.035 }, { easing: "quadOut" }) + .to(0.12, { scale: 1 }, { easing: "sineOut" }).start(); + } + private closeWithAnimation(): void { + if (this.closing || this.claiming) return; + this.closing = true; + cc.Tween.stopAllByTarget(this.motion); + cc.Tween.stopAllByTarget(this.mask); + cc.tween(this.motion) + .to(0.15, { scale: 0.90 }, { easing: "sineIn" }) + .call(() => { + if (cc.isValid(this.node, true) && this.host) this.host.close(); + }) + .start(); + } + + private alive(token: number): boolean { return cc.isValid(this.node, true) && this.generation === token; } + private async refresh(): Promise { + const token = this.generation; + this.busy = true; this.message = "正在查询福利…"; this.render(); + try { + await this.host.refresh(); + if (!this.alive(token)) return; + this.message = ""; + await this.showPendingReceipt(); + } catch (error) { + if (this.alive(token)) this.message = error && error.message || "查询失败,请点击刷新重试"; + } finally { + if (this.alive(token)) { this.busy = false; this.render(); } + } + } + private async showPendingReceipt(): Promise { + const token = this.generation; + const state = this.host.getState(); + const pending = TASKS.filter(task => state[task] && state[task].claimedAt && !state[task].acknowledged) + .map(task => ({ task, id: state[task].receiptId })); + const unseen = pending.filter(receipt => !this.shownReceipts.has(receipt.id)); + this.page = "list"; + if (unseen.length) { + await this.showRewardAnimation(unseen.length); + if (!this.alive(token)) return; + unseen.forEach(receipt => this.shownReceipts.add(receipt.id)); + } + for (const receipt of pending) { + if (!this.alive(token)) return; + await this.host.acknowledge(receipt.task, receipt.id); + } + } + + + private render(): void { + if (this.closing || !this.pages) return; + Object.keys(this.views).forEach(key => { + const view = this.views[key]; view.active = key === this.page; + if (!view.active) return; + // Keep editor-authored local positions and sizes; only fit the complete page to the screen. + view.scale = Math.min(1.45, (this.node.width - 64) / view.width, (this.node.height - 70) / view.height); + const content = view.getChildByName("Content") || view; + content.getChildByName("Message").getComponent(cc.Label).string = this.message; + }); + const state = this.host.getState(); + TASKS.forEach((task, index) => { + const item = state[task] || {}, row = this.views.list.getChildByName("Task" + index); + row.getChildByName("View").active = !item.claimedAt && !item.eligibleAt; + row.getChildByName("Claim").active = !item.claimedAt && !!item.eligibleAt; + row.getChildByName("Claimed").active = !!item.claimedAt; + }); + } + private showRewardAnimation(count: number): Promise { + return new Promise((resolve, reject) => { + if (!this.rewardPrefab) { reject(new Error("领取展示预制体缺失")); return; } + const overlay = cc.instantiate(this.rewardPrefab); overlay.parent = this.node; overlay.zIndex = 4000; + overlay.setContentSize(this.node.getContentSize()); + overlay.getChildByName("Mask").setContentSize(overlay.getContentSize()); + const board = overlay.getChildByName("Board"); + board.scale = Math.min(1.4, (overlay.width - 40) / board.width, (overlay.height - 40) / board.height); + const animated: cc.Node[] = [overlay]; let ready = false, finished = false; + const finish = (cancelled: boolean) => { + if (finished) return; finished = true; this.cancelReward = null; + animated.forEach(node => cc.Tween.stopAllByTarget(node)); + overlay.active = false; overlay.destroy(); + if (cancelled) reject(new Error("领取展示已关闭,请重新打开福利查看")); else resolve(); + }; + this.cancelReward = () => finish(true); + overlay.on(cc.Node.EventType.TOUCH_END, () => { if (ready) finish(false); }); + const rewards = board.getChildByName("Rewards"); + [0, 1, 2].forEach(index => { + const item = rewards.getChildByName("Item" + index), badge = item.getChildByName("Quantity"); + badge.getChildByName("Times").active = count === 1; + badge.getChildByName("One").active = count === 1; + const number = badge.getChildByName("Count"); number.active = count !== 1; + number.getComponent(cc.Label).string = "×" + count; + const scale = item.scale; animated.push(item, badge); item.scale = 0; + cc.tween(item).delay(0.12 + index * 0.13).to(0.22, { scale: scale * 1.12 }, { easing: "quadOut" }) + .to(0.12, { scale }, { easing: "sineOut" }).start(); + }); + cc.tween(overlay).delay(1.08).call(() => { ready = true; }).start(); + }); + } + private async claim(task: string): Promise { + if (this.closing || this.busy || this.claiming) return; + const token = this.generation; + this.claiming = true; this.busy = true; this.message = "正在领取…"; this.render(); + try { + await this.host.claim(task); + if (!this.alive(token)) return; + this.message = ""; + await this.showPendingReceipt(); + } catch (error) { + if (this.alive(token)) this.message = error && error.message || "领取结果待确认,请刷新状态"; + } finally { + if (this.alive(token)) { this.claiming = false; this.busy = false; this.render(); } + } + } + + + onDestroy(): void { + this.generation++; if (this.cancelReward) this.cancelReward(); + if (this.motion) cc.Tween.stopAllByTarget(this.motion); + if (this.mask) cc.Tween.stopAllByTarget(this.mask); + if (this.unsubscribe) this.unsubscribe(); + if (this.host) this.host.onPanelDestroyed(this.node); + this.unsubscribe = null; this.host = null; this.views = {}; this.shownReceipts.clear(); + } +} diff --git a/assets/mini_program_benefits/script/MiniProgramBenefitsPanel.ts.meta b/assets/mini_program_benefits/script/MiniProgramBenefitsPanel.ts.meta new file mode 100644 index 00000000..60d6ea61 --- /dev/null +++ b/assets/mini_program_benefits/script/MiniProgramBenefitsPanel.ts.meta @@ -0,0 +1,10 @@ +{ + "ver": "1.1.0", + "uuid": "5bedd82d-3b6c-496b-ba60-59e02784dc4a", + "importer": "typescript", + "isPlugin": false, + "loadPluginInWeb": true, + "loadPluginInNative": true, + "loadPluginInEditor": false, + "subMetas": {} +} \ No newline at end of file diff --git a/assets/mini_program_benefits/script/MiniProgramBenefitsReward.ts b/assets/mini_program_benefits/script/MiniProgramBenefitsReward.ts new file mode 100644 index 00000000..ac7faf60 --- /dev/null +++ b/assets/mini_program_benefits/script/MiniProgramBenefitsReward.ts @@ -0,0 +1,108 @@ +import Utils from "../../Script/module/Pay/Utils"; + +const TYPES = { favorite_entry: "favorite", desktop_entry: "desktop" }; + +/** Server authorizes each task once; the client grants the fixed reward and syncs totals. */ +export default class MiniProgramBenefitsReward { + private static queues: { [key: string]: Promise } = {}; + constructor(private storageKey: string, private uid: string, private getState: () => any) { } + + request(action: string, params: any = {}, level = 0): Promise { + const previous = MiniProgramBenefitsReward.queues[this.storageKey] || Promise.resolve(); + const result = previous.catch(() => {}).then(() => this.run(action, params, level)); + const settled = result.then(() => {}, () => {}); + MiniProgramBenefitsReward.queues[this.storageKey] = settled; + settled.then(() => { + if (MiniProgramBenefitsReward.queues[this.storageKey] === settled) delete MiniProgramBenefitsReward.queues[this.storageKey]; + }); + return result; + } + + private assertAccount(): void { + if (!this.uid || String(cc.fx.GameConfig.GM_INFO.uid) !== this.uid) throw new Error("账号已切换,请重新打开福利"); + } + + private async run(action: string, params: any, level: number): Promise { + this.assertAccount(); + if (!["read", "claim", "ack"].includes(action)) throw new Error("真实奖励不支持模拟或重置"); + if (action !== "read" && !Object.prototype.hasOwnProperty.call(TYPES, params.task)) throw new Error("未知福利任务"); + const state = this.getState(); + // Finish an authorized delivery before starting another one. + for (const task of Object.keys(state)) { + if (state[task].deliveryPending) await this.deliver(task, state[task]); + } + if (action === "claim") { + const item = state[params.task] || {}; + if (!item.claimedAt) { + if (level < 1) throw new Error("通过第 1 关后才能领取"); + if (!item.eligibleAt) throw new Error("请从对应入口进入后领取"); + // Missing login contract must not silently turn into an unclaimed account. + const info: any = cc.fx.GameConfig.GM_INFO; + const flags = info.miniProgramWelfare; + if (!flags || typeof flags.favorite !== "boolean" || typeof flags.desktop !== "boolean") { + throw new Error("福利状态未同步,请重新登录后重试"); + } + const type = TYPES[params.task]; + this.totals(); + await this.post("miniProgramWelfare", { uid: this.uid, type }); + this.assertAccount(); + // Authorization is consumed even if the following inventory save fails. + info.miniProgramWelfare = { ...flags, [type]: true }; + state[params.task] = { ...item, claimedAt: Date.now(), receiptId: "welfare:" + this.uid + ":" + type, acknowledged: false, deliveryPending: true }; + await this.deliver(params.task, state[params.task]); + } + } else if (action === "ack") { + const item = state[params.task]; + if (!item || !item.claimedAt || item.receiptId !== params.receiptId) throw new Error("领奖回执不匹配"); + item.acknowledged = true; + } + return { state, rewards: [2001, 2002, 2003].map(id => ({ id, amount: 1 })) }; + } + + private totals(): any { + const values: any = {}; + ["freezeAmount", "hammerAmount", "magicAmount"].forEach(key => { + const value = cc.fx.GameConfig.GM_INFO[key]; + if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 0 || value >= Number.MAX_SAFE_INTEGER) throw new Error("道具数据尚未准备好,请稍后重试"); + values[key] = value; + }); + return values; + } + + private async deliver(task: string, item: any): Promise { + this.assertAccount(); + const prop = cc.fx.StorageMessage.getStorage("prop") || {}; + const credits = { ...(prop.welfareCredits || {}) }; + if (!credits[item.receiptId]) { + const values = this.totals(); + Object.keys(values).forEach(key => values[key] += 1); + credits[item.receiptId] = true; + cc.fx.StorageMessage.setStorage("prop", { ...prop, ...values, welfareCredits: credits, timestamp: Date.now() }); + const saved = cc.fx.StorageMessage.getStorage("prop"); + if (!saved || !saved.welfareCredits || !saved.welfareCredits[item.receiptId]) throw new Error("奖励保存失败,请重新打开福利重试"); + Object.assign(cc.fx.GameConfig.GM_INFO, values); + } + // A retry only uploads current totals; it never adds the fixed reward twice. + const totals = this.totals(); + await this.post("userProp", { uid: this.uid, action: "save", propType: 0, + propData: JSON.stringify({ freeze: totals.freezeAmount, hammer: totals.hammerAmount, magic_wand: totals.magicAmount }) }); + this.assertAccount(); + item.deliveryPending = false; + } + + private post(endpoint: string, params: any): Promise { + return new Promise((resolve, reject) => { + let completed = false; + const finish = (response: any) => { + if (completed) return; + completed = true; clearTimeout(timeout); + try { this.assertAccount(); } catch (error) { reject(error); return; } + if (response && response.code === 1) resolve(response); + else reject(new Error(response && response.msg || "请求失败;如已扣发奖励,请重新登录确认领取状态")); + }; + const timeout = setTimeout(() => finish({ msg: "领取结果待确认,请重新登录同步状态" }), 5500); + try { Utils.POST(endpoint, params, finish); } + catch (error) { finish({ msg: error && error.message }); } + }); + } +} diff --git a/assets/mini_program_benefits/script/MiniProgramBenefitsReward.ts.meta b/assets/mini_program_benefits/script/MiniProgramBenefitsReward.ts.meta new file mode 100644 index 00000000..cd7a5362 --- /dev/null +++ b/assets/mini_program_benefits/script/MiniProgramBenefitsReward.ts.meta @@ -0,0 +1,10 @@ +{ + "ver": "1.1.0", + "uuid": "3b75cd91-1669-4eea-971a-a87cf1421c90", + "importer": "typescript", + "isPlugin": false, + "loadPluginInWeb": true, + "loadPluginInNative": true, + "loadPluginInEditor": false, + "subMetas": {} +} \ No newline at end of file diff --git a/assets/mini_program_benefits/test.meta b/assets/mini_program_benefits/test.meta new file mode 100644 index 00000000..af379d33 --- /dev/null +++ b/assets/mini_program_benefits/test.meta @@ -0,0 +1,13 @@ +{ + "ver": "1.1.3", + "uuid": "2d2cb45e-c8ca-438a-9086-11de775ce4da", + "importer": "folder", + "isBundle": false, + "bundleName": "", + "priority": 1, + "compressionType": {}, + "optimizeHotUpdate": {}, + "inlineSpriteFrames": {}, + "isRemoteBundle": {}, + "subMetas": {} +} \ No newline at end of file diff --git a/assets/mini_program_benefits/test/BenefitsRuntimeTest.prefab b/assets/mini_program_benefits/test/BenefitsRuntimeTest.prefab new file mode 100644 index 00000000..c06da00f --- /dev/null +++ b/assets/mini_program_benefits/test/BenefitsRuntimeTest.prefab @@ -0,0 +1,1467 @@ +[ + { + "__type__": "cc.Prefab", + "_name": "", + "_objFlags": 0, + "_native": "", + "data": { + "__id__": 1 + }, + "optimizationPolicy": 0, + "asyncLoadAssets": false, + "readonly": false + }, + { + "__type__": "cc.Node", + "_name": "BenefitsRuntimeTest", + "_objFlags": 0, + "_parent": null, + "_children": [ + { + "__id__": 4 + }, + { + "__id__": 8 + } + ], + "_active": true, + "_components": [ + { + "__id__": 3 + } + ], + "_prefab": { + "__id__": 2 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 1080, + "height": 1920 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "7ca97b5bbbc24dbab2e1aa", + "sync": false + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "_id": "0a5XlUuGZCprz0fwaiG835", + "alignMode": 1, + "_target": null, + "_alignFlags": 45, + "_left": 0, + "_right": 0, + "_top": 0, + "_bottom": 0, + "_verticalCenter": 0, + "_horizontalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 1080, + "_originalHeight": 10000 + }, + { + "__type__": "cc.Node", + "_name": "entry", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 6 + }, + { + "__id__": 7 + } + ], + "_prefab": { + "__id__": 5 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 160, + "height": 64 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 420, + 620, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "22c732bc24344f7d989298", + "sync": false + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 4 + }, + "_enabled": true, + "_id": "", + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "福利测试", + "_N$string": "福利测试", + "_fontSize": 26, + "_lineHeight": 35, + "_enableWrapText": true, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 1, + "_N$cacheMode": 0 + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 4 + }, + "_enabled": true, + "_id": "0a5XlUuGZCprz0fwaiG835", + "alignMode": 1, + "_target": null, + "_alignFlags": 33, + "_left": 0, + "_right": 25, + "_top": 180, + "_bottom": 0, + "_verticalCenter": 0, + "_horizontalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 1080, + "_originalHeight": 10000 + }, + { + "__type__": "cc.Node", + "_name": "panel", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [ + { + "__id__": 11 + }, + { + "__id__": 14 + }, + { + "__id__": 17 + }, + { + "__id__": 20 + }, + { + "__id__": 23 + }, + { + "__id__": 26 + }, + { + "__id__": 29 + }, + { + "__id__": 32 + }, + { + "__id__": 39 + } + ], + "_active": false, + "_components": [ + { + "__id__": 10 + } + ], + "_prefab": { + "__id__": 9 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 1000, + "height": 1400 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "f80601a50a6c4875a2ea35", + "sync": false + }, + { + "__type__": "cc.BlockInputEvents", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 8 + }, + "_enabled": true, + "_id": "" + }, + { + "__type__": "cc.Node", + "_name": "title", + "_objFlags": 0, + "_parent": { + "__id__": 8 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 13 + } + ], + "_prefab": { + "__id__": 12 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 800, + "height": 60 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 640, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "21405b02d9bb42119ad723", + "sync": false + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 11 + }, + "_enabled": true, + "_id": "", + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "小程序福利 · 测试面板", + "_N$string": "小程序福利 · 测试面板", + "_fontSize": 32, + "_lineHeight": 41, + "_enableWrapText": true, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 1, + "_N$cacheMode": 0 + }, + { + "__type__": "cc.Node", + "_name": "close", + "_objFlags": 0, + "_parent": { + "__id__": 8 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 16 + } + ], + "_prefab": { + "__id__": 15 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 140, + "height": 60 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 410, + 640, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "db25837270dc4c06b6fffc", + "sync": false + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 14 + }, + "_enabled": true, + "_id": "", + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "关闭", + "_N$string": "关闭", + "_fontSize": 28, + "_lineHeight": 37, + "_enableWrapText": true, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 1, + "_N$cacheMode": 0 + }, + { + "__type__": "cc.Node", + "_name": "query", + "_objFlags": 0, + "_parent": { + "__id__": 8 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 19 + } + ], + "_prefab": { + "__id__": 18 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 220, + "height": 64 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -330, + 560, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "7eb65395f86f4521af85d3", + "sync": false + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 17 + }, + "_enabled": true, + "_id": "", + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "打开福利", + "_N$string": "打开福利", + "_fontSize": 28, + "_lineHeight": 37, + "_enableWrapText": true, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 1, + "_N$cacheMode": 0 + }, + { + "__type__": "cc.Node", + "_name": "clearClaim", + "_objFlags": 0, + "_parent": { + "__id__": 8 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 22 + } + ], + "_prefab": { + "__id__": 21 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 220, + "height": 64 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -110, + 560, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "409ffb232ae74a039bf513", + "sync": false + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 20 + }, + "_enabled": true, + "_id": "", + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "模拟收藏入口", + "_N$string": "模拟收藏入口", + "_fontSize": 28, + "_lineHeight": 37, + "_enableWrapText": true, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 1, + "_N$cacheMode": 0 + }, + { + "__type__": "cc.Node", + "_name": "clearAuto", + "_objFlags": 0, + "_parent": { + "__id__": 8 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 25 + } + ], + "_prefab": { + "__id__": 24 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 220, + "height": 64 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 110, + 560, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "2ab695c9b5ad4ecd9c3a7a", + "sync": false + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 23 + }, + "_enabled": true, + "_id": "", + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "模拟桌面入口", + "_N$string": "模拟桌面入口", + "_fontSize": 28, + "_lineHeight": 37, + "_enableWrapText": true, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 1, + "_N$cacheMode": 0 + }, + { + "__type__": "cc.Node", + "_name": "recheck", + "_objFlags": 0, + "_parent": { + "__id__": 8 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 28 + } + ], + "_prefab": { + "__id__": 27 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 220, + "height": 64 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 330, + 560, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "6553c815e49a4ba699843f", + "sync": false + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 26 + }, + "_enabled": true, + "_id": "", + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "清本地资格", + "_N$string": "清本地资格", + "_fontSize": 24, + "_lineHeight": 33, + "_enableWrapText": true, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 1, + "_N$cacheMode": 0 + }, + { + "__type__": "cc.Node", + "_name": "notice", + "_objFlags": 0, + "_parent": { + "__id__": 8 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 31 + } + ], + "_prefab": { + "__id__": 30 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 930, + "height": 50 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 410, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "e02108dda30f45d492f7e4", + "sync": false + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 29 + }, + "_enabled": true, + "_id": "", + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "仅独立测试服 · 领取影响测试账号 · 不重置服务端记录", + "_N$string": "仅独立测试服 · 领取影响测试账号 · 不重置服务端记录", + "_fontSize": 24, + "_lineHeight": 33, + "_enableWrapText": true, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 1, + "_N$cacheMode": 0 + }, + { + "__type__": "cc.Node", + "_name": "viewport", + "_objFlags": 0, + "_parent": { + "__id__": 8 + }, + "_children": [ + { + "__id__": 35 + } + ], + "_active": true, + "_components": [ + { + "__id__": 34 + }, + { + "__id__": 38 + } + ], + "_prefab": { + "__id__": 33 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 920, + "height": 1000 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + -120, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "0a8eb381e3d64d9d8d665a", + "sync": false + }, + { + "__type__": "cc.Mask", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 32 + }, + "_enabled": true, + "_id": "", + "_type": 0, + "_segments": 64, + "_N$alphaThreshold": 0.1, + "_N$inverted": false, + "_spriteFrame": null + }, + { + "__type__": "cc.Node", + "_name": "content", + "_objFlags": 0, + "_parent": { + "__id__": 32 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 37 + } + ], + "_prefab": { + "__id__": 36 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 900, + "height": 1080 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 1 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 500, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "38e85521dde94c058f4951", + "sync": false + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 35 + }, + "_enabled": true, + "_id": "", + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "点击查询接口查看状态", + "_N$string": "点击查询接口查看状态", + "_fontSize": 24, + "_lineHeight": 33, + "_enableWrapText": true, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 0, + "_N$verticalAlign": 0, + "_N$fontFamily": "Arial", + "_N$overflow": 3, + "_N$cacheMode": 0 + }, + { + "__type__": "cc.ScrollView", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 32 + }, + "_enabled": true, + "_id": "2a8hyyK7lCELB7KL3Sr3ZQ", + "horizontal": false, + "vertical": true, + "inertia": true, + "brake": 0.75, + "elastic": false, + "bounceDuration": 0.23, + "scrollEvents": [], + "cancelInnerEvents": true, + "_N$content": { + "__id__": 35 + }, + "content": { + "__id__": 35 + }, + "_N$horizontalScrollBar": null, + "_N$verticalScrollBar": null + }, + { + "__type__": "cc.Node", + "_name": "clearLocalClaims", + "_objFlags": 0, + "_parent": { + "__id__": 8 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 41 + } + ], + "_prefab": { + "__id__": 40 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 400, + "height": 64 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 480, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "d4cafc0b-87fa-4a4e-b968-4ff35ea3c2d4" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "5c59b70d-fc1e-481d-8ded-8ae35e52500a", + "sync": false + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 39 + }, + "_enabled": true, + "_id": "41a0190a-839d-49a3-91f3-52fe136e4a9d", + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_string": "清本地领取缓存", + "_N$string": "清本地资格", + "_fontSize": 24, + "_lineHeight": 33, + "_enableWrapText": true, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 1, + "_N$cacheMode": 0 + } +] diff --git a/assets/mini_program_benefits/test/BenefitsRuntimeTest.prefab.meta b/assets/mini_program_benefits/test/BenefitsRuntimeTest.prefab.meta new file mode 100644 index 00000000..09934ff1 --- /dev/null +++ b/assets/mini_program_benefits/test/BenefitsRuntimeTest.prefab.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.3.2", + "uuid": "b1389518-e0ad-423b-a85f-c116ab39080d", + "importer": "prefab", + "optimizationPolicy": "AUTO", + "asyncLoadAssets": false, + "readonly": false, + "subMetas": {} +} \ No newline at end of file diff --git a/assets/mini_program_benefits/test/BenefitsRuntimeTest.ts b/assets/mini_program_benefits/test/BenefitsRuntimeTest.ts new file mode 100644 index 00000000..04ea5dfa --- /dev/null +++ b/assets/mini_program_benefits/test/BenefitsRuntimeTest.ts @@ -0,0 +1,90 @@ +const { ccclass } = cc._decorator; + +/** 首页真实流程诊断;可清理测试账号的本地资格和领取缓存。 */ +@ccclass +export default class BenefitsRuntimeTest extends cc.Component { + private bridge: any; + private panel: cc.Node; + private output: cc.Label; + private unsubscribe: () => void; + private entry: cc.Node; + private rank: cc.Node; + private message = "选择入口资格后打开福利,手动测试领取。"; + + initialize(bridge: any): void { this.bridge = bridge; } + onLoad(): void { + if (!this.bridge || !this.bridge.getTestEnvironment().allowed) { this.node.destroy(); return; } + const size = this.node.parent.getContentSize(); + this.node.scale = Math.min(1, size.width / 1080, size.height / 1920); + this.entry = this.node.getChildByName("entry"); + this.entry.setContentSize(200, 88); + this.rank = cc.find("Load/Top/rank", this.node.parent); + this.lateUpdate(); + this.panel = this.node.getChildByName("panel"); + const background = this.panel.addComponent(cc.Graphics); + background.fillColor = cc.color(25, 30, 42, 245); + background.roundRect(-500, -700, 1000, 1400, 18); background.fill(); + this.output = this.panel.getChildByName("viewport").getChildByName("content").getComponent(cc.Label); + this.bind(this.node.getChildByName("entry"), () => { this.panel.active = true; this.render(); }); + this.bind(this.panel.getChildByName("close"), () => this.panel.active = false); + this.bind(this.panel.getChildByName("query"), () => { + if (!this.bridge.getUid()) throw new Error("请等待登录完成"); + if (Number(this.bridge.getTestSnapshot().level) < 1) throw new Error("请先通过第 1 关"); + this.panel.active = false; + this.bridge.open(); + }); + this.bind(this.panel.getChildByName("clearClaim"), () => this.setEligibility("favorite_entry")); + this.bind(this.panel.getChildByName("clearAuto"), () => this.setEligibility("desktop_entry")); + this.bind(this.panel.getChildByName("recheck"), () => this.setEligibility()); + this.bind(this.panel.getChildByName("clearLocalClaims"), () => { + this.bridge.clearTestClaimCache(); + this.message = "已清本地领取缓存,道具数量不变。重新领奖需后台重置领取标记后重新登录。"; + this.render(); + }); + this.unsubscribe = this.bridge.subscribe(() => { if (this.panel.active) this.render(); }); + } + lateUpdate(): void { + if (!this.entry || !this.rank || !cc.isValid(this.rank, true)) return; + // Follow the actual ranking button after Widgets/layout have moved the home bar. + const left = this.rank.convertToWorldSpaceAR(cc.v2(-this.rank.width * this.rank.anchorX, 0)); + const position = this.node.convertToNodeSpaceAR(left); + this.entry.setPosition(position.x - this.entry.width / 2 - 24, position.y); + } + private bind(node: cc.Node, action: () => void): void { + node.on(cc.Node.EventType.TOUCH_END, (event: cc.Event) => { + event.stopPropagation(); + if (!this.bridge.getTestEnvironment().allowed) { this.node.active = false; return; } + try { action(); } + catch (error) { this.message = error && error.message || "操作失败"; this.render(); } + }, this); + } + private setEligibility(task?: string): void { + this.bridge.setTestEligibility(task); + this.message = task ? "已模拟本地入口资格;点击“打开福利”手动领取。" : "已清除当前账号的两项本地入口资格。"; + this.render(); + } + private render(): void { + const s = this.bridge.getTestSnapshot(); + const describe = (id: string) => { + const item = s.state[id] || {}; + return item.claimedAt ? (item.deliveryPending ? "已确认 / 道具同步待重试" : "已领取") : item.eligibleAt ? "可领取(仍需通过首关)" : "未获得入口资格"; + }; + this.output.string = [this.message, + "环境:" + s.environment.version + "\n地址:" + s.environment.baseUrl, + "UID:" + (s.uid || "未登录") + "\n关卡:" + s.level, + "我的小程序(1104):" + describe("favorite_entry"), + "桌面入口(1023):" + describe("desktop_entry"), + "首页入口:" + (s.entryVisible ? "显示" : "隐藏") + " / 红点:" + (s.redDot ? "亮" : "灭"), + "福利弹窗:" + (s.panelBusy ? "打开或加载/释放中" : "已关闭"), + "登录返回 miniProgramWelfare:\n" + JSON.stringify(s.loginWelfare || null, null, 2), + "本地资格:\n" + JSON.stringify(s.eligibility, null, 2), + "当前领取状态:\n" + JSON.stringify(s.state, null, 2), + "最近入口记录(模拟按钮不伪造微信记录):\n" + JSON.stringify(s.diagnostics, null, 2), + "领取会调用测试服 miniProgramWelfare 和 userProp,影响测试账号道具。\n清资格不会重置服务端已领取状态;重复测试领奖请换测试账号或由后端重置。\n此处展示当前登录快照,不额外请求领奖接口。" + ].join("\n\n"); + this.scheduleOnce(() => { + if (cc.isValid(this.node, true)) this.panel.getChildByName("viewport").getComponent(cc.ScrollView).scrollToTop(0); + }, 0); + } + onDestroy(): void { if (this.unsubscribe) this.unsubscribe(); } +} diff --git a/assets/mini_program_benefits/test/BenefitsRuntimeTest.ts.meta b/assets/mini_program_benefits/test/BenefitsRuntimeTest.ts.meta new file mode 100644 index 00000000..832d8cdd --- /dev/null +++ b/assets/mini_program_benefits/test/BenefitsRuntimeTest.ts.meta @@ -0,0 +1,10 @@ +{ + "ver": "1.1.0", + "uuid": "8863c6ad-bd36-4784-a03a-a86446697f2d", + "importer": "typescript", + "isPlugin": false, + "loadPluginInWeb": true, + "loadPluginInNative": true, + "loadPluginInEditor": false, + "subMetas": {} +} \ No newline at end of file diff --git a/assets/mini_program_benefits/test/README.md b/assets/mini_program_benefits/test/README.md new file mode 100644 index 00000000..47a46624 --- /dev/null +++ b/assets/mini_program_benefits/test/README.md @@ -0,0 +1,10 @@ +# 福利测试面板 + +更新日期:2026-09-18。 + +本目录是普通目录,与父目录 mini_program_benefits 共用活动分包,没有独立分包注册。保留白字入口和测试面板实现,但当前挂载调用已注释、prefab entry 已关闭,各环境均不自动显示。恢复时须同时启用两处,并满足独立测试服门禁;正式版仍不显示。 + +- [操作、字段和验收步骤](../docs/mini-program-benefits-testing.md) +- [活动总览](../README.md) + +面板动态挂载组件;位置由代码跟随排行榜。独立场景、Mock 和旧重置按钮已移除。 diff --git a/assets/mini_program_benefits/test/README.md.meta b/assets/mini_program_benefits/test/README.md.meta new file mode 100644 index 00000000..80fd3fce --- /dev/null +++ b/assets/mini_program_benefits/test/README.md.meta @@ -0,0 +1,6 @@ +{ + "ver": "2.0.2", + "uuid": "d3198d0e-c7fc-4446-9e1d-81abbcf1bded", + "importer": "text", + "subMetas": {} +} \ No newline at end of file diff --git a/assets/pause/texture.meta b/assets/mini_program_benefits/texture.meta similarity index 81% rename from assets/pause/texture.meta rename to assets/mini_program_benefits/texture.meta index 429c33b8..8e29cef9 100644 --- a/assets/pause/texture.meta +++ b/assets/mini_program_benefits/texture.meta @@ -1,6 +1,6 @@ { "ver": "1.1.3", - "uuid": "ccd7701f-585a-411b-a8ef-a9f03f22189f", + "uuid": "e9c190bb-fa97-4c63-aeb2-e5c9dddc56d3", "importer": "folder", "isBundle": false, "bundleName": "", diff --git a/assets/mini_program_benefits/texture/claim.png b/assets/mini_program_benefits/texture/claim.png new file mode 100644 index 00000000..8082c67e Binary files /dev/null and b/assets/mini_program_benefits/texture/claim.png differ diff --git a/assets/mini_program_benefits/texture/claim.png.meta b/assets/mini_program_benefits/texture/claim.png.meta new file mode 100644 index 00000000..dd24faae --- /dev/null +++ b/assets/mini_program_benefits/texture/claim.png.meta @@ -0,0 +1,38 @@ +{ + "ver": "2.3.7", + "uuid": "ce30001a-f22b-4148-8216-b94a6396e887", + "importer": "texture", + "type": "sprite", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": false, + "width": 198, + "height": 94, + "platformSettings": {}, + "subMetas": { + "claim": { + "ver": "1.0.6", + "uuid": "f55f5c8c-5140-4ce2-8b7c-52c8cf519714", + "importer": "sprite-frame", + "rawTextureUuid": "ce30001a-f22b-4148-8216-b94a6396e887", + "trimType": "custom", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 198, + "height": 94, + "rawWidth": 198, + "rawHeight": 94, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {} + } + } +} \ No newline at end of file diff --git a/assets/mini_program_benefits/texture/close.png b/assets/mini_program_benefits/texture/close.png new file mode 100644 index 00000000..3892af4f Binary files /dev/null and b/assets/mini_program_benefits/texture/close.png differ diff --git a/assets/mini_program_benefits/texture/close.png.meta b/assets/mini_program_benefits/texture/close.png.meta new file mode 100644 index 00000000..72dc8634 --- /dev/null +++ b/assets/mini_program_benefits/texture/close.png.meta @@ -0,0 +1,38 @@ +{ + "ver": "2.3.7", + "uuid": "e743086f-8c48-4c72-bb7c-78f72fc0fe45", + "importer": "texture", + "type": "sprite", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": false, + "width": 103, + "height": 112, + "platformSettings": {}, + "subMetas": { + "close": { + "ver": "1.0.6", + "uuid": "67398214-36f6-46c1-a5e8-5b1fc859281a", + "importer": "sprite-frame", + "rawTextureUuid": "e743086f-8c48-4c72-bb7c-78f72fc0fe45", + "trimType": "custom", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 103, + "height": 112, + "rawWidth": 103, + "rawHeight": 112, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {} + } + } +} \ No newline at end of file diff --git a/assets/mini_program_benefits/texture/desktop.png b/assets/mini_program_benefits/texture/desktop.png new file mode 100644 index 00000000..874f8a76 Binary files /dev/null and b/assets/mini_program_benefits/texture/desktop.png differ diff --git a/assets/mini_program_benefits/texture/desktop.png.meta b/assets/mini_program_benefits/texture/desktop.png.meta new file mode 100644 index 00000000..96eed598 --- /dev/null +++ b/assets/mini_program_benefits/texture/desktop.png.meta @@ -0,0 +1,38 @@ +{ + "ver": "2.3.7", + "uuid": "4e3998d1-427b-4e80-bdc9-3ec66053e47a", + "importer": "texture", + "type": "sprite", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": false, + "width": 166, + "height": 166, + "platformSettings": {}, + "subMetas": { + "desktop": { + "ver": "1.0.6", + "uuid": "11350710-460d-4637-8e97-62d6ce0dfc94", + "importer": "sprite-frame", + "rawTextureUuid": "4e3998d1-427b-4e80-bdc9-3ec66053e47a", + "trimType": "custom", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 166, + "height": 166, + "rawWidth": 166, + "rawHeight": 166, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {} + } + } +} \ No newline at end of file diff --git a/assets/mini_program_benefits/texture/favorite.png b/assets/mini_program_benefits/texture/favorite.png new file mode 100644 index 00000000..18b1cc04 Binary files /dev/null and b/assets/mini_program_benefits/texture/favorite.png differ diff --git a/assets/mini_program_benefits/texture/favorite.png.meta b/assets/mini_program_benefits/texture/favorite.png.meta new file mode 100644 index 00000000..34faffc4 --- /dev/null +++ b/assets/mini_program_benefits/texture/favorite.png.meta @@ -0,0 +1,38 @@ +{ + "ver": "2.3.7", + "uuid": "2d76e130-a28e-47fd-b6de-26425bc7d24b", + "importer": "texture", + "type": "sprite", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": false, + "width": 166, + "height": 166, + "platformSettings": {}, + "subMetas": { + "favorite": { + "ver": "1.0.6", + "uuid": "dc83d9bc-5368-4d53-917b-58607f6f24c0", + "importer": "sprite-frame", + "rawTextureUuid": "2d76e130-a28e-47fd-b6de-26425bc7d24b", + "trimType": "custom", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 166, + "height": 166, + "rawWidth": 166, + "rawHeight": 166, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {} + } + } +} \ No newline at end of file diff --git a/assets/mini_program_benefits/texture/get.png b/assets/mini_program_benefits/texture/get.png new file mode 100644 index 00000000..2dbf0659 Binary files /dev/null and b/assets/mini_program_benefits/texture/get.png differ diff --git a/assets/mini_program_benefits/texture/get.png.meta b/assets/mini_program_benefits/texture/get.png.meta new file mode 100644 index 00000000..d803b792 --- /dev/null +++ b/assets/mini_program_benefits/texture/get.png.meta @@ -0,0 +1,38 @@ +{ + "ver": "2.3.7", + "uuid": "f4ca4dcb-a437-430d-9376-0163b24a6ba3", + "importer": "texture", + "type": "sprite", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": true, + "width": 100, + "height": 82, + "platformSettings": {}, + "subMetas": { + "get": { + "ver": "1.0.6", + "uuid": "91ab9ed1-902b-4062-9e65-cecc117d4e50", + "importer": "sprite-frame", + "rawTextureUuid": "f4ca4dcb-a437-430d-9376-0163b24a6ba3", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 100, + "height": 82, + "rawWidth": 100, + "rawHeight": 82, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {} + } + } +} \ No newline at end of file diff --git a/assets/mini_program_benefits/texture/guide-desktop.png b/assets/mini_program_benefits/texture/guide-desktop.png new file mode 100644 index 00000000..897d13b1 Binary files /dev/null and b/assets/mini_program_benefits/texture/guide-desktop.png differ diff --git a/assets/mini_program_benefits/texture/guide-desktop.png.meta b/assets/mini_program_benefits/texture/guide-desktop.png.meta new file mode 100644 index 00000000..a1c944f9 --- /dev/null +++ b/assets/mini_program_benefits/texture/guide-desktop.png.meta @@ -0,0 +1,38 @@ +{ + "ver": "2.3.7", + "uuid": "beddcd13-7991-4d9c-9df4-be6d36f67ad7", + "importer": "texture", + "type": "sprite", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": false, + "width": 723, + "height": 457, + "platformSettings": {}, + "subMetas": { + "guide-desktop": { + "ver": "1.0.6", + "uuid": "371e7dd2-4438-440b-b1b3-b599d1c325ca", + "importer": "sprite-frame", + "rawTextureUuid": "beddcd13-7991-4d9c-9df4-be6d36f67ad7", + "trimType": "custom", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 723, + "height": 457, + "rawWidth": 723, + "rawHeight": 457, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {} + } + } +} \ No newline at end of file diff --git a/assets/mini_program_benefits/texture/guide-favorite.png b/assets/mini_program_benefits/texture/guide-favorite.png new file mode 100644 index 00000000..f6d3364e Binary files /dev/null and b/assets/mini_program_benefits/texture/guide-favorite.png differ diff --git a/assets/mini_program_benefits/texture/guide-favorite.png.meta b/assets/mini_program_benefits/texture/guide-favorite.png.meta new file mode 100644 index 00000000..12b23680 --- /dev/null +++ b/assets/mini_program_benefits/texture/guide-favorite.png.meta @@ -0,0 +1,38 @@ +{ + "ver": "2.3.7", + "uuid": "ca0020cd-5a02-43d8-b646-8021f413ec3f", + "importer": "texture", + "type": "sprite", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": false, + "width": 765, + "height": 622, + "platformSettings": {}, + "subMetas": { + "guide-favorite": { + "ver": "1.0.6", + "uuid": "c2ef578d-39d4-44a6-a2c5-5af635ae1492", + "importer": "sprite-frame", + "rawTextureUuid": "ca0020cd-5a02-43d8-b646-8021f413ec3f", + "trimType": "custom", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 765, + "height": 622, + "rawWidth": 765, + "rawHeight": 622, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {} + } + } +} \ No newline at end of file diff --git a/assets/mini_program_benefits/texture/guide-panel.png b/assets/mini_program_benefits/texture/guide-panel.png new file mode 100644 index 00000000..795ee908 Binary files /dev/null and b/assets/mini_program_benefits/texture/guide-panel.png differ diff --git a/assets/mini_program_benefits/texture/guide-panel.png.meta b/assets/mini_program_benefits/texture/guide-panel.png.meta new file mode 100644 index 00000000..2ed6eef6 --- /dev/null +++ b/assets/mini_program_benefits/texture/guide-panel.png.meta @@ -0,0 +1,38 @@ +{ + "ver": "2.3.7", + "uuid": "0dd82e81-7969-4ab1-b3d7-6826ea3382ea", + "importer": "texture", + "type": "sprite", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": false, + "width": 902, + "height": 548, + "platformSettings": {}, + "subMetas": { + "guide-panel": { + "ver": "1.0.6", + "uuid": "77480e0d-fe09-4873-8aea-61df6b4bbf64", + "importer": "sprite-frame", + "rawTextureUuid": "0dd82e81-7969-4ab1-b3d7-6826ea3382ea", + "trimType": "custom", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 902, + "height": 548, + "rawWidth": 902, + "rawHeight": 548, + "borderTop": 365, + "borderBottom": 95, + "borderLeft": 100, + "borderRight": 100, + "subMetas": {} + } + } +} \ No newline at end of file diff --git a/assets/mini_program_benefits/texture/panel.png b/assets/mini_program_benefits/texture/panel.png new file mode 100644 index 00000000..fd20c006 Binary files /dev/null and b/assets/mini_program_benefits/texture/panel.png differ diff --git a/assets/mini_program_benefits/texture/panel.png.meta b/assets/mini_program_benefits/texture/panel.png.meta new file mode 100644 index 00000000..ec8787c3 --- /dev/null +++ b/assets/mini_program_benefits/texture/panel.png.meta @@ -0,0 +1,38 @@ +{ + "ver": "2.3.7", + "uuid": "986837cb-81e5-4a6a-9187-1b1b277422cf", + "importer": "texture", + "type": "sprite", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": false, + "width": 950, + "height": 650, + "platformSettings": {}, + "subMetas": { + "panel": { + "ver": "1.0.6", + "uuid": "2562cef8-4823-429f-adc9-5a757340942d", + "importer": "sprite-frame", + "rawTextureUuid": "986837cb-81e5-4a6a-9187-1b1b277422cf", + "trimType": "custom", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 950, + "height": 650, + "rawWidth": 950, + "rawHeight": 650, + "borderTop": 390, + "borderBottom": 110, + "borderLeft": 105, + "borderRight": 105, + "subMetas": {} + } + } +} \ No newline at end of file diff --git a/assets/mini_program_benefits/texture/quantity-1.png b/assets/mini_program_benefits/texture/quantity-1.png new file mode 100644 index 00000000..7cf8ffbe Binary files /dev/null and b/assets/mini_program_benefits/texture/quantity-1.png differ diff --git a/assets/mini_program_benefits/texture/quantity-1.png.meta b/assets/mini_program_benefits/texture/quantity-1.png.meta new file mode 100644 index 00000000..a56d7c90 --- /dev/null +++ b/assets/mini_program_benefits/texture/quantity-1.png.meta @@ -0,0 +1,38 @@ +{ + "ver": "2.3.7", + "uuid": "6ffa87a6-4661-4023-bdd1-dc89940eaa62", + "importer": "texture", + "type": "sprite", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": false, + "width": 48, + "height": 54, + "platformSettings": {}, + "subMetas": { + "quantity-1": { + "ver": "1.0.6", + "uuid": "011c8cfa-9a31-4c2c-8e40-13d8ef5cba75", + "importer": "sprite-frame", + "rawTextureUuid": "6ffa87a6-4661-4023-bdd1-dc89940eaa62", + "trimType": "custom", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 48, + "height": 54, + "rawWidth": 48, + "rawHeight": 54, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {} + } + } +} \ No newline at end of file diff --git a/assets/mini_program_benefits/texture/quantity-times.png b/assets/mini_program_benefits/texture/quantity-times.png new file mode 100644 index 00000000..e64134fd Binary files /dev/null and b/assets/mini_program_benefits/texture/quantity-times.png differ diff --git a/assets/mini_program_benefits/texture/quantity-times.png.meta b/assets/mini_program_benefits/texture/quantity-times.png.meta new file mode 100644 index 00000000..ad82de09 --- /dev/null +++ b/assets/mini_program_benefits/texture/quantity-times.png.meta @@ -0,0 +1,38 @@ +{ + "ver": "2.3.7", + "uuid": "d309c915-049b-4fa7-a6bf-eaa1f951c2ee", + "importer": "texture", + "type": "sprite", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": false, + "width": 31, + "height": 32, + "platformSettings": {}, + "subMetas": { + "quantity-times": { + "ver": "1.0.6", + "uuid": "26ab48f6-c12d-48be-90c7-e06d6a075945", + "importer": "sprite-frame", + "rawTextureUuid": "d309c915-049b-4fa7-a6bf-eaa1f951c2ee", + "trimType": "custom", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 31, + "height": 32, + "rawWidth": 31, + "rawHeight": 32, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {} + } + } +} \ No newline at end of file diff --git a/assets/mini_program_benefits/texture/solid-white.png b/assets/mini_program_benefits/texture/solid-white.png new file mode 100644 index 00000000..e98c4d0a Binary files /dev/null and b/assets/mini_program_benefits/texture/solid-white.png differ diff --git a/assets/mini_program_benefits/texture/solid-white.png.meta b/assets/mini_program_benefits/texture/solid-white.png.meta new file mode 100644 index 00000000..8e5daa60 --- /dev/null +++ b/assets/mini_program_benefits/texture/solid-white.png.meta @@ -0,0 +1,38 @@ +{ + "ver": "2.3.7", + "uuid": "013482f3-92ed-4d6d-9b95-437fe03acb31", + "importer": "texture", + "type": "sprite", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": false, + "width": 2, + "height": 2, + "platformSettings": {}, + "subMetas": { + "solid-white": { + "ver": "1.0.6", + "uuid": "01b3819b-d35e-4e1d-a37b-88ab4e33a15c", + "importer": "sprite-frame", + "rawTextureUuid": "013482f3-92ed-4d6d-9b95-437fe03acb31", + "trimType": "custom", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 2, + "height": 2, + "rawWidth": 2, + "rawHeight": 2, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {} + } + } +} \ No newline at end of file diff --git a/assets/mini_program_benefits/texture/task-title-desktop.png b/assets/mini_program_benefits/texture/task-title-desktop.png new file mode 100644 index 00000000..324b424f Binary files /dev/null and b/assets/mini_program_benefits/texture/task-title-desktop.png differ diff --git a/assets/mini_program_benefits/texture/task-title-desktop.png.meta b/assets/mini_program_benefits/texture/task-title-desktop.png.meta new file mode 100644 index 00000000..4bb3f13c --- /dev/null +++ b/assets/mini_program_benefits/texture/task-title-desktop.png.meta @@ -0,0 +1,38 @@ +{ + "ver": "2.3.7", + "uuid": "50010b71-3937-4613-9fc8-9e697e0f84a7", + "importer": "texture", + "type": "sprite", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": false, + "width": 206, + "height": 38, + "platformSettings": {}, + "subMetas": { + "task-title-desktop": { + "ver": "1.0.6", + "uuid": "6195066d-ffde-42dd-946a-98391261422d", + "importer": "sprite-frame", + "rawTextureUuid": "50010b71-3937-4613-9fc8-9e697e0f84a7", + "trimType": "custom", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 206, + "height": 38, + "rawWidth": 206, + "rawHeight": 38, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {} + } + } +} \ No newline at end of file diff --git a/assets/mini_program_benefits/texture/task-title-favorite.png b/assets/mini_program_benefits/texture/task-title-favorite.png new file mode 100644 index 00000000..ec29f518 Binary files /dev/null and b/assets/mini_program_benefits/texture/task-title-favorite.png differ diff --git a/assets/mini_program_benefits/texture/task-title-favorite.png.meta b/assets/mini_program_benefits/texture/task-title-favorite.png.meta new file mode 100644 index 00000000..36d9dbb2 --- /dev/null +++ b/assets/mini_program_benefits/texture/task-title-favorite.png.meta @@ -0,0 +1,38 @@ +{ + "ver": "2.3.7", + "uuid": "b7589df2-004b-446c-b045-9c1afb1f87ed", + "importer": "texture", + "type": "sprite", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": false, + "width": 332, + "height": 39, + "platformSettings": {}, + "subMetas": { + "task-title-favorite": { + "ver": "1.0.6", + "uuid": "8c702fbc-5dcf-4208-ba4e-d268bab82455", + "importer": "sprite-frame", + "rawTextureUuid": "b7589df2-004b-446c-b045-9c1afb1f87ed", + "trimType": "custom", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 332, + "height": 39, + "rawWidth": 332, + "rawHeight": 39, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {} + } + } +} \ No newline at end of file diff --git a/assets/mini_program_benefits/texture/task.png b/assets/mini_program_benefits/texture/task.png new file mode 100644 index 00000000..96b712a6 Binary files /dev/null and b/assets/mini_program_benefits/texture/task.png differ diff --git a/assets/mini_program_benefits/texture/task.png.meta b/assets/mini_program_benefits/texture/task.png.meta new file mode 100644 index 00000000..cbf5e2db --- /dev/null +++ b/assets/mini_program_benefits/texture/task.png.meta @@ -0,0 +1,38 @@ +{ + "ver": "2.3.7", + "uuid": "85a0bbf5-5475-4c56-a022-0689f0fabe75", + "importer": "texture", + "type": "sprite", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": false, + "width": 818, + "height": 222, + "platformSettings": {}, + "subMetas": { + "task": { + "ver": "1.0.6", + "uuid": "db3bc0a7-ec60-4031-9692-f32d157dae7e", + "importer": "sprite-frame", + "rawTextureUuid": "85a0bbf5-5475-4c56-a022-0689f0fabe75", + "trimType": "custom", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 818, + "height": 222, + "rawWidth": 818, + "rawHeight": 222, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {} + } + } +} \ No newline at end of file diff --git a/assets/mini_program_benefits/texture/title-desktop.png b/assets/mini_program_benefits/texture/title-desktop.png new file mode 100644 index 00000000..e68313f9 Binary files /dev/null and b/assets/mini_program_benefits/texture/title-desktop.png differ diff --git a/assets/mini_program_benefits/texture/title-desktop.png.meta b/assets/mini_program_benefits/texture/title-desktop.png.meta new file mode 100644 index 00000000..16149eba --- /dev/null +++ b/assets/mini_program_benefits/texture/title-desktop.png.meta @@ -0,0 +1,38 @@ +{ + "ver": "2.3.7", + "uuid": "5fb2be42-33ca-4474-a0f2-aeafe2919797", + "importer": "texture", + "type": "sprite", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": false, + "width": 680, + "height": 220, + "platformSettings": {}, + "subMetas": { + "title-desktop": { + "ver": "1.0.6", + "uuid": "1ee4a1a7-9771-4505-8d96-3ebe899d21f5", + "importer": "sprite-frame", + "rawTextureUuid": "5fb2be42-33ca-4474-a0f2-aeafe2919797", + "trimType": "custom", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 680, + "height": 220, + "rawWidth": 680, + "rawHeight": 220, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {} + } + } +} \ No newline at end of file diff --git a/assets/mini_program_benefits/texture/title-favorite.png b/assets/mini_program_benefits/texture/title-favorite.png new file mode 100644 index 00000000..c70f828f Binary files /dev/null and b/assets/mini_program_benefits/texture/title-favorite.png differ diff --git a/assets/mini_program_benefits/texture/title-favorite.png.meta b/assets/mini_program_benefits/texture/title-favorite.png.meta new file mode 100644 index 00000000..1b801535 --- /dev/null +++ b/assets/mini_program_benefits/texture/title-favorite.png.meta @@ -0,0 +1,38 @@ +{ + "ver": "2.3.7", + "uuid": "48317e24-0e1b-4f55-a1b1-cfc2c9f15450", + "importer": "texture", + "type": "sprite", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": false, + "width": 680, + "height": 220, + "platformSettings": {}, + "subMetas": { + "title-favorite": { + "ver": "1.0.6", + "uuid": "6df5bfb7-df44-4981-b6cf-b183290a991e", + "importer": "sprite-frame", + "rawTextureUuid": "48317e24-0e1b-4f55-a1b1-cfc2c9f15450", + "trimType": "custom", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 680, + "height": 220, + "rawWidth": 680, + "rawHeight": 220, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {} + } + } +} \ No newline at end of file diff --git a/assets/mini_program_benefits/texture/title-list.png b/assets/mini_program_benefits/texture/title-list.png new file mode 100644 index 00000000..4a3635d5 Binary files /dev/null and b/assets/mini_program_benefits/texture/title-list.png differ diff --git a/assets/mini_program_benefits/texture/title-list.png.meta b/assets/mini_program_benefits/texture/title-list.png.meta new file mode 100644 index 00000000..a7a2f0ac --- /dev/null +++ b/assets/mini_program_benefits/texture/title-list.png.meta @@ -0,0 +1,38 @@ +{ + "ver": "2.3.7", + "uuid": "824d5d91-18c0-4fb6-be24-bec5e522d192", + "importer": "texture", + "type": "sprite", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": false, + "width": 712, + "height": 186, + "platformSettings": {}, + "subMetas": { + "title-list": { + "ver": "1.0.6", + "uuid": "0877f183-4746-46f2-a2fb-d2b19f680af9", + "importer": "sprite-frame", + "rawTextureUuid": "824d5d91-18c0-4fb6-be24-bec5e522d192", + "trimType": "custom", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 712, + "height": 186, + "rawWidth": 712, + "rawHeight": 186, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {} + } + } +} \ No newline at end of file diff --git a/assets/mini_program_benefits/texture/view.png b/assets/mini_program_benefits/texture/view.png new file mode 100644 index 00000000..eb2a771a Binary files /dev/null and b/assets/mini_program_benefits/texture/view.png differ diff --git a/assets/mini_program_benefits/texture/view.png.meta b/assets/mini_program_benefits/texture/view.png.meta new file mode 100644 index 00000000..e582b01d --- /dev/null +++ b/assets/mini_program_benefits/texture/view.png.meta @@ -0,0 +1,38 @@ +{ + "ver": "2.3.7", + "uuid": "58e02ceb-9f35-48bb-afa3-79149d463175", + "importer": "texture", + "type": "sprite", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": false, + "width": 198, + "height": 94, + "platformSettings": {}, + "subMetas": { + "view": { + "ver": "1.0.6", + "uuid": "8791583b-79b5-48ee-ba2f-27988ec87c3c", + "importer": "sprite-frame", + "rawTextureUuid": "58e02ceb-9f35-48bb-afa3-79149d463175", + "trimType": "custom", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 198, + "height": 94, + "rawWidth": 198, + "rawHeight": 94, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {} + } + } +} \ No newline at end of file diff --git a/assets/resources/texture.meta b/assets/resources/texture.meta new file mode 100644 index 00000000..1fc701d2 --- /dev/null +++ b/assets/resources/texture.meta @@ -0,0 +1,13 @@ +{ + "ver": "1.1.3", + "uuid": "d0a4df6e-8927-4ab3-8129-484cd1710177", + "importer": "folder", + "isBundle": false, + "bundleName": "", + "priority": 1, + "compressionType": {}, + "optimizeHotUpdate": {}, + "inlineSpriteFrames": {}, + "isRemoteBundle": {}, + "subMetas": {} +} \ No newline at end of file diff --git a/assets/resources/texture/mini-program-benefits-entry.png b/assets/resources/texture/mini-program-benefits-entry.png new file mode 100644 index 00000000..1c0ddfb7 Binary files /dev/null and b/assets/resources/texture/mini-program-benefits-entry.png differ diff --git a/assets/resources/texture/mini-program-benefits-entry.png.meta b/assets/resources/texture/mini-program-benefits-entry.png.meta new file mode 100644 index 00000000..69510122 --- /dev/null +++ b/assets/resources/texture/mini-program-benefits-entry.png.meta @@ -0,0 +1,38 @@ +{ + "ver": "2.3.7", + "uuid": "5ce422a1-01fc-4223-a376-2293caa400bd", + "importer": "texture", + "type": "sprite", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": false, + "width": 193, + "height": 179, + "platformSettings": {}, + "subMetas": { + "mini-program-benefits-entry": { + "ver": "1.0.6", + "uuid": "6f59a7ab-37f7-4e9f-b703-f4a3a548801a", + "importer": "sprite-frame", + "rawTextureUuid": "5ce422a1-01fc-4223-a376-2293caa400bd", + "trimType": "custom", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 193, + "height": 179, + "rawWidth": 193, + "rawHeight": 179, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {} + } + } +} \ No newline at end of file diff --git a/assets/seven_day_gift/docs/seven-day-gift-maintenance.md b/assets/seven_day_gift/docs/seven-day-gift-maintenance.md index ccf9d0ca..05f3acb1 100644 --- a/assets/seven_day_gift/docs/seven-day-gift-maintenance.md +++ b/assets/seven_day_gift/docs/seven-day-gift-maintenance.md @@ -9,7 +9,7 @@ 3. 通过主页的 `loadHomeBundleWithDependencies("seven_day_gift", 5, ...)` 加载分包及依赖,再加载并实例化 `prefab/sevenDayGift`。 4. 将查询快照交给活动视图,成功显示后才记录当天已弹。加载或初始化失败不会写已弹记录。 5. 打开后等待点击,不自动领取。点击当天卡片或弹窗外部,使用快照中当天的奖励执行发奖;成功后更新本地领取状态并播放上浮效果。 -6. 领取后再次点击外部关闭。销毁活动节点,通常下一帧释放活动 Bundle;宿主销毁时立即释放。独立测试服的测试入口存在时保留 Bundle,退出主页时一并释放。 +6. 领取后再次点击外部关闭。销毁活动节点,通常下一帧释放活动 Bundle;宿主销毁时立即释放。测试入口恢复且实际存在时保留 Bundle,退出主页时一并释放。2026-09-18 核对:Host 已暂停加载白字测试入口,详见测试说明。 没有手动入口或关闭按钮。代码中的 `autoClaim` 是保留的旧参数名,目前表示自动展示来源,不代表自动领取。 diff --git a/assets/seven_day_gift/docs/testSeven-local-preview.md b/assets/seven_day_gift/docs/testSeven-local-preview.md index 616d1568..e1932592 100644 --- a/assets/seven_day_gift/docs/testSeven-local-preview.md +++ b/assets/seven_day_gift/docs/testSeven-local-preview.md @@ -2,13 +2,15 @@ 核对日期:2026-09-16。实现和资源维护见 [实现与维护说明](seven-day-gift-maintenance.md)。 -## 当前可用入口 +## 当前入口状态(2026-09-18 补充核对) + +七日白字入口也已暂停:SevenDayGiftHost.onLoad 中 loadTestEntry 调用被注释。恢复时需重新启用调用并打开 SevenDayTest.prefab 的 entry,再重新构建。下面白字面板操作以恢复为前提;正常活动查询仍保留。 当前项目没有旧版 `assets/testSeven/` 或 `TestSeven.fire`。新版真实接口测试入口位于 `assets/seven_day_gift/test/`,与七日活动共用 Bundle,不需要手动移走测试目录。 ### 主页“七日测试”白字入口 -仅微信开发版或体验版、且 `Utils.testHttpip` 与 `Utils.httpip` 为不同服务器源时加载显示。正式版、网页环境、空地址及同源地址均不开放。**当前两个地址相同,因此入口默认不会显示**;需要先配置经确认的独立测试服,不能仅因使用开发版就放开。 +仅微信开发版或体验版、且 `Utils.testHttpip` 与 `Utils.httpip` 为不同服务器源时加载显示。正式版、网页环境、空地址及同源地址均不开放。地址是否同源以当前 Utils 配置为准;即使配置独立测试服,已暂停的挂载也不会自动恢复。 点击主页右上方白色“七日测试”打开面板: diff --git a/assets/seven_day_gift/test/SevenDayTest.prefab b/assets/seven_day_gift/test/SevenDayTest.prefab index b6157782..669a0f4b 100644 --- a/assets/seven_day_gift/test/SevenDayTest.prefab +++ b/assets/seven_day_gift/test/SevenDayTest.prefab @@ -126,7 +126,7 @@ "__id__": 1 }, "_children": [], - "_active": true, + "_active": false, "_components": [ { "__id__": 6 diff --git a/build-templates/wechatgame/game.json b/build-templates/wechatgame/game.json index f4c6b17e..db62f170 100644 --- a/build-templates/wechatgame/game.json +++ b/build-templates/wechatgame/game.json @@ -28,6 +28,10 @@ "name": "gameplay_intro", "root": "subpackages/gameplay_intro" }, + { + "name": "mini_program_benefits", + "root": "subpackages/mini_program_benefits" + }, { "name": "gacha_bundle", "root": "subpackages/gacha_bundle" diff --git a/tools/test-starter-pack.cjs b/tools/test-starter-pack.cjs index 59d9c3ac..9672e19e 100644 --- a/tools/test-starter-pack.cjs +++ b/tools/test-starter-pack.cjs @@ -114,12 +114,15 @@ test('server clock correction and confirmed purchase win over stale local status }); function homeFixture() { const f = fixture(); + f.globals.MiniProgramBenefitsBridge = { instance: { refreshEntry() {} } }; + f.globals.HomePopupQueue = { get: () => ({ enqueue: (_key, _priority, run) => run(() => {}) }) }; const Home = methods(homePath, ['checkStarter_pack', 'openStarter_pack', 'startStarter_pack', 'stopStarter_pack'], f.globals); const h = new Home(); h.node = { addChild() {} }; h.newbieGift = false; h.isHomeRuntimeAlive = () => true; h.deferHomePopupWhileTransfer = () => false; h.vibrateButtonClick = () => {}; h.schedule = () => {}; h.unschedule = () => {}; const button = { getChildByName: () => ({ getComponent: () => ({}) }) }; h.getStarterPackHomeButton = () => button; + h.refreshHomeActivityEntryLayout = () => {}; h.setStarterPackHomeButtonVisible = v => { h.visible = v; }; let opens = 0; f.cc.instantiate = () => ({ active: false, getComponent: () => ({ init() { opens++; }, refreshCountdown() {} }) }); @@ -137,6 +140,23 @@ test('first activation counts today; same-day reentry does not popup; next day d assert.equal(f.h.visible, true); f.setNow(f.getNow() + 86400000); f.h.checkStarter_pack(); assert.equal(f.opens(), 2); }); +test('starter activation keeps its request guard until success or failure', () => { + for (const response of [{ code: 0 }, { code: 1, data: { starter_pack: 0, starter_packState: 1 } }]) { + const f = homeFixture(); + let read, activate; + f.api.getStarter_pack = done => { read = done; }; + f.api.setStarter_pack = done => { activate = done; }; + f.h.checkStarter_pack(); + assert.equal(f.h.starterPackChecking, true); + read({ code: 1, data: { starter_pack: 0, starter_packState: 0 } }); + assert.equal(f.h.starterPackChecking, true); + activate(response); + assert.equal(f.h.starterPackChecking, false); + } + const f = homeFixture(); f.info.level = 0; + f.h.checkStarter_pack(); + assert.ok(!f.h.starterPackChecking); +}); test('failed prefab load does not consume daily reminder; account keys differ', () => { const f = homeFixture(); f.Home.cachedActionPrefab = null; f.h.loadHomeBundleWithDependencies = (name, priority, done) => done(new Error('offline')); diff --git a/tools/tests/mini-program-benefits-client.test.cjs b/tools/tests/mini-program-benefits-client.test.cjs new file mode 100644 index 00000000..bbc58df7 --- /dev/null +++ b/tools/tests/mini-program-benefits-client.test.cjs @@ -0,0 +1,483 @@ +const test = require('node:test'); +const assert = require('node:assert/strict'); +const fs = require('node:fs'); +const path = require('node:path'); +const vm = require('node:vm'); +const ts = require(process.env.TYPESCRIPT_PATH || 'typescript'); +const root = path.resolve(__dirname, '../..'); +const bridgeFile = 'assets/Script/module/MiniProgramBenefitsBridge.ts'; +const panelFile = 'assets/mini_program_benefits/script/MiniProgramBenefitsPanel.ts'; +const tick = () => new Promise(resolve => setImmediate(resolve)); +function deferred() { let resolve, reject; const promise = new Promise((a,b) => { resolve=a; reject=b; }); return {promise,resolve,reject}; } + +function environment() { + const destroyed = [], afterDraw = [], assetLoads = [], bundleLoads = [], releases = []; + const classes = {}; + class Component { schedule() {} unscheduleAllCallbacks() {} } + class Color { fromHEX(value) { this.hex = value; return this; } } + Color.WHITE = new Color().fromHEX('#FFFFFF'); + class Graphics { roundRect() {} fill() {} circle() {} } + class Label { } + Label.HorizontalAlign = {CENTER:1}; Label.VerticalAlign = {CENTER:1}; Label.Overflow = {SHRINK:2}; + class Sprite { } + Sprite.SizeMode = {CUSTOM:0}; + class Node { + constructor(name) { this.name = name; this.children=[]; this.components=[]; this.events={}; this.active=true; this.valid=true; this.x=this.y=0; this.scale=1; this.width=720; this.height=1280; } + set parent(node) { this._parent=node; if(node) node.children.push(this); } + get parent() { return this._parent; } + setPosition(x,y) { this.x=x; this.y=y; } + setContentSize(w,h) { if(typeof w === 'object') {this.width=w.width;this.height=w.height;} else {this.width=w;this.height=h;} } + getContentSize() { return {width:this.width,height:this.height}; } + addComponent(type) { const C = typeof type === 'string' ? classes[type] : type; const c=new C(); c.node=this; this.components.push(c); return c; } + getComponent(type) { const C=typeof type==='string'?classes[type]:type;return C?this.components.find(c=>c instanceof C):null; } + getChildByName(name) { return this.children.find(node=>node.name===name && node.valid); } + on(name, callback) { this.events[name]=callback; } + off(name, callback) { if(this.events[name]===callback)delete this.events[name]; } + destroy() { if(this.pending) return; this.pending=true; destroyed.push(this); } + } + Node.EventType = {TOUCH_END:'touchend'}; + const bundle = { getInfoWithPath:()=>false, load(name,type,callback) { assetLoads.push({name,callback}); }, releaseAll() { releases.push('assets'); } }; + const info = {uid:'player',token:'token',level:1,freezeAmount:5,hammerAmount:6,magicAmount:7}; + const storage = {}; + const cc = {Node,Component,Color,Graphics,Label,Sprite,Prefab:class {},SpriteFrame:class {},BlockInputEvents:class {}, tween:target=>({to(){return this},delay(){return this},call(){return this},start(){return this}}),Tween:{stopAllByTarget(){}}, + _decorator:{property:()=>()=>{},ccclass:value=>{if(typeof value==="function"){classes[value.name]=value;return value;}return C=>{classes[value]=C;return C;};}}, + color:(r,g,b)=>({r,g,b}),sys:{platform:'wechat',WECHAT_GAME:'wechat',localStorage:{getItem:key=>storage[key]||null,setItem:(key,value)=>{storage[key]=value;}}}, + js:{getClassByName:name=>classes[name]}, + view:{getVisibleSize:()=>({width:720,height:1280})}, + find(route,node) { if(route==='Canvas') return null; return route.split('/').reduce((n,key)=>n&&n.getChildByName(key),node); }, + isValid:(node,strict)=>!!node && node.valid && (!strict || !node.pending), + Director:{EVENT_AFTER_DRAW:'draw'},director:{once(event,cb) {afterDraw.push(cb);}}, + assetManager:{getBundle:()=>null,loadBundle(name,cb) {bundleLoads.push(cb);},removeBundle() {releases.push('bundle');}}, + fx:{GameConfig:{GM_INFO:info},StorageMessage:{setStorage:(key,value)=>{storage[key]=value;}}}, + }; + const wx = {getSystemInfoSync:()=>({platform:'android',version:'test',SDKVersion:'test'}),showToast() {},getAccountInfoSync:()=>({miniProgram:{envVersion:'release'}})}; + const testEnvironment = {allowed:false,version:'体验版',baseUrl:'https://test.example'}; + function load(file) { + const output = ts.transpileModule(fs.readFileSync(path.join(root,file),'utf8'),{compilerOptions:{target:ts.ScriptTarget.ES2017,module:ts.ModuleKind.CommonJS,experimentalDecorators:true}}).outputText; + const module={exports:{}}; + vm.runInNewContext(output,{module,exports:module.exports,require:name=>{ + if(name==='../seven_day_gift/SevenDayGiftBootstrapApi')return {default:{getTestEnvironment:()=>testEnvironment}}; + if(name==='../LoadingCatAnimation')return {default:{play:node=>{node.active=true;return true},stop:node=>{node.active=false}}}; + if(name==='./MiniProgramBenefitsReward')return {default:class {request(){throw Error('Unexpected network adapter call in UI test');}}}; + if(name.endsWith('/MiniProgramBenefitsBridge'))return {default:Bridge}; + throw new Error('Unexpected dependency: '+name); + },cc,wx,window:{wx},console,setTimeout,clearTimeout,Promise,Set},{filename:file}); + return module.exports.default; + } + const Bridge=load(bridgeFile), bridge=Bridge.instance; + bridge.onLogin({_id:'player'}); + const Panel=load(panelFile); + function instantiatePrefab(name='BenefitsWindow') { + const a=JSON.parse(fs.readFileSync(path.join(root,'assets/mini_program_benefits/prefab',name+'.prefab'),'utf8')); + const nodes={};a.forEach((v,i)=>{if(v.__type__==='cc.Node'){const n=nodes[i]=new Node(v._name);n.setContentSize(v._contentSize);n.setPosition(v._trs.array[0],v._trs.array[1]);n.scale=v._trs.array[7];n.active=v._active;n.opacity=v._opacity;}}); + for(const [i,n] of Object.entries(nodes)){const v=a[i];if(v._parent)n.parent=nodes[v._parent.__id__];for(const r of v._components){const c=a[r.__id__];if(c.__type__==='cc.Label')n.addComponent(Label).string=c._string;}} + if(name==='BenefitsWindow'){const p=nodes[1].addComponent(Panel);p.mainPrefab={prefabName:'BenefitsMain'};p.favoritePrefab={prefabName:'BenefitsFavoriteGuide'};p.desktopPrefab={prefabName:'BenefitsDesktopGuide'};p.rewardPrefab={prefabName:'BenefitsReward'};} + return nodes[1]; + } + cc.instantiate=asset=>instantiatePrefab(asset&&asset.prefabName||'BenefitsWindow'); + function draw() { + while(destroyed.length) { + const node=destroyed.shift(); node.valid=false; + node.children.forEach(child=>child.destroy()); + node.components.forEach(c=>c.onDestroy&&c.onDestroy()); + if(node.parent) node.parent.children=node.parent.children.filter(child=>child!==node); + } + afterDraw.splice(0).forEach(callback=>callback()); + } + function attach() { + const home=new Node('Canvas'); const load=new Node('Load');load.parent=home; + const top=new Node('Top');top.parent=load; + const shop=new Node('shop');shop.parent=top;shop.setPosition(-280,250); + const entry=new Node('chengxu');entry.parent=top;entry.setPosition(-280,30);entry.setContentSize(178,165); + bridge.attach(home);return home; + } + return {bridge,Panel,Node,info,storage,wx,cc,attach,draw,bundle,bundleLoads,assetLoads,releases,classes,load}; +} +const frame = {getOriginalSize:()=>({width:100,height:100}),getRect:()=>({width:100,height:100})}; + +test('runtime test eligibility preserves server claims, receipts and other accounts',()=>{ + const e=environment(),b=e.bridge; + b.getTestEnvironment=()=>({allowed:true}); + b.onLogin({_id:'player',miniProgramWelfare:{favorite:true,desktop:false}}); + b.state.favorite_entry.receiptId='keep';b.state.favorite_entry.deliveryPending=true; + e.storage['mini_program_benefits_eligibility_v1:other']='untouched'; + b.setTestEligibility('desktop_entry');assert.ok(b.state.desktop_entry.eligibleAt); + assert.equal(b.state.favorite_entry.claimedAt,1); + b.setTestEligibility();assert.equal(b.state.desktop_entry.eligibleAt,0); + assert.equal(b.state.favorite_entry.receiptId,'keep');assert.equal(b.state.favorite_entry.deliveryPending,true); + assert.equal(e.info.miniProgramWelfare.favorite,true); + assert.equal(e.storage['mini_program_benefits_eligibility_v1:other'],'untouched'); +}); + +test('runtime test changes reject production, missing login, active sessions and failed saves',()=>{ + const e=environment(),b=e.bridge; + assert.throws(()=>b.setTestEligibility('desktop_entry'),/测试服/); + b.getTestEnvironment=()=>({allowed:true});b.uid='';assert.throws(()=>b.setTestEligibility(),/登录/); + b.uid='player';b.session={};assert.throws(()=>b.setTestEligibility(),/关闭/);b.session=null; + assert.throws(()=>b.setTestEligibility('invalid'),/未知/); + e.cc.sys.localStorage.setItem=()=>{throw Error('disk full');}; + assert.throws(()=>b.setTestEligibility('desktop_entry'),/disk full/); + assert.equal(b.state.desktop_entry.eligibleAt,0); +}); + +test('claim cache reset preserves balances, eligibility, server flags and other accounts',()=>{ + const e=environment(),b=e.bridge; + e.cc.fx.StorageMessage.getStorage=key=>e.storage[key]; + b.getTestEnvironment=()=>({allowed:true}); + b.onLogin({_id:'player',miniProgramWelfare:{favorite:true,desktop:false}}); + b.state.favorite_entry={eligibleAt:123,claimedAt:456,receiptId:'old',deliveryPending:true}; + e.storage.prop={freezeAmount:9,hammerAmount:8,magicAmount:7,timestamp:12,welfareCredits:{'welfare:player:favorite':true,'welfare:player:desktop':true,'welfare:other:favorite':true}}; + b.clearTestClaimCache(); + assert.equal(e.storage.prop.freezeAmount,9);assert.equal(e.storage.prop.timestamp,12); + assert.deepEqual(Object.keys(e.storage.prop.welfareCredits),['welfare:other:favorite']); + assert.equal(b.state.favorite_entry.eligibleAt,123);assert.equal(b.state.favorite_entry.claimedAt,1); + assert.equal(b.state.favorite_entry.receiptId,undefined);assert.equal(b.state.favorite_entry.deliveryPending,undefined); + assert.equal(e.info.miniProgramWelfare.favorite,true); +}); + +test('claim cache reset rejects production, missing login, sessions and outstanding requests',()=>{ + const e=environment(),b=e.bridge; + assert.throws(()=>b.clearTestClaimCache(),/测试服/); + b.getTestEnvironment=()=>({allowed:true});b.uid='';assert.throws(()=>b.clearTestClaimCache(),/登录/); + b.uid='player';b.session={};assert.throws(()=>b.clearTestClaimCache(),/关闭/);b.session=null; + b.rewardRequests=1;assert.throws(()=>b.clearTestClaimCache(),/请求完成/);b.rewardRequests=0; + e.cc.fx.StorageMessage.getStorage=()=>({welfareCredits:{'welfare:player:favorite':true}}); + e.cc.fx.StorageMessage.setStorage=()=>{throw Error('disk full')};b.state.favorite_entry.receiptId='keep'; + assert.throws(()=>b.clearTestClaimCache(),/disk full/);assert.equal(b.state.favorite_entry.receiptId,'keep'); +}); + +test('runtime test bundle mounts only on isolated test server and ignores detached load',()=>{ + const e=environment(),b=e.bridge;b.getTestEnvironment=()=>({allowed:true}); + const home=e.attach();assert.equal(e.bundleLoads.length,0);b.mountTestPanel(home);assert.equal(e.bundleLoads.length,1);b.detach(); + e.bundleLoads[0](null,e.bundle);assert.equal(e.assetLoads.length,0);assert.equal(b.testNode,null); +}); + +test('close animation waits before closing and repeated taps do not start another close',()=>{ + const e=environment(),panel=new e.Panel();panel.node=new e.Node('panel'); + panel.motion=new e.Node('motion');panel.mask=new e.Node('mask'); + let closed=0;const completions=[];panel.host={close:()=>closed++}; + e.cc.tween=()=>({to(){return this},call(cb){completions.push(cb);return this},start(){return this}}); + panel.closeWithAnimation();panel.closeWithAnimation(); + assert.equal(closed,0);assert.equal(completions.length,1);assert.equal(panel.closing,true); + completions[0]();assert.equal(closed,1); +}); + +test('entry loader appears immediately and disappears after successful loading without touching the shared template',async()=>{ + const e=environment(),home=e.attach();e.cc.macro={MAX_ZINDEX:32767}; + const template=new e.Node('Loading');template.parent=home;template.active=false; + const instantiate=e.cc.instantiate;e.cc.instantiate=asset=>asset===template?new e.Node('Loading'):instantiate(asset); + const pending=e.bridge.open();const loading=home.getChildByName('BenefitsLoading'); + assert.ok(loading&&loading.active);assert.equal(template.active,false); + e.bundleLoads[0](null,e.bundle);await tick();e.assetLoads.forEach(item=>item.callback(null,frame));await pending; + assert.equal(loading.active,false);assert.equal(template.active,false); +}); + +test('entry loader closes on cancellation or bundle failure',async()=>{ + for(const cancel of [true,false]){ + const e=environment(),home=e.attach();e.cc.macro={MAX_ZINDEX:32767}; + const template=new e.Node('Loading');template.parent=home;e.cc.instantiate=()=>new e.Node('Loading'); + const pending=e.bridge.open(),loading=home.getChildByName('BenefitsLoading'); + if(cancel){e.bridge.close();assert.equal(loading.active,false);e.bundleLoads[0](null,e.bundle)} + else e.bundleLoads[0](new Error('download failed')); + await pending;assert.equal(loading.active,false); + } +}); + +function receiptPanel(e) { + const panel=new e.Panel();panel.node=new e.Node('panel');panel.render=()=>{}; + const state={favorite_entry:{eligibleAt:1}};let shown=0,acks=0; + const host={getState:()=>state,refresh:async()=>{},claim:async task=>{state[task]={claimedAt:1,receiptId:task,acknowledged:false}}, + showReward:async count=>{shown+=count},acknowledge:async task=>{acks++;state[task].acknowledged=true}}; + panel.showRewardAnimation=count=>host.showReward(count);panel.host=host;return {panel,host,state,shown:()=>shown,acks:()=>acks}; +} + +test('claim plays the bundle reward animation and confirms after presentation',async()=>{ + const e=environment(),p=receiptPanel(e); + await p.panel.claim('favorite_entry'); + assert.equal(p.panel.page,'list');assert.equal(p.shown(),1);assert.equal(p.acks(),1); + assert.equal(p.state.favorite_entry.acknowledged,true);assert.equal(p.panel.renderReward,undefined); +}); + +test('animation load failure leaves the receipt pending; refresh retries without a second claim',async()=>{ + const e=environment(),p=receiptPanel(e);p.host.showReward=async()=>{throw Error('animation load failed')}; + await p.panel.claim('favorite_entry');assert.equal(p.acks(),0);assert.equal(p.panel.page,'list'); + assert.match(p.panel.message,/animation load failed/); + let shown=0;p.host.showReward=async()=>{shown++};await p.panel.refresh(); + assert.equal(shown,1);assert.equal(p.acks(),1); +}); + +test('ack retry does not replay an already shown animation in the same panel session',async()=>{ + const e=environment(),p=receiptPanel(e);const ack=p.host.acknowledge; + p.host.acknowledge=async()=>{throw Error('save failed')};await p.panel.claim('favorite_entry'); + assert.equal(p.shown(),1);p.host.acknowledge=ack;await p.panel.refresh(); + assert.equal(p.shown(),1);assert.equal(p.acks(),1); +}); + +test('multiple pending receipts are shown together rather than replacing one another',async()=>{ + const e=environment(),p=receiptPanel(e);p.state.favorite_entry={claimedAt:1,receiptId:'a'}; + p.state.desktop_entry={claimedAt:1,receiptId:'b'};const calls=[];p.host.showReward=async count=>calls.push(count); + await p.panel.refresh();assert.deepEqual(calls,[2]);assert.equal(p.acks(),2); +}); + + + + + + + +test('scene-owned chengxu keeps its sprite and position across detach and reattach',()=>{ + const e=environment(),home=e.attach(),entry=e.bridge.entryNode; + e.bridge.detach();e.draw();assert.equal(entry.valid,true);assert.equal(entry.active,false); + const sprite=entry.addComponent(e.cc.Sprite);sprite.spriteFrame=frame; + entry.setPosition(123,-456);e.cc.resources={load(){throw Error('Scene artwork must not reload')}}; + e.bridge.attach(home);e.bridge.attach(home); + assert.equal(e.bridge.entryNode,entry);assert.equal(entry.x,123);assert.equal(entry.y,-456); + assert.equal(entry.children.filter(n=>n.valid&&!n.pending&&n.name==='red').length,1); + let opens=0;e.bridge.open=()=>{opens++};entry.events.touchend();assert.equal(opens,1); + e.bridge.detach();e.draw();assert.equal(entry.valid,true);assert.equal(sprite.spriteFrame,frame); + assert.equal(entry.events.touchend,undefined); +}); + +test('entry artwork holds one reference and releases it after the entry is destroyed',()=>{ + const e=environment(),loads=[]; + e.cc.resources={load:(name,type,callback)=>loads.push({name,callback})}; + e.attach();assert.equal(e.bundleLoads.length,0); + assert.equal(loads[0].name,'texture/mini-program-benefits-entry'); + const art={refs:0,addRef(){this.refs++;return this},decRef(){this.refs--;return this}}; + loads[0].callback(null,art);assert.equal(art.refs,1); + assert.equal(e.bridge.entryVisual.getComponent(e.cc.Sprite).spriteFrame,art); + e.bridge.detach();assert.equal(art.refs,1);e.draw();assert.equal(art.refs,0); +}); + +test('late entry artwork after leaving HomeScene is released without mounting a sprite',()=>{ + const e=environment(),loads=[]; + e.cc.resources={load:(name,type,callback)=>loads.push(callback)}; + e.attach();e.bridge.detach();e.draw(); + const art={refs:0,addRef(){this.refs++;return this},decRef(){this.refs--;return this}}; + loads[0](null,art);assert.equal(art.refs,0);assert.equal(e.bridge.entryFrame,null); +}); + +test('never loads UI bundle at login/attach; first-level gate and red dot follow current state',()=>{ + const e=environment(); e.info.level=0;e.attach();assert.equal(e.bundleLoads.length,0);assert.equal(e.bridge.entryNode.active,false); + e.info.level=1;e.bridge.state={favorite_entry:{eligibleAt:10}};e.bridge.changed(); + assert.equal(e.bridge.entryNode.active,true);assert.equal(e.bridge.entryRed.active,true); + e.bridge.state={favorite_entry:{claimedAt:10,acknowledged:true},desktop_entry:{claimedAt:20,acknowledged:true}};e.bridge.changed(); + assert.equal(e.bridge.entryNode.active,false); +}); + +test('closing during bundle download releases the late bundle without starting texture loads',async()=>{ + const e=environment();e.attach();const opening=e.bridge.open();e.bridge.close();e.bundleLoads[0](null,e.bundle);await opening; + assert.equal(e.assetLoads.length,0);assert.deepEqual(e.releases,['assets','bundle']);assert.equal(e.bridge.session,null); +}); + +test('cancelled prefab load releases before reopening; prefab failure permits retry',async()=>{ + const e=environment();e.attach();const first=e.bridge.open();e.bundleLoads[0](null,e.bundle);await tick(); + e.bridge.close();const second=e.bridge.open();e.assetLoads[0].callback(new Error('prefab failed'));await first;await tick(); + assert.equal(e.bundleLoads.length,2);assert.deepEqual(e.releases,['assets','bundle']); + e.bridge.close();e.bundleLoads[1](null,e.bundle);await second;assert.equal(e.bridge.session,null); +}); + +test('mounted panel destroys listeners/nodes before textures; HomeScene exit unloads bundle',async()=>{ + const e=environment();e.bridge.refresh=()=>Promise.resolve();const home=e.attach(); + const opening=e.bridge.open();e.bundleLoads[0](null,e.bundle);await tick();e.assetLoads.forEach(item=>item.callback(null,frame));await opening; + assert.equal(e.bridge.listeners.length,1);assert.equal(e.releases.length,0); + e.bridge.detach(home);assert.equal(e.releases.length,0);e.draw();await tick(); + assert.equal(e.bridge.listeners.length,0);assert.deepEqual(e.releases,['assets','bundle']);assert.equal(e.bridge.session,null); +}); + +test('entry observations are bounded and never qualify a task or store query values',()=>{ + const e=environment(); + for(let i=0;i<35;i++)e.bridge.capture({scene:1089,query:{secret:'do-not-store'}},'show'); + assert.equal(e.bridge.getDiagnostics().length,24); + assert.equal(JSON.stringify(e.bridge.getDiagnostics()).includes('do-not-store'),false); + assert.ok(Object.values(e.bridge.getState()).every(item=>!item.eligibleAt&&!item.claimedAt)); + assert.equal(Object.keys(e.storage).length,0); +}); + +test('non-WeChat builds do not create an entry, load a bundle or capture eligibility',()=>{ + const e=environment();e.cc.sys.platform='douyin';e.attach();e.bridge.capture({scene:90001},'show'); + assert.equal(e.bridge.entryNode,null);assert.equal(e.bundleLoads.length,0);assert.equal(e.bridge.getDiagnostics().length,0); +}); + +test('chengxu follows xinshou in HomeScene and preserves the scene position without overlapping other entries',()=>{ + const e=environment(); + const scene=JSON.parse(fs.readFileSync(path.join(root,'assets/Scene/HomeScene.fire'),'utf8')); + const source=scene.find(n=>n.__type__==='cc.Node'&&n._name==='Top'&&n._children.length>10); + const home=new e.Node('Canvas');home.setContentSize(1080,1920); + const load=new e.Node('Load');load.parent=home; + const top=new e.Node('Top');top.parent=load;top.setPosition(source._trs.array[0],source._trs.array[1]); + for(const ref of source._children){const data=scene[ref.__id__];const n=new e.Node(data._name);n.parent=top;n.setContentSize(data._contentSize);n.setPosition(data._trs.array[0],data._trs.array[1]);} + const configured=top.getChildByName('chengxu');const x=configured.x,y=configured.y; + e.bridge.attach(home);const entry=e.bridge.entryNode; + assert.equal(entry,configured);assert.equal(entry.x,x);assert.equal(entry.y,y); + assert.equal(top.children[top.children.indexOf(entry)-1].name,'xinshou'); + assert.equal(top.children.some(n=>n.name==='miniProgramBenefits'),false); + for(const n of top.children.filter(n=>n!==entry&&Math.abs(n.x-entry.x)<70))assert.ok(Math.abs(n.y-entry.y)>(n.height+entry.height)/2, n.name); + assert.ok(top.y+entry.y-entry.height/2>=-960); + assert.ok(entry.x-entry.width/2>=-540); +}); + +test('bundle icons own unique UUIDs and no feature bundle is statically pulled into main',()=>{ + const meta=JSON.parse(fs.readFileSync(path.join(root,'assets/mini_program_benefits.meta'),'utf8')); + assert.equal(meta.isBundle,true);assert.equal(meta.compressionType.wechatgame,'subpackage'); + const game=JSON.parse(fs.readFileSync(path.join(root,'build-templates/wechatgame/game.json'),'utf8')); + assert.deepEqual(game.subpackages.filter(item=>item.name===meta.bundleName),[{name:meta.bundleName,root:'subpackages/'+meta.bundleName}]); + for(const [name,original] of [['freeze','dongjie'],['hammer','chuizi'],['magic','mofabang']]){ + const a=JSON.parse(fs.readFileSync(path.join(root,'assets/mini_program_benefits/icons',name+'.png.meta'),'utf8')); + const b=JSON.parse(fs.readFileSync(path.join(root,'assets/jungle_treasure/img',original+'.png.meta'),'utf8')); + assert.notEqual(a.uuid,b.uuid);assert.notEqual(Object.values(a.subMetas)[0].uuid,Object.values(b.subMetas)[0].uuid); + } + const source=fs.readFileSync(path.join(root,bridgeFile),'utf8'); + assert.equal(/^import .*mini_program_benefits/m.test(source),false); + assert.equal(/^import .*jungle_treasure|^import .*shop\//m.test(fs.readFileSync(path.join(root,panelFile),'utf8')),false); +}); + + +test('qualification uses the same latest entry as the panel instead of stale launch options',()=>{ + const e=environment();e.wx.getEnterOptionsSync=()=>({scene:1104}); + e.bridge.capture({scene:1011},'cold');assert.ok(e.bridge.getState().favorite_entry.eligibleAt); + assert.equal(e.bridge.getDiagnostics()[0].scene,1104); + const other=environment();other.wx.getEnterOptionsSync=()=>({scene:1089}); + other.bridge.capture({scene:1104},'show');assert.ok(Object.values(other.bridge.getState()).every(item=>!item.eligibleAt)); + const fallback=environment();fallback.wx.getEnterOptionsSync=()=>{throw Error('unsupported');}; + fallback.bridge.capture({scene:1104},'show');assert.ok(fallback.bridge.getState().favorite_entry.eligibleAt); +}); + +test('release, unknown version and missing account API never load phone test bundle',()=>{ + for(const env of ['release','unknown',undefined]){ + const e=environment();e.wx.getAccountInfoSync=()=>({miniProgram:{envVersion:env}});e.attach();assert.equal(e.bundleLoads.length,0); + } + const e=environment();e.wx.getAccountInfoSync=()=>{throw Error('unavailable');};e.attach();assert.equal(e.bundleLoads.length,0); +}); + + + + + + + +test('receipt stays pending until the player dismisses the independent reward overlay',async()=>{ + const e=environment(),p=receiptPanel(e),wait=deferred();p.panel.showRewardAnimation=()=>wait.promise; + const claim=p.panel.claim('favorite_entry');await tick();assert.equal(p.acks(),0);assert.equal(p.panel.busy,true); + wait.resolve();await claim;assert.equal(p.acks(),1);assert.equal(p.panel.busy,false); +}); + +test('cancelled independent reward presentation leaves receipt available for retry',async()=>{ + const e=environment(),p=receiptPanel(e);p.panel.showRewardAnimation=async()=>{throw Error('presentation cancelled');}; + await p.panel.claim('favorite_entry');assert.equal(p.acks(),0);assert.equal(p.state.favorite_entry.acknowledged,false); +}); + + +test('benefits entry depends on its own state even while other activities are pending',()=>{ + const e=environment();const home=e.attach(); + home.getComponent=()=>({isBenefitsEntryLayoutReady:()=>false}); + e.bridge.state={favorite_entry:{eligibleAt:1}};e.bridge.refreshEntry(); + assert.equal(e.bridge.entryNode.active,true);assert.equal(e.bridge.entryRed.active,true); + e.bridge.state={favorite_entry:{claimedAt:1,acknowledged:true},desktop_entry:{claimedAt:1,acknowledged:true}}; + e.bridge.refreshEntry();assert.equal(e.bridge.entryNode.active,false); + e.bridge.state.desktop_entry.acknowledged=false; + e.bridge.refreshEntry();assert.equal(e.bridge.entryNode.active,true); +}); + +test('real home uses a separate receipt store and never mounts the reset button',()=>{ + const e=environment(); + e.wx.getAccountInfoSync=()=>({miniProgram:{envVersion:'trial'}}); + e.bridge.onLogin({_id:'player'}); + assert.equal(e.bridge.getRewardStorageKey(),'mini_program_benefits_rewards_v1:player'); + e.attach();assert.equal(e.bundleLoads.length,0); +}); + + +test('all five editable prefabs reference only bundle assets and valid local node ids',()=>{ + const dir=path.join(root,'assets/mini_program_benefits'),ids=new Set(['eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432']); + function metas(d){for(const item of fs.readdirSync(d,{withFileTypes:true})){const p=path.join(d,item.name);if(item.isDirectory())metas(p);else if(p.endsWith('.meta')){const m=JSON.parse(fs.readFileSync(p));ids.add(m.uuid);for(const sub of Object.values(m.subMetas||{}))ids.add(sub.uuid);}}}metas(dir); + for(const name of ['BenefitsWindow','BenefitsMain','BenefitsFavoriteGuide','BenefitsDesktopGuide','BenefitsReward']){ + const a=JSON.parse(fs.readFileSync(path.join(dir,'prefab',name+'.prefab'))); + function visit(v){if(!v||typeof v!=='object')return;if(v.__id__!==undefined)assert.ok(a[v.__id__],name+' node reference');if(v.__uuid__)assert.ok(ids.has(v.__uuid__),name+' foreign asset '+v.__uuid__);Object.values(v).forEach(visit);}visit(a); + assert.equal(a[0].__type__,'cc.Prefab');assert.ok(a.some(n=>n.__type__==='cc.Sprite')); + } + const panel=fs.readFileSync(path.join(root,panelFile),'utf8');assert.equal(panel.includes('new cc.Node'),false);assert.equal(panel.includes('cc.Graphics'),false); + const bridge=fs.readFileSync(path.join(root,bridgeFile),'utf8');assert.ok(bridge.includes('bundle.load("prefab/BenefitsWindow", cc.Prefab')); +}); + +test('prefab task buttons update existing nodes without rebuilding editable layout',()=>{ + const e=environment();const node=e.cc.instantiate({prefabName:'BenefitsWindow'}),p=node.getComponent('MiniProgramBenefitsPanel');p.refresh=async()=>{};p.playOpenAnimation=()=>{}; + let state={};const host={getUid:()=>"player",bindRewardApi(){},getRewardStorageKey:()=> 'test',getState:()=>state,subscribe:()=>()=>{},close(){}};p.init(host); + const row=p.views.list.getChildByName('Task0'),view=row.getChildByName('View');assert.equal(view.active,true); + state={favorite_entry:{eligibleAt:1}};p.render();assert.equal(view.active,false);assert.equal(row.getChildByName('Claim').active,true); + state.favorite_entry.claimedAt=2;p.render();assert.equal(row.getChildByName('Claimed').active,true);assert.equal(p.views.list.getChildByName('Task0'),row); +}); + +test('production login ignores old local claims and hides completed welfare after cache clear',()=>{ + const e=environment(); + e.storage[e.bridge.getRewardStorageKey()]=JSON.stringify({favorite_entry:{claimedAt:123},desktop_entry:{claimedAt:123}}); + e.bridge.onLogin({_id:'player',miniProgramWelfare:{favorite:false,desktop:false}}); + assert.equal(e.bridge.getState().favorite_entry.claimedAt,0); + e.bridge.capture({scene:1023},'show');assert.ok(e.bridge.getState().desktop_entry.eligibleAt); + Object.keys(e.storage).forEach(key=>delete e.storage[key]); + e.bridge.onLogin({_id:'player',miniProgramWelfare:{favorite:true,desktop:true}}); + const home=e.attach();e.bridge.refreshEntry(); + assert.equal(e.cc.find('Load/Top/chengxu',home).active,false); + assert.equal(e.bridge.getState().favorite_entry.acknowledged,true); +}); + +test('production eligibility survives a new session and remains isolated by account',()=>{ + const first=environment();first.bridge.uid="";first.bridge.pendingEntries={}; + first.bridge.capture({scene:1104},'cold'); + first.bridge.onLogin({_id:'alice',miniProgramWelfare:{favorite:false,desktop:false}}); + first.bridge.capture({scene:1023},'show'); + const next=environment();Object.assign(next.storage,first.storage); + next.bridge.capture({scene:1001},'cold'); + next.bridge.onLogin({_id:'alice',miniProgramWelfare:{favorite:false,desktop:false}}); + assert.ok(next.bridge.getState().favorite_entry.eligibleAt); + assert.ok(next.bridge.getState().desktop_entry.eligibleAt); + assert.equal(next.bridge.getState().favorite_entry.claimedAt,0); + next.bridge.onLogin({_id:'bob',miniProgramWelfare:{favorite:false,desktop:false}}); + assert.equal(next.bridge.getState().favorite_entry.eligibleAt,0); + next.bridge.onLogin({_id:'alice',miniProgramWelfare:{favorite:true,desktop:true}}); + assert.ok(next.bridge.getState().favorite_entry.claimedAt); + assert.ok(next.bridge.getState().desktop_entry.claimedAt); + const home=next.attach();assert.equal(next.cc.find('Load/Top/chengxu',home).active,false); +}); + +test('production eligibility ignores malformed cache and reports failed persistence',()=>{ + const e=environment(); + e.storage['mini_program_benefits_eligibility_v1:alice']='{"favorite_entry":"yes","desktop_entry":-1}'; + e.bridge.onLogin({_id:'alice',miniProgramWelfare:{favorite:false,desktop:false}}); + assert.equal(e.bridge.getState().favorite_entry.eligibleAt,0); + e.cc.sys.localStorage.setItem=()=>{throw Error('full')}; + e.bridge.capture({scene:1104},'show'); + assert.equal(e.bridge.getState().favorite_entry.eligibleAt,0); +}); + + + +test('activity close keeps the shared test bundle alive until leaving home',async()=>{ + const e=environment(),b=e.bridge;b.getTestEnvironment=()=>({allowed:true}); + e.classes.BenefitsRuntimeTest=class {initialize(host){this.host=host;}}; + e.cc.instantiate=()=>new e.Node('BenefitsRuntimeTest'); + const home=e.attach();assert.equal(e.bundleLoads.length,0);b.mountTestPanel(home);e.bundleLoads[0](null,e.bundle); + assert.equal(e.assetLoads[0].name,'test/BenefitsRuntimeTest');e.assetLoads[0].callback(null,{}); + assert.ok(b.testNode);assert.equal(b.bundleUsers,1); + const opening=b.open();b.close();e.bundleLoads[1](null,e.bundle);await opening; + assert.equal(b.bundleUsers,1);assert.deepEqual(e.releases,[]); + b.detach();e.draw();assert.equal(b.bundleUsers,0);assert.deepEqual(e.releases,['assets','bundle']); +}); + + +test('both real entry qualifications captured before login survive and preserve server claims',()=>{ + const e=environment(),b=e.bridge;b.uid='';e.info.level=0; + b.capture({scene:1104},'cold');b.capture({scene:1023},'show');assert.equal(Object.keys(e.storage).length,0); + b.onLogin({_id:'player',miniProgramWelfare:{favorite:true,desktop:false}});e.attach(); + assert.ok(b.state.favorite_entry.eligibleAt);assert.ok(b.state.desktop_entry.eligibleAt); + assert.equal(b.state.favorite_entry.claimedAt,1);assert.equal(b.entryNode.active,false); + e.info.level=1;b.refreshEntry();assert.equal(b.entryNode.active,true);assert.equal(b.entryRed.active,true); + b.state.favorite_entry.receiptId='keep';b.capture({scene:1104},'show');assert.equal(b.state.favorite_entry.receiptId,'keep'); +}); + +test('account switch rejects delayed bridge responses without replacing new account state',async()=>{ + const e=environment(),b=e.bridge,pending=deferred();b.session={api:{request:()=>pending.promise}}; + const request=b.refresh();b.onLogin({_id:'other',miniProgramWelfare:{favorite:true,desktop:true}}); + pending.resolve({state:{favorite_entry:{claimedAt:0}}});await assert.rejects(request,/账号/); + assert.equal(b.getUid(),'other');assert.equal(b.state.favorite_entry.claimedAt,1);assert.equal(b.state.desktop_entry.claimedAt,1); +}); diff --git a/tools/tests/mini-program-benefits-reward.test.cjs b/tools/tests/mini-program-benefits-reward.test.cjs new file mode 100644 index 00000000..4a38d3ed --- /dev/null +++ b/tools/tests/mini-program-benefits-reward.test.cjs @@ -0,0 +1,41 @@ +const test = require('node:test'); +const assert = require('node:assert/strict'); +const fs = require('node:fs'); +const vm = require('node:vm'); +const ts = require(process.env.TYPESCRIPT_PATH || 'typescript'); +function fixture() { + const info = {uid:'u1',miniProgramWelfare:{favorite:false,desktop:false},freezeAmount:5,hammerAmount:6,magicAmount:7}; + const state = {favorite_entry:{eligibleAt:1},desktop_entry:{eligibleAt:1}}; + const storage = {prop:{hourglassAmount:4}}, posts=[]; + let handler=(url,data,cb)=>cb(url==='userProp'?{code:1,data:{freeze:6,hammer:7,magic_wand:8}}:{code:1}); + const cc={fx:{GameConfig:{GM_INFO:info},StorageMessage:{getStorage:k=>storage[k],setStorage:(k,v)=>storage[k]=v}}}; + const Utils={POST:(url,data,cb)=>{posts.push({url,data});handler(url,data,cb);}}; + const module={exports:{}}; + vm.runInNewContext(ts.transpileModule(fs.readFileSync('assets/mini_program_benefits/script/MiniProgramBenefitsReward.ts','utf8'),{compilerOptions:{target:ts.ScriptTarget.ES2017,module:ts.ModuleKind.CommonJS}}).outputText,{module,exports:module.exports,require:()=>({default:Utils}),cc,setTimeout,clearTimeout}); + const Reward=module.exports.default; + return {info,state,storage,posts,api:new Reward('u1','u1',()=>state),Reward,setHandler:h=>handler=h}; +} +test('deduplicates claims, maps task names, uploads fixed client rewards once',async()=>{ + const f=fixture(); await Promise.all([f.api.request('claim',{task:'favorite_entry'},1),new f.Reward('u1','u1',()=>f.state).request('claim',{task:'favorite_entry'},1)]); + assert.equal(f.posts.length,2); assert.equal(f.posts[0].url,'miniProgramWelfare');assert.equal(f.posts[0].data.type,'favorite');assert.equal(f.posts[1].data.action,'save');assert.deepEqual(JSON.parse(f.posts[1].data.propData),{freeze:6,hammer:7,magic_wand:8}); + assert.equal(f.info.freezeAmount,6);assert.equal(f.storage.prop.hourglassAmount,4);assert.equal(f.info.miniProgramWelfare.favorite,true); + await f.api.request('ack',{task:'favorite_entry',receiptId:f.state.favorite_entry.receiptId});assert.equal(f.state.favorite_entry.acknowledged,true); +}); +test('server login claims remain claimed without local storage',async()=>{ + const f=fixture();f.state.favorite_entry={claimedAt:1,acknowledged:true};await f.api.request('claim',{task:'favorite_entry'},1);assert.equal(f.posts.length,0); +}); +test('failed inventory upload retries without requesting or adding another award',async()=>{ + const f=fixture();let reads=0;f.setHandler((url,data,cb)=>cb(url==='userProp'?(++reads===1?{code:0,msg:'offline'}:{code:1,data:{freeze:6,hammer:7,magic_wand:8}}):{code:1})); + await assert.rejects(f.api.request('claim',{task:'desktop_entry'},1),/offline/);assert.ok(f.state.desktop_entry.claimedAt);assert.equal(f.info.freezeAmount,6); + await new f.Reward('u1','u1',()=>f.state).request('read');assert.equal(f.posts.filter(p=>p.url==='miniProgramWelfare').length,1);assert.equal(f.info.freezeAmount,6); +}); +test('failed claim does not mutate inventory or mark claimed',async()=>{ + const f=fixture();f.setHandler((u,d,cb)=>cb({code:0,msg:'已领取'}));await assert.rejects(f.api.request('claim',{task:'favorite_entry'},1),/已领取/);assert.equal(f.info.freezeAmount,5);assert.ok(!f.state.favorite_entry.claimedAt); +}); +test('account switch ignores delayed response',async()=>{ + const f=fixture();f.setHandler((u,d,cb)=>{f.info.uid='u2';cb({code:1})});await assert.rejects(f.api.request('claim',{task:'favorite_entry'},1),/账号/);assert.ok(!f.state.favorite_entry.claimedAt);assert.equal(f.info.freezeAmount,5); +}); +test('missing contract and invalid eligibility cannot claim',async()=>{ + const f=fixture();await assert.rejects(f.api.request('claim',{task:'favorite_entry'},0));delete f.info.miniProgramWelfare;await assert.rejects(f.api.request('claim',{task:'favorite_entry'},1),/重新登录/);await assert.rejects(f.api.request('reset'));assert.equal(f.posts.length,0); +}); +