diff --git a/assets/Script/module/Config/GameConfig.ts b/assets/Script/module/Config/GameConfig.ts index c5024cb..9bf62e3 100644 --- a/assets/Script/module/Config/GameConfig.ts +++ b/assets/Script/module/Config/GameConfig.ts @@ -770,7 +770,7 @@ export class GameConfig { vibrateOpen: true, //震动 coinnum: 0, //每局的金币数 paid_user: false, //是否是付费用户 - version: "1.0.74", //版本号 + version: "1.0.75", //版本号 shushu_DistinctId: "", //数数访客ID shushu_AccountId: "", //数数账号ID uid: "", //用户和后端唯一id diff --git a/assets/action_bundle/prefab/newbieGift.prefab b/assets/action_bundle/prefab/newbieGift.prefab index f553de1..d66b965 100644 --- a/assets/action_bundle/prefab/newbieGift.prefab +++ b/assets/action_bundle/prefab/newbieGift.prefab @@ -45,38 +45,38 @@ "__id__": 35 }, { - "__id__": 51 + "__id__": 87 }, { - "__id__": 65 + "__id__": 101 }, { - "__id__": 79 + "__id__": 115 }, { - "__id__": 93 + "__id__": 129 }, { - "__id__": 110 + "__id__": 146 }, { - "__id__": 133 + "__id__": 169 }, { - "__id__": 170 + "__id__": 206 } ], "_active": true, "_components": [ { - "__id__": 194 + "__id__": 230 }, { - "__id__": 195 + "__id__": 231 } ], "_prefab": { - "__id__": 196 + "__id__": 232 }, "_opacity": 255, "_color": { @@ -1312,16 +1312,28 @@ "__id__": 41 }, { - "__id__": 44 + "__id__": 47 }, { - "__id__": 47 + "__id__": 53 + }, + { + "__id__": 62 + }, + { + "__id__": 71 + }, + { + "__id__": 80 + }, + { + "__id__": 83 } ], "_active": true, "_components": [], "_prefab": { - "__id__": 50 + "__id__": 86 }, "_opacity": 255, "_color": { @@ -1566,20 +1578,24 @@ }, { "__type__": "cc.Node", - "_name": "sanyuan", + "_name": "3", "_objFlags": 0, "_parent": { "__id__": 35 }, - "_children": [], - "_active": true, - "_components": [ + "_children": [ { "__id__": 42 } ], + "_active": true, + "_components": [ + { + "__id__": 45 + } + ], "_prefab": { - "__id__": 43 + "__id__": 46 }, "_opacity": 255, "_color": { @@ -1591,8 +1607,8 @@ }, "_contentSize": { "__type__": "cc.Size", - "width": 125, - "height": 61 + "width": 45, + "height": 56 }, "_anchorPoint": { "__type__": "cc.Vec2", @@ -1603,8 +1619,72 @@ "__type__": "TypedArray", "ctor": "Float64Array", "array": [ + -35.2, + -476.422, 0, - -451.889, + 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": "big_yuan", + "_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": 60, + "height": 58 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 65.028, + 0.691, 0, 0, 0, @@ -1628,6 +1708,51 @@ "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__": "e9eb217b-d96c-43ed-b3bc-7cd36e28c7ff" + }, + "_type": 0, + "_sizeMode": 1, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": { + "__uuid__": "48e7a52f-b3c2-4b03-9786-d8d6615850b8" + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "5cMstUK79JwojPdI2JlgQk", + "sync": false + }, { "__type__": "cc.Sprite", "_name": "", @@ -1644,10 +1769,10 @@ "_srcBlendFactor": 770, "_dstBlendFactor": 771, "_spriteFrame": { - "__uuid__": "c6ac892b-3180-4f5f-a4be-863cde6b7b4a" + "__uuid__": "d2e99c83-f25e-48e8-a130-84730aeb004f" }, "_type": 0, - "_sizeMode": 0, + "_sizeMode": 1, "_fillType": 0, "_fillCenter": { "__type__": "cc.Vec2", @@ -1657,7 +1782,9 @@ "_fillStart": 0, "_fillRange": 0, "_isTrimmedMode": true, - "_atlas": null, + "_atlas": { + "__uuid__": "48e7a52f-b3c2-4b03-9786-d8d6615850b8" + }, "_id": "" }, { @@ -1671,6 +1798,1230 @@ "fileId": "6aQ11SIQVAe4IySzkesH9A", "sync": false }, + { + "__type__": "cc.Node", + "_name": "6", + "_objFlags": 0, + "_parent": { + "__id__": 35 + }, + "_children": [ + { + "__id__": 48 + } + ], + "_active": false, + "_components": [ + { + "__id__": 51 + } + ], + "_prefab": { + "__id__": 52 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 49, + "height": 56 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -35.2, + -476.422, + 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": "big_yuan", + "_objFlags": 0, + "_parent": { + "__id__": 47 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 49 + } + ], + "_prefab": { + "__id__": 50 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 60, + "height": 58 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 65.028, + 0.691, + 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__": 48 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "e9eb217b-d96c-43ed-b3bc-7cd36e28c7ff" + }, + "_type": 0, + "_sizeMode": 1, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": { + "__uuid__": "48e7a52f-b3c2-4b03-9786-d8d6615850b8" + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "06aExGGUhIUrdxg+7ZLmPq", + "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__": "a7d55602-45ca-4eee-9493-3b531ed36e6e" + }, + "_type": 0, + "_sizeMode": 1, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": { + "__uuid__": "48e7a52f-b3c2-4b03-9786-d8d6615850b8" + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "dfpvKL3KZDX5f+VBqKLz2/", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "12", + "_objFlags": 0, + "_parent": { + "__id__": 35 + }, + "_children": [ + { + "__id__": 54 + }, + { + "__id__": 57 + } + ], + "_active": false, + "_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": 47, + "height": 56 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -12.525, + -476.422, + 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": "big_yuan", + "_objFlags": 0, + "_parent": { + "__id__": 53 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 55 + } + ], + "_prefab": { + "__id__": 56 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 60, + "height": 58 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 65.028, + 0.691, + 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__": 54 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "e9eb217b-d96c-43ed-b3bc-7cd36e28c7ff" + }, + "_type": 0, + "_sizeMode": 1, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": { + "__uuid__": "48e7a52f-b3c2-4b03-9786-d8d6615850b8" + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "67JVnHiWROoKETJDHy5oVL", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "big_1", + "_objFlags": 0, + "_parent": { + "__id__": 53 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 58 + } + ], + "_prefab": { + "__id__": 59 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 35, + "height": 56 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -49.129, + 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__": 57 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "67741a3c-95bd-4c4d-9ce7-1daa79826896" + }, + "_type": 0, + "_sizeMode": 1, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": { + "__uuid__": "48e7a52f-b3c2-4b03-9786-d8d6615850b8" + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "32PEG40qJEwqfVC57stRPg", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 53 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "88e1050a-c4df-4edd-9170-a57746b2082f" + }, + "_type": 0, + "_sizeMode": 1, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": { + "__uuid__": "48e7a52f-b3c2-4b03-9786-d8d6615850b8" + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "64as9uyp5KvLcfuWUsosT8", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "18", + "_objFlags": 0, + "_parent": { + "__id__": 35 + }, + "_children": [ + { + "__id__": 63 + }, + { + "__id__": 66 + } + ], + "_active": false, + "_components": [ + { + "__id__": 69 + } + ], + "_prefab": { + "__id__": 70 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 49, + "height": 58 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -12.525, + -476.422, + 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": "big_yuan", + "_objFlags": 0, + "_parent": { + "__id__": 62 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 64 + } + ], + "_prefab": { + "__id__": 65 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 60, + "height": 58 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 65.028, + 0.691, + 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__": 63 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "e9eb217b-d96c-43ed-b3bc-7cd36e28c7ff" + }, + "_type": 0, + "_sizeMode": 1, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": { + "__uuid__": "48e7a52f-b3c2-4b03-9786-d8d6615850b8" + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "64AUZHr/xDe4Jz2wqUolaJ", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "big_1", + "_objFlags": 0, + "_parent": { + "__id__": 62 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 67 + } + ], + "_prefab": { + "__id__": 68 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 35, + "height": 56 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -49.129, + 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__": 66 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "67741a3c-95bd-4c4d-9ce7-1daa79826896" + }, + "_type": 0, + "_sizeMode": 1, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": { + "__uuid__": "48e7a52f-b3c2-4b03-9786-d8d6615850b8" + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "beeY3690ZHRp92WDfF5l1e", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 62 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "6b589cb8-1629-43b9-9487-29c2fd7ea3f4" + }, + "_type": 0, + "_sizeMode": 1, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": { + "__uuid__": "48e7a52f-b3c2-4b03-9786-d8d6615850b8" + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "a1bKI5SXlPUpA/BdqxTZIu", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "30", + "_objFlags": 0, + "_parent": { + "__id__": 35 + }, + "_children": [ + { + "__id__": 72 + }, + { + "__id__": 75 + } + ], + "_active": false, + "_components": [ + { + "__id__": 78 + } + ], + "_prefab": { + "__id__": 79 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 53, + "height": 56 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -12.525, + -476.422, + 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": "big_yuan", + "_objFlags": 0, + "_parent": { + "__id__": 71 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 73 + } + ], + "_prefab": { + "__id__": 74 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 60, + "height": 58 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 65.028, + 0.691, + 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__": 72 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "e9eb217b-d96c-43ed-b3bc-7cd36e28c7ff" + }, + "_type": 0, + "_sizeMode": 1, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": { + "__uuid__": "48e7a52f-b3c2-4b03-9786-d8d6615850b8" + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "1affNe85RN6I3OkhbyJ9K/", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "big_1", + "_objFlags": 0, + "_parent": { + "__id__": 71 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 76 + } + ], + "_prefab": { + "__id__": 77 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 45, + "height": 56 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -49.129, + 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__": 75 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "d2e99c83-f25e-48e8-a130-84730aeb004f" + }, + "_type": 0, + "_sizeMode": 1, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": { + "__uuid__": "48e7a52f-b3c2-4b03-9786-d8d6615850b8" + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "c2+uzxuWpBKreR5jVpsWgB", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 71 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "5dc3a7f1-962b-464c-9655-b9a902f1b3b0" + }, + "_type": 0, + "_sizeMode": 1, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": { + "__uuid__": "48e7a52f-b3c2-4b03-9786-d8d6615850b8" + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "feeTj10F5Ij7RN6gkEQlwz", + "sync": false + }, { "__type__": "cc.Node", "_name": "shouhuith", @@ -1682,11 +3033,11 @@ "_active": true, "_components": [ { - "__id__": 45 + "__id__": 81 } ], "_prefab": { - "__id__": 46 + "__id__": 82 }, "_opacity": 255, "_color": { @@ -1740,7 +3091,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 44 + "__id__": 80 }, "_enabled": true, "_materials": [ @@ -1786,14 +3137,14 @@ "__id__": 35 }, "_children": [], - "_active": true, + "_active": false, "_components": [ { - "__id__": 48 + "__id__": 84 } ], "_prefab": { - "__id__": 49 + "__id__": 85 }, "_opacity": 255, "_color": { @@ -1847,7 +3198,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 47 + "__id__": 83 }, "_enabled": true, "_materials": [ @@ -1905,22 +3256,22 @@ }, "_children": [ { - "__id__": 52 + "__id__": 88 }, { - "__id__": 55 + "__id__": 91 }, { - "__id__": 58 + "__id__": 94 }, { - "__id__": 61 + "__id__": 97 } ], "_active": true, "_components": [], "_prefab": { - "__id__": 64 + "__id__": 100 }, "_opacity": 255, "_color": { @@ -1974,17 +3325,17 @@ "_name": "bg", "_objFlags": 0, "_parent": { - "__id__": 51 + "__id__": 87 }, "_children": [], "_active": true, "_components": [ { - "__id__": 53 + "__id__": 89 } ], "_prefab": { - "__id__": 54 + "__id__": 90 }, "_opacity": 255, "_color": { @@ -2038,7 +3389,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 52 + "__id__": 88 }, "_enabled": true, "_materials": [ @@ -2081,17 +3432,17 @@ "_name": "chui", "_objFlags": 0, "_parent": { - "__id__": 51 + "__id__": 87 }, "_children": [], "_active": true, "_components": [ { - "__id__": 56 + "__id__": 92 } ], "_prefab": { - "__id__": 57 + "__id__": 93 }, "_opacity": 255, "_color": { @@ -2145,7 +3496,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 55 + "__id__": 91 }, "_enabled": true, "_materials": [ @@ -2188,17 +3539,17 @@ "_name": "chuiziX", "_objFlags": 0, "_parent": { - "__id__": 51 + "__id__": 87 }, "_children": [], "_active": true, "_components": [ { - "__id__": 59 + "__id__": 95 } ], "_prefab": { - "__id__": 60 + "__id__": 96 }, "_opacity": 255, "_color": { @@ -2252,7 +3603,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 58 + "__id__": 94 }, "_enabled": true, "_materials": [ @@ -2297,17 +3648,17 @@ "_name": "chuiziCount", "_objFlags": 0, "_parent": { - "__id__": 51 + "__id__": 87 }, "_children": [], "_active": true, "_components": [ { - "__id__": 62 + "__id__": 98 } ], "_prefab": { - "__id__": 63 + "__id__": 99 }, "_opacity": 255, "_color": { @@ -2361,7 +3712,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 61 + "__id__": 97 }, "_enabled": true, "_materials": [ @@ -2421,22 +3772,22 @@ }, "_children": [ { - "__id__": 66 + "__id__": 102 }, { - "__id__": 69 + "__id__": 105 }, { - "__id__": 72 + "__id__": 108 }, { - "__id__": 75 + "__id__": 111 } ], "_active": true, "_components": [], "_prefab": { - "__id__": 78 + "__id__": 114 }, "_opacity": 255, "_color": { @@ -2490,17 +3841,17 @@ "_name": "bg", "_objFlags": 0, "_parent": { - "__id__": 65 + "__id__": 101 }, "_children": [], "_active": true, "_components": [ { - "__id__": 67 + "__id__": 103 } ], "_prefab": { - "__id__": 68 + "__id__": 104 }, "_opacity": 255, "_color": { @@ -2554,7 +3905,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 66 + "__id__": 102 }, "_enabled": true, "_materials": [ @@ -2597,17 +3948,17 @@ "_name": "ice", "_objFlags": 0, "_parent": { - "__id__": 65 + "__id__": 101 }, "_children": [], "_active": true, "_components": [ { - "__id__": 70 + "__id__": 106 } ], "_prefab": { - "__id__": 71 + "__id__": 107 }, "_opacity": 255, "_color": { @@ -2661,7 +4012,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 69 + "__id__": 105 }, "_enabled": true, "_materials": [ @@ -2704,17 +4055,17 @@ "_name": "chuiziX", "_objFlags": 0, "_parent": { - "__id__": 65 + "__id__": 101 }, "_children": [], "_active": true, "_components": [ { - "__id__": 73 + "__id__": 109 } ], "_prefab": { - "__id__": 74 + "__id__": 110 }, "_opacity": 255, "_color": { @@ -2768,7 +4119,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 72 + "__id__": 108 }, "_enabled": true, "_materials": [ @@ -2813,17 +4164,17 @@ "_name": "chuiziCount", "_objFlags": 0, "_parent": { - "__id__": 65 + "__id__": 101 }, "_children": [], "_active": true, "_components": [ { - "__id__": 76 + "__id__": 112 } ], "_prefab": { - "__id__": 77 + "__id__": 113 }, "_opacity": 255, "_color": { @@ -2877,7 +4228,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 75 + "__id__": 111 }, "_enabled": true, "_materials": [ @@ -2937,22 +4288,22 @@ }, "_children": [ { - "__id__": 80 + "__id__": 116 }, { - "__id__": 83 + "__id__": 119 }, { - "__id__": 86 + "__id__": 122 }, { - "__id__": 89 + "__id__": 125 } ], "_active": true, "_components": [], "_prefab": { - "__id__": 92 + "__id__": 128 }, "_opacity": 255, "_color": { @@ -3006,17 +4357,17 @@ "_name": "bg", "_objFlags": 0, "_parent": { - "__id__": 79 + "__id__": 115 }, "_children": [], "_active": true, "_components": [ { - "__id__": 81 + "__id__": 117 } ], "_prefab": { - "__id__": 82 + "__id__": 118 }, "_opacity": 255, "_color": { @@ -3070,7 +4421,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 80 + "__id__": 116 }, "_enabled": true, "_materials": [ @@ -3113,17 +4464,17 @@ "_name": "bang", "_objFlags": 0, "_parent": { - "__id__": 79 + "__id__": 115 }, "_children": [], "_active": true, "_components": [ { - "__id__": 84 + "__id__": 120 } ], "_prefab": { - "__id__": 85 + "__id__": 121 }, "_opacity": 255, "_color": { @@ -3177,7 +4528,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 83 + "__id__": 119 }, "_enabled": true, "_materials": [ @@ -3220,17 +4571,17 @@ "_name": "chuiziX", "_objFlags": 0, "_parent": { - "__id__": 79 + "__id__": 115 }, "_children": [], "_active": true, "_components": [ { - "__id__": 87 + "__id__": 123 } ], "_prefab": { - "__id__": 88 + "__id__": 124 }, "_opacity": 255, "_color": { @@ -3284,7 +4635,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 86 + "__id__": 122 }, "_enabled": true, "_materials": [ @@ -3329,17 +4680,17 @@ "_name": "chuiziCount", "_objFlags": 0, "_parent": { - "__id__": 79 + "__id__": 115 }, "_children": [], "_active": true, "_components": [ { - "__id__": 90 + "__id__": 126 } ], "_prefab": { - "__id__": 91 + "__id__": 127 }, "_opacity": 255, "_color": { @@ -3393,7 +4744,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 89 + "__id__": 125 }, "_enabled": true, "_materials": [ @@ -3453,25 +4804,25 @@ }, "_children": [ { - "__id__": 94 + "__id__": 130 }, { - "__id__": 97 + "__id__": 133 }, { - "__id__": 100 + "__id__": 136 }, { - "__id__": 103 + "__id__": 139 }, { - "__id__": 106 + "__id__": 142 } ], "_active": true, "_components": [], "_prefab": { - "__id__": 109 + "__id__": 145 }, "_opacity": 255, "_color": { @@ -3525,17 +4876,17 @@ "_name": "bg", "_objFlags": 0, "_parent": { - "__id__": 93 + "__id__": 129 }, "_children": [], "_active": true, "_components": [ { - "__id__": 95 + "__id__": 131 } ], "_prefab": { - "__id__": 96 + "__id__": 132 }, "_opacity": 255, "_color": { @@ -3589,7 +4940,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 94 + "__id__": 130 }, "_enabled": true, "_materials": [ @@ -3632,17 +4983,17 @@ "_name": "tili", "_objFlags": 0, "_parent": { - "__id__": 93 + "__id__": 129 }, "_children": [], "_active": true, "_components": [ { - "__id__": 98 + "__id__": 134 } ], "_prefab": { - "__id__": 99 + "__id__": 135 }, "_opacity": 255, "_color": { @@ -3654,8 +5005,8 @@ }, "_contentSize": { "__type__": "cc.Size", - "width": 292, - "height": 247 + "width": 290, + "height": 246 }, "_anchorPoint": { "__type__": "cc.Vec2", @@ -3696,7 +5047,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 97 + "__id__": 133 }, "_enabled": true, "_materials": [ @@ -3739,17 +5090,17 @@ "_name": "tiliCount1", "_objFlags": 0, "_parent": { - "__id__": 93 + "__id__": 129 }, "_children": [], "_active": true, "_components": [ { - "__id__": 101 + "__id__": 137 } ], "_prefab": { - "__id__": 102 + "__id__": 138 }, "_opacity": 255, "_color": { @@ -3803,7 +5154,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 100 + "__id__": 136 }, "_enabled": true, "_materials": [ @@ -3848,17 +5199,17 @@ "_name": "tiliCount2", "_objFlags": 0, "_parent": { - "__id__": 93 + "__id__": 129 }, "_children": [], "_active": true, "_components": [ { - "__id__": 104 + "__id__": 140 } ], "_prefab": { - "__id__": 105 + "__id__": 141 }, "_opacity": 255, "_color": { @@ -3912,7 +5263,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 103 + "__id__": 139 }, "_enabled": true, "_materials": [ @@ -3957,17 +5308,17 @@ "_name": "tiliCount3", "_objFlags": 0, "_parent": { - "__id__": 93 + "__id__": 129 }, "_children": [], "_active": true, "_components": [ { - "__id__": 107 + "__id__": 143 } ], "_prefab": { - "__id__": 108 + "__id__": 144 }, "_opacity": 255, "_color": { @@ -4021,7 +5372,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 106 + "__id__": 142 }, "_enabled": true, "_materials": [ @@ -4081,31 +5432,31 @@ }, "_children": [ { - "__id__": 111 + "__id__": 147 }, { - "__id__": 114 + "__id__": 150 }, { - "__id__": 117 + "__id__": 153 }, { - "__id__": 120 + "__id__": 156 }, { - "__id__": 123 + "__id__": 159 }, { - "__id__": 126 + "__id__": 162 }, { - "__id__": 129 + "__id__": 165 } ], "_active": true, "_components": [], "_prefab": { - "__id__": 132 + "__id__": 168 }, "_opacity": 255, "_color": { @@ -4159,17 +5510,17 @@ "_name": "bg", "_objFlags": 0, "_parent": { - "__id__": 110 + "__id__": 146 }, "_children": [], "_active": true, "_components": [ { - "__id__": 112 + "__id__": 148 } ], "_prefab": { - "__id__": 113 + "__id__": 149 }, "_opacity": 255, "_color": { @@ -4223,7 +5574,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 111 + "__id__": 147 }, "_enabled": true, "_materials": [ @@ -4266,17 +5617,17 @@ "_name": "baoxiang", "_objFlags": 0, "_parent": { - "__id__": 110 + "__id__": 146 }, "_children": [], "_active": true, "_components": [ { - "__id__": 115 + "__id__": 151 } ], "_prefab": { - "__id__": 116 + "__id__": 152 }, "_opacity": 255, "_color": { @@ -4330,7 +5681,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 114 + "__id__": 150 }, "_enabled": true, "_materials": [ @@ -4373,17 +5724,17 @@ "_name": "jia", "_objFlags": 0, "_parent": { - "__id__": 110 + "__id__": 146 }, "_children": [], "_active": true, "_components": [ { - "__id__": 118 + "__id__": 154 } ], "_prefab": { - "__id__": 119 + "__id__": 155 }, "_opacity": 255, "_color": { @@ -4437,7 +5788,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 117 + "__id__": 153 }, "_enabled": true, "_materials": [ @@ -4480,17 +5831,17 @@ "_name": "New Sprite", "_objFlags": 0, "_parent": { - "__id__": 110 + "__id__": 146 }, "_children": [], "_active": true, "_components": [ { - "__id__": 121 + "__id__": 157 } ], "_prefab": { - "__id__": 122 + "__id__": 158 }, "_opacity": 255, "_color": { @@ -4544,7 +5895,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 120 + "__id__": 156 }, "_enabled": true, "_materials": [ @@ -4589,17 +5940,17 @@ "_name": "New Sprite", "_objFlags": 0, "_parent": { - "__id__": 110 + "__id__": 146 }, "_children": [], "_active": true, "_components": [ { - "__id__": 124 + "__id__": 160 } ], "_prefab": { - "__id__": 125 + "__id__": 161 }, "_opacity": 255, "_color": { @@ -4653,7 +6004,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 123 + "__id__": 159 }, "_enabled": true, "_materials": [ @@ -4698,17 +6049,17 @@ "_name": "New Sprite", "_objFlags": 0, "_parent": { - "__id__": 110 + "__id__": 146 }, "_children": [], "_active": true, "_components": [ { - "__id__": 127 + "__id__": 163 } ], "_prefab": { - "__id__": 128 + "__id__": 164 }, "_opacity": 255, "_color": { @@ -4762,7 +6113,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 126 + "__id__": 162 }, "_enabled": true, "_materials": [ @@ -4807,17 +6158,17 @@ "_name": "New Sprite", "_objFlags": 0, "_parent": { - "__id__": 110 + "__id__": 146 }, "_children": [], "_active": true, "_components": [ { - "__id__": 130 + "__id__": 166 } ], "_prefab": { - "__id__": 131 + "__id__": 167 }, "_opacity": 255, "_color": { @@ -4871,7 +6222,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 129 + "__id__": 165 }, "_enabled": true, "_materials": [ @@ -4931,35 +6282,35 @@ }, "_children": [ { - "__id__": 134 + "__id__": 170 }, { - "__id__": 138 + "__id__": 174 }, { - "__id__": 141 + "__id__": 177 }, { - "__id__": 147 + "__id__": 183 }, { - "__id__": 153 + "__id__": 189 }, { - "__id__": 159 + "__id__": 195 }, { - "__id__": 165 + "__id__": 201 } ], "_active": false, "_components": [ { - "__id__": 168 + "__id__": 204 } ], "_prefab": { - "__id__": 169 + "__id__": 205 }, "_opacity": 255, "_color": { @@ -5013,20 +6364,20 @@ "_name": "New Sprite(Splash)", "_objFlags": 0, "_parent": { - "__id__": 133 + "__id__": 169 }, "_children": [], "_active": true, "_components": [ { - "__id__": 135 + "__id__": 171 }, { - "__id__": 136 + "__id__": 172 } ], "_prefab": { - "__id__": 137 + "__id__": 173 }, "_opacity": 200, "_color": { @@ -5080,7 +6431,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 134 + "__id__": 170 }, "_enabled": true, "_materials": [ @@ -5112,7 +6463,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 134 + "__id__": 170 }, "_enabled": true, "_id": "" @@ -5133,17 +6484,17 @@ "_name": "New Label", "_objFlags": 0, "_parent": { - "__id__": 133 + "__id__": 169 }, "_children": [], "_active": true, "_components": [ { - "__id__": 139 + "__id__": 175 } ], "_prefab": { - "__id__": 140 + "__id__": 176 }, "_opacity": 255, "_color": { @@ -5197,7 +6548,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 138 + "__id__": 174 }, "_enabled": true, "_materials": [ @@ -5241,21 +6592,21 @@ "_name": "block1", "_objFlags": 0, "_parent": { - "__id__": 133 + "__id__": 169 }, "_children": [ { - "__id__": 142 + "__id__": 178 } ], "_active": true, "_components": [ { - "__id__": 145 + "__id__": 181 } ], "_prefab": { - "__id__": 146 + "__id__": 182 }, "_opacity": 255, "_color": { @@ -5309,17 +6660,17 @@ "_name": "light", "_objFlags": 0, "_parent": { - "__id__": 141 + "__id__": 177 }, "_children": [], "_active": true, "_components": [ { - "__id__": 143 + "__id__": 179 } ], "_prefab": { - "__id__": 144 + "__id__": 180 }, "_opacity": 0, "_color": { @@ -5373,7 +6724,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 142 + "__id__": 178 }, "_enabled": true, "_materials": [ @@ -5416,7 +6767,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 141 + "__id__": 177 }, "_enabled": true, "_materials": [ @@ -5459,21 +6810,21 @@ "_name": "block2", "_objFlags": 0, "_parent": { - "__id__": 133 + "__id__": 169 }, "_children": [ { - "__id__": 148 + "__id__": 184 } ], "_active": true, "_components": [ { - "__id__": 151 + "__id__": 187 } ], "_prefab": { - "__id__": 152 + "__id__": 188 }, "_opacity": 255, "_color": { @@ -5527,17 +6878,17 @@ "_name": "light", "_objFlags": 0, "_parent": { - "__id__": 147 + "__id__": 183 }, "_children": [], "_active": true, "_components": [ { - "__id__": 149 + "__id__": 185 } ], "_prefab": { - "__id__": 150 + "__id__": 186 }, "_opacity": 0, "_color": { @@ -5591,7 +6942,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 148 + "__id__": 184 }, "_enabled": true, "_materials": [ @@ -5634,7 +6985,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 147 + "__id__": 183 }, "_enabled": true, "_materials": [ @@ -5677,21 +7028,21 @@ "_name": "block3", "_objFlags": 0, "_parent": { - "__id__": 133 + "__id__": 169 }, "_children": [ { - "__id__": 154 + "__id__": 190 } ], "_active": true, "_components": [ { - "__id__": 157 + "__id__": 193 } ], "_prefab": { - "__id__": 158 + "__id__": 194 }, "_opacity": 255, "_color": { @@ -5745,17 +7096,17 @@ "_name": "light", "_objFlags": 0, "_parent": { - "__id__": 153 + "__id__": 189 }, "_children": [], "_active": true, "_components": [ { - "__id__": 155 + "__id__": 191 } ], "_prefab": { - "__id__": 156 + "__id__": 192 }, "_opacity": 0, "_color": { @@ -5809,7 +7160,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 154 + "__id__": 190 }, "_enabled": true, "_materials": [ @@ -5852,7 +7203,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 153 + "__id__": 189 }, "_enabled": true, "_materials": [ @@ -5895,21 +7246,21 @@ "_name": "block4", "_objFlags": 0, "_parent": { - "__id__": 133 + "__id__": 169 }, "_children": [ { - "__id__": 160 + "__id__": 196 } ], "_active": true, "_components": [ { - "__id__": 163 + "__id__": 199 } ], "_prefab": { - "__id__": 164 + "__id__": 200 }, "_opacity": 0, "_color": { @@ -5963,17 +7314,17 @@ "_name": "light", "_objFlags": 0, "_parent": { - "__id__": 159 + "__id__": 195 }, "_children": [], "_active": true, "_components": [ { - "__id__": 161 + "__id__": 197 } ], "_prefab": { - "__id__": 162 + "__id__": 198 }, "_opacity": 0, "_color": { @@ -6027,7 +7378,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 160 + "__id__": 196 }, "_enabled": true, "_materials": [ @@ -6070,7 +7421,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 159 + "__id__": 195 }, "_enabled": true, "_materials": [ @@ -6113,17 +7464,17 @@ "_name": "cat", "_objFlags": 0, "_parent": { - "__id__": 133 + "__id__": 169 }, "_children": [], "_active": true, "_components": [ { - "__id__": 166 + "__id__": 202 } ], "_prefab": { - "__id__": 167 + "__id__": 203 }, "_opacity": 255, "_color": { @@ -6177,7 +7528,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 165 + "__id__": 201 }, "_enabled": true, "_materials": [ @@ -6220,7 +7571,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 133 + "__id__": 169 }, "_enabled": true, "alignMode": 1, @@ -6262,29 +7613,29 @@ }, "_children": [ { - "__id__": 171 + "__id__": 207 }, { - "__id__": 175 + "__id__": 211 }, { - "__id__": 178 + "__id__": 214 }, { - "__id__": 181 + "__id__": 217 }, { - "__id__": 184 + "__id__": 220 } ], "_active": false, "_components": [ { - "__id__": 192 + "__id__": 228 } ], "_prefab": { - "__id__": 193 + "__id__": 229 }, "_opacity": 255, "_color": { @@ -6338,20 +7689,20 @@ "_name": "New Sprite(Splash)", "_objFlags": 0, "_parent": { - "__id__": 170 + "__id__": 206 }, "_children": [], "_active": true, "_components": [ { - "__id__": 172 + "__id__": 208 }, { - "__id__": 173 + "__id__": 209 } ], "_prefab": { - "__id__": 174 + "__id__": 210 }, "_opacity": 120, "_color": { @@ -6405,7 +7756,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 171 + "__id__": 207 }, "_enabled": true, "_materials": [ @@ -6437,7 +7788,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 171 + "__id__": 207 }, "_enabled": true, "_id": "" @@ -6445,7 +7796,7 @@ { "__type__": "cc.PrefabInfo", "root": { - "__id__": 170 + "__id__": 206 }, "asset": { "__uuid__": "9fdc6671-8422-410b-b9af-36dab20f1488" @@ -6458,17 +7809,17 @@ "_name": "bg", "_objFlags": 0, "_parent": { - "__id__": 170 + "__id__": 206 }, "_children": [], "_active": true, "_components": [ { - "__id__": 176 + "__id__": 212 } ], "_prefab": { - "__id__": 177 + "__id__": 213 }, "_opacity": 255, "_color": { @@ -6522,7 +7873,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 175 + "__id__": 211 }, "_enabled": true, "_materials": [ @@ -6552,7 +7903,7 @@ { "__type__": "cc.PrefabInfo", "root": { - "__id__": 170 + "__id__": 206 }, "asset": { "__uuid__": "9fdc6671-8422-410b-b9af-36dab20f1488" @@ -6565,17 +7916,17 @@ "_name": "title", "_objFlags": 0, "_parent": { - "__id__": 170 + "__id__": 206 }, "_children": [], "_active": true, "_components": [ { - "__id__": 179 + "__id__": 215 } ], "_prefab": { - "__id__": 180 + "__id__": 216 }, "_opacity": 255, "_color": { @@ -6629,7 +7980,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 178 + "__id__": 214 }, "_enabled": true, "_materials": [ @@ -6660,7 +8011,7 @@ { "__type__": "cc.PrefabInfo", "root": { - "__id__": 170 + "__id__": 206 }, "asset": { "__uuid__": "9fdc6671-8422-410b-b9af-36dab20f1488" @@ -6673,17 +8024,17 @@ "_name": "New Label", "_objFlags": 0, "_parent": { - "__id__": 170 + "__id__": 206 }, "_children": [], "_active": true, "_components": [ { - "__id__": 182 + "__id__": 218 } ], "_prefab": { - "__id__": 183 + "__id__": 219 }, "_opacity": 255, "_color": { @@ -6737,7 +8088,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 181 + "__id__": 217 }, "_enabled": true, "_materials": [ @@ -6768,7 +8119,7 @@ { "__type__": "cc.PrefabInfo", "root": { - "__id__": 170 + "__id__": 206 }, "asset": { "__uuid__": "9fdc6671-8422-410b-b9af-36dab20f1488" @@ -6781,24 +8132,24 @@ "_name": "New Sprite", "_objFlags": 0, "_parent": { - "__id__": 170 + "__id__": 206 }, "_children": [ { - "__id__": 185 + "__id__": 221 } ], "_active": true, "_components": [ { - "__id__": 188 + "__id__": 224 }, { - "__id__": 189 + "__id__": 225 } ], "_prefab": { - "__id__": 191 + "__id__": 227 }, "_opacity": 255, "_color": { @@ -6852,17 +8203,17 @@ "_name": "New Label", "_objFlags": 0, "_parent": { - "__id__": 184 + "__id__": 220 }, "_children": [], "_active": true, "_components": [ { - "__id__": 186 + "__id__": 222 } ], "_prefab": { - "__id__": 187 + "__id__": 223 }, "_opacity": 255, "_color": { @@ -6916,7 +8267,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 185 + "__id__": 221 }, "_enabled": true, "_materials": [ @@ -6947,7 +8298,7 @@ { "__type__": "cc.PrefabInfo", "root": { - "__id__": 170 + "__id__": 206 }, "asset": { "__uuid__": "9fdc6671-8422-410b-b9af-36dab20f1488" @@ -6960,7 +8311,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 184 + "__id__": 220 }, "_enabled": true, "_materials": [ @@ -6992,7 +8343,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 184 + "__id__": 220 }, "_enabled": true, "_normalMaterial": null, @@ -7001,7 +8352,7 @@ "zoomScale": 1.1, "clickEvents": [ { - "__id__": 190 + "__id__": 226 } ], "_N$interactable": true, @@ -7057,7 +8408,7 @@ "hoverSprite": null, "_N$disabledSprite": null, "_N$target": { - "__id__": 184 + "__id__": 220 }, "_id": "" }, @@ -7074,7 +8425,7 @@ { "__type__": "cc.PrefabInfo", "root": { - "__id__": 170 + "__id__": 206 }, "asset": { "__uuid__": "9fdc6671-8422-410b-b9af-36dab20f1488" @@ -7087,7 +8438,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 170 + "__id__": 206 }, "_enabled": true, "alignMode": 1, @@ -7112,7 +8463,7 @@ { "__type__": "cc.PrefabInfo", "root": { - "__id__": 170 + "__id__": 206 }, "asset": { "__uuid__": "9fdc6671-8422-410b-b9af-36dab20f1488" diff --git a/assets/prefab/pop/heathpop.prefab b/assets/prefab/pop/heathpop.prefab index fe4df9c..8495353 100644 --- a/assets/prefab/pop/heathpop.prefab +++ b/assets/prefab/pop/heathpop.prefab @@ -27,14 +27,14 @@ "_active": true, "_components": [ { - "__id__": 85 + "__id__": 84 }, { - "__id__": 86 + "__id__": 85 } ], "_prefab": { - "__id__": 87 + "__id__": 86 }, "_opacity": 255, "_color": { @@ -254,7 +254,7 @@ "_active": true, "_components": [], "_prefab": { - "__id__": 84 + "__id__": 83 }, "_opacity": 255, "_color": { @@ -734,28 +734,28 @@ "__id__": 33 }, { - "__id__": 39 + "__id__": 38 }, { - "__id__": 44 + "__id__": 43 }, { - "__id__": 66 + "__id__": 65 }, { - "__id__": 69 + "__id__": 68 }, { - "__id__": 77 + "__id__": 76 }, { - "__id__": 80 + "__id__": 79 } ], "_active": true, "_components": [], "_prefab": { - "__id__": 83 + "__id__": 82 }, "_opacity": 255, "_color": { @@ -1198,8 +1198,8 @@ "__type__": "TypedArray", "ctor": "Float64Array", "array": [ - 49.16, - -10, + 41.986, + 0.667, 0, 0, 0, @@ -1292,13 +1292,10 @@ }, { "__id__": 35 - }, - { - "__id__": 36 } ], "_prefab": { - "__id__": 38 + "__id__": 37 }, "_opacity": 255, "_color": { @@ -1379,22 +1376,6 @@ "_atlas": null, "_id": "" }, - { - "__type__": "6624fhcuF5DF67gzSViWhRV", - "_name": "", - "_objFlags": 0, - "node": { - "__id__": 33 - }, - "_enabled": true, - "heath": null, - "heatht": null, - "switchNode": null, - "timeNode": null, - "switchButtons": [], - "coin": null, - "_id": "" - }, { "__type__": "cc.Button", "_name": "", @@ -1409,7 +1390,7 @@ "zoomScale": 1.2, "clickEvents": [ { - "__id__": 37 + "__id__": 36 } ], "_N$interactable": true, @@ -1499,14 +1480,14 @@ "_active": true, "_components": [ { - "__id__": 40 + "__id__": 39 }, { - "__id__": 41 + "__id__": 40 } ], "_prefab": { - "__id__": 43 + "__id__": 42 }, "_opacity": 255, "_color": { @@ -1560,7 +1541,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 39 + "__id__": 38 }, "_enabled": true, "_materials": [ @@ -1592,7 +1573,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 39 + "__id__": 38 }, "_enabled": true, "_normalMaterial": null, @@ -1601,7 +1582,7 @@ "zoomScale": 1.1, "clickEvents": [ { - "__id__": 42 + "__id__": 41 } ], "_N$interactable": true, @@ -1657,7 +1638,7 @@ "hoverSprite": null, "_N$disabledSprite": null, "_N$target": { - "__id__": 39 + "__id__": 38 }, "_id": "" }, @@ -1691,23 +1672,23 @@ }, "_children": [ { - "__id__": 45 + "__id__": 44 }, { - "__id__": 59 + "__id__": 58 } ], "_active": false, "_components": [ { - "__id__": 62 + "__id__": 61 }, { - "__id__": 63 + "__id__": 62 } ], "_prefab": { - "__id__": 65 + "__id__": 64 }, "_opacity": 255, "_color": { @@ -1761,26 +1742,26 @@ "_name": "coinh", "_objFlags": 0, "_parent": { - "__id__": 44 + "__id__": 43 }, "_children": [ { - "__id__": 46 + "__id__": 45 }, { - "__id__": 49 + "__id__": 48 }, { - "__id__": 52 + "__id__": 51 }, { - "__id__": 55 + "__id__": 54 } ], "_active": true, "_components": [], "_prefab": { - "__id__": 58 + "__id__": 57 }, "_opacity": 255, "_color": { @@ -1804,15 +1785,15 @@ "__type__": "TypedArray", "ctor": "Float64Array", "array": [ - 183.311, + 207.103, 5.847, 0, 0, 0, 0, 1, - 1, - 1, + 0.8, + 0.8, 1 ] }, @@ -1834,17 +1815,17 @@ "_name": "button_1", "_objFlags": 0, "_parent": { - "__id__": 45 + "__id__": 44 }, "_children": [], "_active": true, "_components": [ { - "__id__": 47 + "__id__": 46 } ], "_prefab": { - "__id__": 48 + "__id__": 47 }, "_opacity": 255, "_color": { @@ -1898,7 +1879,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 46 + "__id__": 45 }, "_enabled": true, "_materials": [ @@ -1943,17 +1924,17 @@ "_name": "button_0", "_objFlags": 0, "_parent": { - "__id__": 45 + "__id__": 44 }, "_children": [], "_active": true, "_components": [ { - "__id__": 50 + "__id__": 49 } ], "_prefab": { - "__id__": 51 + "__id__": 50 }, "_opacity": 255, "_color": { @@ -2007,7 +1988,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 49 + "__id__": 48 }, "_enabled": true, "_materials": [ @@ -2052,17 +2033,17 @@ "_name": "button_0", "_objFlags": 0, "_parent": { - "__id__": 45 + "__id__": 44 }, "_children": [], "_active": true, "_components": [ { - "__id__": 53 + "__id__": 52 } ], "_prefab": { - "__id__": 54 + "__id__": 53 }, "_opacity": 255, "_color": { @@ -2116,7 +2097,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 52 + "__id__": 51 }, "_enabled": true, "_materials": [ @@ -2161,17 +2142,17 @@ "_name": "button_0", "_objFlags": 0, "_parent": { - "__id__": 45 + "__id__": 44 }, "_children": [], "_active": true, "_components": [ { - "__id__": 56 + "__id__": 55 } ], "_prefab": { - "__id__": 57 + "__id__": 56 }, "_opacity": 255, "_color": { @@ -2225,7 +2206,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 55 + "__id__": 54 }, "_enabled": true, "_materials": [ @@ -2281,17 +2262,17 @@ "_name": "tilibuman", "_objFlags": 0, "_parent": { - "__id__": 44 + "__id__": 43 }, "_children": [], "_active": true, "_components": [ { - "__id__": 60 + "__id__": 59 } ], "_prefab": { - "__id__": 61 + "__id__": 60 }, "_opacity": 255, "_color": { @@ -2345,7 +2326,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 59 + "__id__": 58 }, "_enabled": true, "_materials": [ @@ -2390,7 +2371,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 44 + "__id__": 43 }, "_enabled": true, "_materials": [ @@ -2424,7 +2405,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 44 + "__id__": 43 }, "_enabled": true, "_normalMaterial": null, @@ -2433,7 +2414,7 @@ "zoomScale": 1.1, "clickEvents": [ { - "__id__": 64 + "__id__": 63 } ], "_N$interactable": true, @@ -2489,7 +2470,7 @@ "hoverSprite": null, "_N$disabledSprite": null, "_N$target": { - "__id__": 44 + "__id__": 43 }, "_id": "" }, @@ -2525,11 +2506,11 @@ "_active": false, "_components": [ { - "__id__": 67 + "__id__": 66 } ], "_prefab": { - "__id__": 68 + "__id__": 67 }, "_opacity": 255, "_color": { @@ -2583,7 +2564,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 66 + "__id__": 65 }, "_enabled": true, "_materials": [ @@ -2632,20 +2613,20 @@ }, "_children": [ { - "__id__": 70 + "__id__": 69 }, { - "__id__": 73 + "__id__": 72 } ], "_active": true, "_components": [ { - "__id__": 75 + "__id__": 74 } ], "_prefab": { - "__id__": 76 + "__id__": 75 }, "_opacity": 255, "_color": { @@ -2699,17 +2680,17 @@ "_name": "tili_x", "_objFlags": 0, "_parent": { - "__id__": 69 + "__id__": 68 }, "_children": [], "_active": true, "_components": [ { - "__id__": 71 + "__id__": 70 } ], "_prefab": { - "__id__": 72 + "__id__": 71 }, "_opacity": 255, "_color": { @@ -2763,7 +2744,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 70 + "__id__": 69 }, "_enabled": true, "_materials": [ @@ -2808,13 +2789,13 @@ "_name": "huifuyidian", "_objFlags": 0, "_parent": { - "__id__": 69 + "__id__": 68 }, "_children": [], "_active": true, "_components": [], "_prefab": { - "__id__": 74 + "__id__": 73 }, "_opacity": 255, "_color": { @@ -2879,7 +2860,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 69 + "__id__": 68 }, "_enabled": true, "_materials": [ @@ -2930,11 +2911,11 @@ "_active": false, "_components": [ { - "__id__": 78 + "__id__": 77 } ], "_prefab": { - "__id__": 79 + "__id__": 78 }, "_opacity": 255, "_color": { @@ -2988,7 +2969,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 77 + "__id__": 76 }, "_enabled": true, "_materials": [ @@ -3039,11 +3020,11 @@ "_active": true, "_components": [ { - "__id__": 81 + "__id__": 80 } ], "_prefab": { - "__id__": 82 + "__id__": 81 }, "_opacity": 255, "_color": { @@ -3097,7 +3078,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 80 + "__id__": 79 }, "_enabled": true, "_materials": [ @@ -3202,25 +3183,25 @@ }, "switchNode": [ { - "__id__": 66 + "__id__": 65 }, { - "__id__": 69 + "__id__": 68 } ], "timeNode": { - "__id__": 73 + "__id__": 72 }, "switchButtons": [ { - "__id__": 39 + "__id__": 38 }, { - "__id__": 44 + "__id__": 43 } ], "coin": { - "__id__": 45 + "__id__": 44 }, "_id": "" }, diff --git a/server/laf-cloud/functions/rechargeStats.ts b/server/laf-cloud/functions/rechargeStats.ts index 9869857..9c781f5 100644 --- a/server/laf-cloud/functions/rechargeStats.ts +++ b/server/laf-cloud/functions/rechargeStats.ts @@ -1,5 +1,5 @@ import cloud from '@lafjs/cloud'; -import { buildPaymentProfile, paymentVipLevel, PAYMENT_PROFILE_RULE } from '@/paymentProfile'; +import { buildPaymentProfile, paymentVipLevel } from '@/paymentProfile'; import type { ProfileOrder } from '@/paymentProfile'; const DAY = 24 * 60 * 60 * 1000; @@ -10,7 +10,7 @@ const userKey = (id: any) => `${typeof id}:${String(id)}`; function emptyStats(asOf: number) { return { - version: 8, + version: 9, currency: 'CNY', unit: 'fen', asOf, @@ -61,6 +61,7 @@ export default async function () { let invalidProfiles = 0; let scannedUsers = 0; let skippedNeverPaidUsers = 0; + let removedNeverPaidStats = 0; while (true) { const candidates: any[] = await users.find({ @@ -70,30 +71,44 @@ export default async function () { // Advance on the identity page, including pages consisting entirely of stable VIP0 users. afterId = candidates[candidates.length - 1]._id; scannedUsers += candidates.length; - const previous: any[] = await rechargeStatsCollection.find({ _id: { $in: candidates.map(user => user._id) } }, - { projection: { _id: 1, openid: 1, has_ever_paid: 1, paid_status: 1, - data_valid: 1, version: 1, asOf: 1, updatedAt: 1, profile_rule_version: 1, maintenance_identity: 1 } }).toArray(); - const previousById = new Map(previous.map(row => [userKey(row._id), row])); + // VIP0 is a user attribute, not a cached zero-valued statistics document. const batch = candidates.filter(user => { - const saved = previousById.get(userKey(user._id)); - // Only a verified, initialized never-payer can be cached. A missing profile, - // ambiguous identity or changed account must go through the order check below. - const stableNeverPaid = user.pay_user === false && saved?.version === 8 - && saved.data_valid === true && saved.paid_status === 'never' && saved.has_ever_paid === false - && user.vip_level === 0 && user.vip_profile?.data_valid === true - && user.vip_profile.as_of === saved.asOf && user.vip_profile.updated_at === saved.updatedAt - && user.vip_profile.rule_version === PAYMENT_PROFILE_RULE.version - && saved.profile_rule_version === PAYMENT_PROFILE_RULE.version - && saved.openid === user.openid && saved.maintenance_identity?.pay_user === false - && saved.maintenance_identity.register_time === timestamp(user.register_time); + const vip = user.vip_profile; + const stableNeverPaid = user.pay_user === false && user.vip_level === 0 + && vip?.maintenance_version === 9 && vip.data_valid === true && vip.has_ever_paid === false + && vip.identity?.openid === user.openid && vip.identity?.pay_user === false + && vip.identity?.register_time === timestamp(user.register_time); if (stableNeverPaid) skippedNeverPaidUsers++; return !stableNeverPaid; }); if (!batch.length) continue; + // Read legacy evidence only for users actually needing maintenance/migration. + const previous: any[] = await rechargeStatsCollection.find({ _id: { $in: batch.map(user => user._id) } }, + { + projection: { + _id: 1, openid: 1, has_ever_paid: 1, paid_status: 1, + data_valid: 1, amountTotal: 1, orderCount: 1, maintenance_identity: 1 + } + }).toArray(); + const previousById = new Map(previous.map(row => [userKey(row._id), row])); const previouslyPaid = new Set([ - ...previous.filter(row => row.has_ever_paid === true), + ...previous.filter(row => row.has_ever_paid === true || row.paid_status === 'paid' || row.amountTotal > 0 || row.orderCount > 0), ...batch.filter(user => user.vip_level > 0 || user.vip_profile?.has_ever_paid === true), ].map(row => userKey(row._id))); + const directNeverPaid = new Set(batch.filter(user => { + const saved = previousById.get(userKey(user._id)); + const identity = user.vip_profile?.identity; + const identityMatches = !identity || (identity.openid === user.openid + && identity.pay_user === user.pay_user && identity.register_time === timestamp(user.register_time)); + // Trust the explicit server-owned false flag, never a missing flag/profile. + // Existing conflicts and account changes still require an order check. + return user.pay_user === false && !previouslyPaid.has(userKey(user._id)) + && typeof user.openid === 'string' && !!user.openid.trim() + && user.vip_profile?.data_valid !== false && identityMatches + && (!saved || (saved.data_valid === true && saved.paid_status === 'never' + && saved.openid === user.openid && saved.maintenance_identity?.pay_user === false + && saved.maintenance_identity?.register_time === timestamp(user.register_time))); + }).map(user => userKey(user._id))); const summaries = new Map; @@ -106,9 +121,12 @@ export default async function () { futureOrders: number; }>(); for (const user of batch) { + if (directNeverPaid.has(userKey(user._id))) continue; if (typeof user.openid === 'string' && user.openid.trim() && !summaries.has(user.openid)) { - summaries.set(user.openid, { stats: emptyStats(asOf), seen: new Map(), fen15d: 0, fen30d: 0, fenTotal: 0, - recent: [], lastPaidAt: null, futureOrders: 0 }); + summaries.set(user.openid, { + stats: emptyStats(asOf), seen: new Map(), fen15d: 0, fen30d: 0, fenTotal: 0, + recent: [], lastPaidAt: null, futureOrders: 0 + }); } } @@ -118,9 +136,13 @@ export default async function () { state: { $in: [1, 2] }, paymentAppEnv: { $ne: 'test' }, outTradeNo: { $not: /^wct_/ }, - }, { projection: { openid: 1, outTradeNo: 1, goodsPrice: 1, itemCount: 1, chargeTime: 1, time: 1, - itemid: 1, 'goldMiner.configVersion': 1, 'goldMiner.paidAt': 1, 'goldMiner.confirmedAt': 1, - rewardVersion: 1, activityType: 1 } }) + }, { + projection: { + openid: 1, outTradeNo: 1, goodsPrice: 1, itemCount: 1, chargeTime: 1, time: 1, + itemid: 1, 'goldMiner.configVersion': 1, 'goldMiner.paidAt': 1, 'goldMiner.confirmedAt': 1, + rewardVersion: 1, activityType: 1 + } + }) .sort({ openid: 1, outTradeNo: 1, _id: 1 }); try { for await (const order of orders) { @@ -158,9 +180,11 @@ export default async function () { if (paidAt > asOf - 15 * DAY) summary.fen15d += amount; if (paidAt > asOf - 30 * DAY) { summary.fen30d += amount; - summary.recent.push({ amountFen: amount, paidAt, sku: String(order.itemid ?? ''), + summary.recent.push({ + amountFen: amount, paidAt, sku: String(order.itemid ?? ''), rewardVersion: order.rewardVersion ?? order.goldMiner?.configVersion, - activity: order.activityType ?? (order.goldMiner ? 'coin' : undefined) }); + activity: order.activityType ?? (order.goldMiner ? 'coin' : undefined) + }); } } } @@ -174,10 +198,15 @@ export default async function () { summary.stats.amount30d = summary.fen30d; summary.stats.amountTotal = summary.fenTotal; } - const result = await rechargeStatsCollection.bulkWrite(batch.map(user => { - const rechargeStats = summaries.get(user.openid)?.stats ?? { ...emptyStats(asOf), missingOpenid: true }; + const records = batch.map(user => { + const rechargeStats = summaries.get(user.openid)?.stats + ?? { ...emptyStats(asOf), missingOpenid: !directNeverPaid.has(userKey(user._id)) }; const summary = summaries.get(user.openid); - const profile = buildPaymentProfile({ + const profile = directNeverPaid.has(userKey(user._id)) ? { + vip_level: 0, data_valid: true, paid_status: 'never', has_ever_paid: false, + invalid_reasons: [], profile_rule_version: null, profile_calculated_as_of: updatedAt, + rfm: null, + } : buildPaymentProfile({ cutoff: asOf + 1, registerTime: timestamp(user.register_time), payUser: user.pay_user, missingOpenid: rechargeStats.missingOpenid, previousPaid: previouslyPaid.has(userKey(user._id)), confirmedOrders: rechargeStats.orderCount, futureOrders: summary?.futureOrders ?? 0, @@ -189,107 +218,189 @@ export default async function () { if (profile.data_valid) validProfiles++; else invalidProfiles++; // Persist calculation inputs/results here; the public VIP attribute belongs only to users. const { vip_level: _vipLevel, ...features } = profile; - const record = { _id: user._id, openid: user.openid ?? null, ...rechargeStats, ...features, updatedAt, - maintenance_identity: { pay_user: user.pay_user ?? null, register_time: timestamp(user.register_time) } }; + const record = { + _id: user._id, openid: user.openid ?? null, ...rechargeStats, ...features, updatedAt, + maintenance_identity: { pay_user: user.pay_user ?? null, register_time: timestamp(user.register_time) } + }; + return record; + }); + const freeRecords = records.filter(record => record.data_valid && record.paid_status === 'never'); + const statsRecords = records.filter(record => !record.data_valid || record.paid_status !== 'never'); + const result = statsRecords.length ? await rechargeStatsCollection.bulkWrite(statsRecords.map(record => { // Preserve the complete last calculated feature tuple atomically on bad input. // Keep current error/identity metadata and its attempted rule version visible. const heldFields = Object.fromEntries([ 'profile_rule_version', 'profile_calculated_as_of', 'rfm', 'spending', 'ticket_factors', ].map(key => [key, { $ifNull: [`$${key}`, null] }])); - let replacement: any = profile.data_valid ? { $literal: record } + let replacement: any = record.data_valid ? { $literal: record } : { $mergeObjects: [{ $literal: record }, heldFields] }; // A concurrent earlier run may establish paid identity after our batch read. // Do not erase it or publish VIP0 over it, even on structurally valid free-user input. - if (profile.has_ever_paid !== true) replacement = { $cond: [ - { $eq: ['$has_ever_paid', true] }, - { $mergeObjects: [{ $literal: { ...record, has_ever_paid: true, paid_status: 'unknown', - data_valid: false, invalid_reasons: [...profile.invalid_reasons, 'paid_identity_changed_during_calculation'] } }, heldFields] }, - replacement, - ] }; - return { updateOne: { - // Match only the unique user ID, so a newer snapshot cannot cause an upsert ID conflict. - // Apply the freshness check atomically inside the update, including same-day reruns. - filter: { _id: user._id }, - update: [{ $replaceWith: { $cond: [ - { $and: [ - { $lte: [{ $ifNull: ['$asOf', 0] }, asOf] }, - { $lte: [{ $ifNull: ['$updatedAt', 0] }, updatedAt] }, - ] }, + if (record.has_ever_paid !== true) replacement = { + $cond: [ + { $eq: ['$has_ever_paid', true] }, + { + $mergeObjects: [{ + $literal: { + ...record, has_ever_paid: true, paid_status: 'unknown', + data_valid: false, invalid_reasons: [...record.invalid_reasons, 'paid_identity_changed_during_calculation'] + } + }, heldFields] + }, replacement, - '$$ROOT', - ] } }], - upsert: true, - } }; - })); + ] + }; + return { + updateOne: { + // Match only the unique user ID, so a newer snapshot cannot cause an upsert ID conflict. + // Apply the freshness check atomically inside the update, including same-day reruns. + filter: { _id: record._id }, + update: [{ + $replaceWith: { + $cond: [ + { + $and: [ + { $lte: [{ $ifNull: ['$asOf', 0] }, asOf] }, + { $lte: [{ $ifNull: ['$updatedAt', 0] }, updatedAt] }, + ] + }, + replacement, + '$$ROOT', + ] + } + }], + upsert: true, + } + }; + })) : { modifiedCount: 0, upsertedCount: 0 }; // Read back the committed tuple: a concurrent task may have won the freshness check, // or invalid input may have retained a newer good tuple. Never publish the attempted result. - const committed: any[] = await rechargeStatsCollection.find({ _id: { $in: batch.map(user => user._id) } }, - { projection: { _id: 1, openid: 1, asOf: 1, updatedAt: 1, data_valid: 1, paid_status: 1, - has_ever_paid: 1, maintenance_identity: 1, profile_rule_version: 1, - profile_calculated_as_of: 1, rfm: 1 } }).toArray(); + const persisted: any[] = await rechargeStatsCollection.find({ _id: { $in: batch.map(user => user._id) } }, + { + projection: { + _id: 1, openid: 1, asOf: 1, updatedAt: 1, data_valid: 1, paid_status: 1, + has_ever_paid: 1, amountTotal: 1, orderCount: 1, maintenance_identity: 1, profile_rule_version: 1, + profile_calculated_as_of: 1, rfm: 1 + } + }).toArray(); + const persistedById = new Map(persisted.map(row => [userKey(row._id), row])); + const freeById = new Map(freeRecords.map(row => [userKey(row._id), row])); + const committed: any[] = batch.map(user => { + const saved = persistedById.get(userKey(user._id)); + const free = freeById.get(userKey(user._id)); + // A paid/newer snapshot committed during calculation wins over initialization. + if (!free || saved?.has_ever_paid === true || saved?.paid_status === 'paid' + || saved?.amountTotal > 0 || saved?.orderCount > 0 + || saved?.updatedAt > updatedAt || saved?.asOf > asOf) return saved; + return free; + }).filter(Boolean); + // Remove only zero-valued, explicitly verified legacy free-user records. Do this + // before marking migration complete on users so a failed cleanup can be retried. + const cleanupIds = committed.filter(row => row.data_valid && row.paid_status === 'never').map(row => row._id); + if (cleanupIds.length) { + const cleanup = await rechargeStatsCollection.deleteMany({ + _id: { $in: cleanupIds }, + has_ever_paid: { $ne: true }, paid_status: { $ne: 'paid' }, amountTotal: 0, orderCount: 0, + asOf: { $lte: asOf }, updatedAt: { $lte: updatedAt } + }); + removedNeverPaidStats += cleanup.deletedCount; + } const batchById = new Map(batch.map(user => [userKey(user._id), user])); const vipResult = committed.length ? await users.bulkWrite(committed.map(saved => { const source = batchById.get(userKey(saved._id))!; // The retained RFM tuple also permits first-time migration/retry without the legacy // userRechargeStats.vip_level field, even if this attempt has invalid order inputs. const score = saved.rfm?.score; - const calculatedLevel = Number.isFinite(score) && saved.profile_calculated_as_of != null + const calculatedLevel = saved.data_valid && saved.paid_status === 'never' ? 0 : Number.isFinite(score) && saved.profile_calculated_as_of != null && saved.rfm.last_effective_paid_at !== undefined ? paymentVipLevel(saved.rfm.last_effective_paid_at !== null, score) : null; - const identity = { openid: saved.openid ?? null, pay_user: saved.maintenance_identity?.pay_user ?? null, - register_time: saved.maintenance_identity?.register_time ?? null }; - const currentIdentity = { $and: [ - { $eq: [{ $ifNull: ['$openid', null] }, { $literal: identity.openid ?? null }] }, - { $eq: [{ $ifNull: ['$pay_user', null] }, { $literal: identity.pay_user ?? null }] }, - { $eq: [{ $ifNull: ['$register_time', null] }, { $literal: source.register_time ?? null }] }, - { $literal: timestamp(source.register_time) === identity.register_time }, - ] }; - const valid = { $and: [ - { $literal: saved.data_valid === true && calculatedLevel !== null }, currentIdentity, - // Do not turn a concurrently established paid identity back into a never-payer. - { $or: [ - { $literal: saved.has_ever_paid === true }, - { $and: [{ $ne: ['$vip_profile.has_ever_paid', true] }, - { $lte: [{ $ifNull: ['$vip_level', 0] }, 0] }] }, - ] }, - ] }; + const identity = { + openid: saved.openid ?? null, pay_user: saved.maintenance_identity?.pay_user ?? null, + register_time: saved.maintenance_identity?.register_time ?? null + }; + const currentIdentity = { + $and: [ + { $eq: [{ $ifNull: ['$openid', null] }, { $literal: identity.openid ?? null }] }, + { $eq: [{ $ifNull: ['$pay_user', null] }, { $literal: identity.pay_user ?? null }] }, + { $eq: [{ $ifNull: ['$register_time', null] }, { $literal: source.register_time ?? null }] }, + { $literal: timestamp(source.register_time) === identity.register_time }, + ] + }; + const valid = { + $and: [ + { $literal: saved.data_valid === true && calculatedLevel !== null }, currentIdentity, + // Do not turn a concurrently established paid identity back into a never-payer. + { + $or: [ + { $literal: saved.has_ever_paid === true }, + { + $and: [{ $ne: ['$vip_profile.has_ever_paid', true] }, + { $lte: [{ $ifNull: ['$vip_level', 0] }, 0] }] + }, + ] + }, + ] + }; const oldLevel = { $ifNull: ['$vip_level', { $literal: calculatedLevel }] }; - const heldMetadata = (userField: string, value: any) => ({ $cond: [ - { $ne: [{ $ifNull: ['$vip_level', null] }, null] }, - { $ifNull: [`$vip_profile.${userField}`, null] }, - { $literal: calculatedLevel === null ? null : value ?? null }, - ] }); + const heldMetadata = (userField: string, value: any) => ({ + $cond: [ + { $ne: [{ $ifNull: ['$vip_level', null] }, null] }, + { $ifNull: [`$vip_profile.${userField}`, null] }, + { $literal: calculatedLevel === null ? null : value ?? null }, + ] + }); const metadata = { + maintenance_version: { $literal: 9 }, as_of: { $literal: saved.asOf }, updated_at: { $literal: saved.updatedAt }, data_valid: valid, identity: { $literal: identity }, - has_ever_paid: { $or: [{ $eq: ['$vip_profile.has_ever_paid', true] }, - { $gt: [{ $ifNull: ['$vip_level', 0] }, 0] }, { $literal: saved.has_ever_paid === true }] }, - calculated_as_of: { $cond: [valid, { $literal: saved.profile_calculated_as_of ?? null }, - heldMetadata('calculated_as_of', saved.profile_calculated_as_of)] }, - rule_version: { $cond: [valid, { $literal: saved.profile_rule_version ?? null }, - heldMetadata('rule_version', saved.profile_rule_version)] }, + has_ever_paid: { + $or: [{ $eq: ['$vip_profile.has_ever_paid', true] }, + { $gt: [{ $ifNull: ['$vip_level', 0] }, 0] }, { $literal: saved.has_ever_paid === true }] + }, + calculated_as_of: { + $cond: [valid, { $literal: saved.profile_calculated_as_of ?? null }, + heldMetadata('calculated_as_of', saved.profile_calculated_as_of)] + }, + rule_version: { + $cond: [valid, { $literal: saved.profile_rule_version ?? null }, + heldMetadata('rule_version', saved.profile_rule_version)] + }, + }; + return { + updateOne: { + filter: { _id: saved._id }, upsert: false, + // Merge only the two owned attributes; concurrent gameplay/account changes survive. + update: [{ + $replaceWith: { + $cond: [ + { + $and: [ + { $lte: [{ $ifNull: ['$vip_profile.as_of', 0] }, saved.asOf] }, + { $lte: [{ $ifNull: ['$vip_profile.updated_at', 0] }, saved.updatedAt] }, + ] + }, + { + $mergeObjects: ['$$ROOT', { + vip_level: { $cond: [valid, { $literal: calculatedLevel }, oldLevel] }, + vip_profile: metadata + }] + }, '$$ROOT', + ] + } + }], + } }; - return { updateOne: { - filter: { _id: saved._id }, upsert: false, - // Merge only the two owned attributes; concurrent gameplay/account changes survive. - update: [{ $replaceWith: { $cond: [ - { $and: [ - { $lte: [{ $ifNull: ['$vip_profile.as_of', 0] }, saved.asOf] }, - { $lte: [{ $ifNull: ['$vip_profile.updated_at', 0] }, saved.updatedAt] }, - ] }, - { $mergeObjects: ['$$ROOT', { vip_level: { $cond: [valid, { $literal: calculatedLevel }, oldLevel] }, - vip_profile: metadata }] }, '$$ROOT', - ] } }], - } }; })) : { modifiedCount: 0 }; processedUsers += batch.length; updatedUsers += result.modifiedCount + result.upsertedCount; updatedVipUsers += vipResult.modifiedCount; } - const result = { asOf, updatedAt, scannedUsers, skippedNeverPaidUsers, - processedUsers, updatedUsers, updatedVipUsers, validProfiles, invalidProfiles }; + const result = { + asOf, updatedAt, scannedUsers, skippedNeverPaidUsers, + processedUsers, updatedUsers, updatedVipUsers, removedNeverPaidStats, validProfiles, invalidProfiles + }; console.log('rechargeStats completed', result); return { code: 1, data: result, msg: '用户付费画像维护完成' }; }