From b2ef913c267782e162626fb42ff86b96ec03f144 Mon Sep 17 00:00:00 2001 From: xcy <871622040@qq.com> Date: Wed, 20 Dec 2023 15:20:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=84=9A=E6=9C=AC=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/path_20231215.ts | 1932 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1932 insertions(+) create mode 100644 src/path_20231215.ts diff --git a/src/path_20231215.ts b/src/path_20231215.ts new file mode 100644 index 0000000..297a5b1 --- /dev/null +++ b/src/path_20231215.ts @@ -0,0 +1,1932 @@ +import {ctor} from "./global"; +import {initMongoDB} from "./setMongodb"; +import {ReqEmail} from "./monopoly/protocols/PtlEmail"; +import {MsgEmail} from "./shared/protocols/msg_s2c/MsgEmail"; +import {yangchengmubiao} from "./shared/protocols/event/yangchengmubiao/PtlOpen"; + + +/** + * 标题:首充优化 + * 日語:初回チャージ仕様改善 + * 繁體:首儲機制改善 + * 韓国語: 초회 충전 시스템 개선 + * 英語: First Top-Up optimization + * + * 內文:这是您的补偿,请查收! + * 日語:仕様改善に伴う補填を発送させていただきました。ご確認ください。 + * 繁體中文:這是您的補償內容,煩請查收! + * 韓国語:투자 시스템 개선으로 인한 보상을 보내드립니다. + * 英語: Please find attached a few items as a compensation for the wait during our adjustments. + * + * 线上玩家脚本 + * 1、已激活首充档位且没领完3天奖励的玩家,邮件补发剩下的奖励 + * 2、重置所有玩家首充活动到新版本状态*/ + +async function addEmail(email: ReqEmail) { + let {prize, uid, ...e} = email; + let sendEmail: MsgEmail = { + _id: null, + uid: uid, + type: e.type, + title: e.title, + content: e.content, + createTime: G.time, + contentInsertArr: e.contentInsertArr || [] + }; + + if (email.lngTitle) { + sendEmail.lngTitle = email.lngTitle; + sendEmail.lngContent = email.lngContent; + } + + if ((prize === null || prize === void 0 ? void 0 : prize.length) > 0) { + sendEmail.prizeData = { + prize: email.prize, + isGet: false + }; + } + + if (email.g123log && Object.keys(email.g123log).length > 0) { + sendEmail.g123log = email.g123log; + } + await G.mongodb.collection('email').insertOne({ + ttl: new Date(), ...G.mongodb.conversionIdObj(sendEmail) + }) +} + +async function shouChongReSet() { + let shouchong = { + "shouchong1": { + "paynum": 6, + "cartoon": { + "hero": 5001 + }, + "prize": [ + [ + { + "a": "hero", + "t": "5001", + "n": 1 + }, + { + "a": "attr", + "t": "jinbi", + "n": 100000 + } + ], + [ + { + "a": "item", + "t": "12", + "n": 200 + }, + { + "a": "attr", + "t": "jinbi", + "n": 200000 + } + ], + [ + { + "a": "item", + "t": "12", + "n": 200 + }, + { + "a": "attr", + "t": "jinbi", + "n": 300000 + } + ] + ] + }, + "shouchong2": { + "paynum": 30, + "cartoon": { + "img": 5001 + }, + "prize": [ + [ + { + "a": "equip", + "t": "1009", + "n": 1 + }, + { + "a": "equip", + "t": "2009", + "n": 1 + } + ], + [ + { + "a": "equip", + "t": "3009", + "n": 1 + }, + { + "a": "item", + "t": "2", + "n": 1000 + } + ], + [ + { + "a": "equip", + "t": "4009", + "n": 1 + }, + { + "a": "item", + "t": "2", + "n": 1000 + } + ] + ] + }, + "shouchong3": { + "paynum": 98, + "cartoon": { + "hero": 5002 + }, + "prize": [ + [ + { + "a": "hero", + "t": "5002", + "n": 1 + }, + { + "a": "item", + "t": "4", + "n": 10 + } + ], + [ + { + "a": "equip", + "t": "1010", + "n": 1 + }, + { + "a": "item", + "t": "2", + "n": 2000 + } + ], + [ + { + "a": "equip", + "t": "3010", + "n": 1 + }, + { + "a": "item", + "t": "2", + "n": 2000 + } + ] + ] + } + }; + let users = await G.mongodb.collection("user").find({}, { + projection: {uid: 1, payExp: 1} + }).toArray(); + + for (let i = 0; i < users.length; i++) { + let user = users[i]; + let data = await G.mongodb.cEvent("shouchong").findOne({ + uid: user.uid, + type: "shouchong", + }); + + if (!data) { + data = {uid: user.uid, receive: {}, type: "shouchong", _id: G.mongodb.conversionId("")}; + } + + let send_prize = []; + for (let key in shouchong) { + // 充值不足 + if (user.payExp < shouchong[key]["paynum"] * 10) { + continue + } + + // 奖励已经领取完毕 + if (data?.receive && data.receive[key] && data.receive[key].length >= shouchong[key]["prize"].length) { + continue + } + + // 补发未领取奖励 + for (let i = 0; i < shouchong[key]["prize"].length; i++) { + if (data?.receive && data.receive[key] && data.receive[key][i]) { + continue + } + + if (!data.receive[key]) { + data.receive[key] = []; + } + data.receive[key][i] = G.time; + send_prize = send_prize.concat(shouchong[key]["prize"][i]); + } + } + if (send_prize.length <= 0) continue; + + let title = "首充优化"; + let content = "这是您的补偿,请查收!"; + + let lngTitle = { + "en": "First Top-Up optimization", + "ja": "初回チャージ仕様改善", + "ko": "초회 충전 시스템 개선", + "zh-TW": "首儲機制改善" + }; + let lngContent = { + "en": "Please find attached a few items as a compensation for the wait during our adjustments.", + "ja": "仕様改善に伴う補填を発送させていただきました。ご確認ください。", + "ko": "투자 시스템 개선으로 인한 보상을 보내드립니다.", + "zh-TW": "這是您的補償內容,煩請查收!", + }; + + // 发放邮件 + await addEmail({ + uid: user.uid, + type: "system", + title: title, + content: content, + prize: send_prize, + lngTitle: lngTitle, + lngContent: lngContent, + }); + // 设置奖励发放记录 + await G.mongodb.cEvent("shouchong").updateOne({ + uid: user.uid, + type: "shouchong", + }, {"$set": {receive: data.receive, patch: 1}}, {upsert: true}); + + console.log(`玩家${user.uid}首充奖励补发完成...`); + } +} + + +/** + * "zhizunyueka" + 标题:至尊月卡优化 + 日語:豪華月パス仕様改善 + 繁體:至尊月卡改善 + 韓国語:고급 월간 패스 시스템 개선 + 英語: Luxurious Monthly Pass optimization + + 邮件内容:这是您的补偿,请查收! + 日語:仕様改善に伴う補填を発送させていただきました。ご確認ください。 + 繁體中文:這是您的補償內容,煩請查收! + 韓国語:투자 시스템 개선으로 인한 보상을 보내드립니다. + 英語: Please find attached a few items as a compensation for the wait during our adjustments. + + 线上玩家脚本: + 线上已购买至尊月卡的玩家,脚本补发:钻石*10000 + **/ +async function zhizunyueka() { + let w = { + key: "zhizunyueka", + del_time: {$exists: false} + }; + let users = (await G.mongodb.collection("payLogNew").find(w).toArray()).filter( + // 过滤没有结束时间 或者 有结束时间 但是没有过期的 + (pay) => pay.values?.length > 0 && (!pay.values.slice(-1)[0].eTime || pay.values.slice(-1)[0].eTime > G.time) + ); + + let uid2Prize: { [uid: string]: { a: string, t: string, n: number }[] } = {}; + users.forEach(user => { + let uid = user.uid; + if (!uid2Prize[uid]) uid2Prize[uid] = []; + uid2Prize[uid].push({a: "attr", t: "rmbmoney", n: 10000}); + }); + + let title = "至尊月卡优化"; + let content = "这是您的补偿,请查收!"; + let lngTitle = { + "en": "Luxurious Monthly Pass optimization", + "ja": "豪華月パス仕様改善", + "ko": "고급 월간 패스 시스템 개선", + "zh-TW": "至尊月卡改善", + }; + let lngContent = { + "en": "Please find attached a few items as a compensation for the wait during our adjustments.", + "ja": "仕様改善に伴う補填を発送させていただきました。ご確認ください。", + "ko": "투자 시스템 개선으로 인한 보상을 보내드립니다.", + "zh-TW": "這是您的補償內容,煩請查收!", + }; + + for (const [uid, sendPrize] of Object.entries(uid2Prize)) { + // 发放邮件 + await addEmail({ + uid: uid, + type: "system", + title: title, + content: content, + prize: sendPrize, + lngTitle: lngTitle, + lngContent: lngContent, + }); + + // 处理重复执行 + await G.mongodb.collection("payLogNew").updateMany( + Object.assign({uid: uid}, w), {$set: {patch: 1}} + ) + + console.log(`玩家${uid}至尊月卡奖励补发完成...`); + } +} + +/** + * "chaozhiyueka" + 标题 超值月卡优化 + ja:お得月パス仕様改善 + zh-TW:超值月卡改善 + ko:월간 패스 시스템 개선 + en: Value Monthly Pass optimization + + 內文: + 这是您的补偿,请查收! + ja:仕様改善に伴う補填を発送させていただきました。ご確認ください。 + zh-TW:這是您的補償內容,煩請查收! + ko:투자 시스템 개선으로 인한 보상을 보내드립니다. + en: Please find attached a few items as a compensation for the wait during our adjustments. + + 线上已购买超值月卡的玩家,脚本补发:招募卡*30 + **/ +async function chaozhiyueka() { + let w = { + key: "chaozhiyueka", + del_time: {$exists: false} + }; + let users = (await G.mongodb.collection("payLogNew").find(w).toArray()).filter( + // 过滤没有结束时间 或者 有结束时间 但是没有过期的 + (pay) => pay.values?.length > 0 && (!pay.values.slice(-1)[0].eTime || pay.values.slice(-1)[0].eTime > G.time) + ); + + let uid2Prize: { [uid: string]: { a: string, t: string, n: number }[] } = {}; + users.forEach(user => { + let uid = user.uid; + if (!uid2Prize[uid]) uid2Prize[uid] = []; + uid2Prize[uid].push({a: "item", t: "4", n: 30}); + }); + + let title = "超值月卡优化"; + let content = "这是您的补偿,请查收!"; + let lngTitle = { + "ja": "お得月パス仕様改善", + "zh-TW": "超值月卡改善", + "ko": "월간 패스 시스템 개선", + "en": "Value Monthly Pass optimization", + }; + let lngContent = { + "en": "Please find attached a few items as a compensation for the wait during our adjustments.", + "ja": "仕様改善に伴う補填を発送させていただきました。ご確認ください。", + "ko": "투자 시스템 개선으로 인한 보상을 보내드립니다.", + "zh-TW": "這是您的補償內容,煩請查收!" + }; + + for (const [uid, sendPrize] of Object.entries(uid2Prize)) { + // 发放邮件 + await addEmail({ + uid: uid, + type: "system", + title: title, + content: content, + prize: sendPrize, + lngTitle: lngTitle, + lngContent: lngContent, + }); + + // 处理重复执行 + await G.mongodb.collection("payLogNew").updateMany( + Object.assign({uid: uid}, w), {$set: {patch: 1}} + ) + + console.log(`玩家${uid}超值月卡奖励补发完成...`); + } +} + +/** + * "zhongshenka" + 标题:终身卡优化 + ja:永久パス仕様改善 + zh-TW:永久通行證改善 + ko:영구 패스 시스템 개선 + en: Lifetime Pass optimization + + 內文: 这是您的补偿,请查收! + ja:仕様改善に伴う補填を発送させていただきました。ご確認ください。 + zh-TW:這是您的補償內容,煩請查收! + ko:투자 시스템 개선으로 인한 보상을 보내드립니다. + en: Please find attached a few items as a compensation for the wait during our adjustments. + + 线上已购买永久卡的玩家,脚本补发:汉塞尔1,能量饮料500w + **/ +async function zhongshenka() { + let w = { + key: "zhongshenka", + del_time: {$exists: false} + }; + let users = (await G.mongodb.collection("payLogNew").find(w).toArray()).filter( + // 过滤没有结束时间 或者 有结束时间 但是没有过期的 + (pay) => pay.values?.length > 0 && (!pay.values.slice(-1)[0].eTime || pay.values.slice(-1)[0].eTime > G.time) + ); + + let uid2Prize: { [uid: string]: { a: string, t: string, n: number }[] } = {}; + users.forEach(user => { + let uid = user.uid; + if (!uid2Prize[uid]) uid2Prize[uid] = []; + uid2Prize[uid].push({"a": "item", "t": "1", "n": 5000000}) + uid2Prize[uid].push({a: "hero", t: "4012", n: 1}) + }); + + let title = "终身卡优化"; + let content = "这是您的补偿,请查收!"; + let lngTitle = { + "ja": "永久パス仕様改善", + "zh-TW": "永久通行證改善", + "ko": "영구 패스 시스템 개선", + "en": "Lifetime Pass optimization", + }; + let lngContent = { + "en": "Please find attached a few items as a compensation for the wait during our adjustments.", + "ja": "仕様改善に伴う補填を発送させていただきました。ご確認ください。", + "ko": "투자 시스템 개선으로 인한 보상을 보내드립니다.", + "zh-TW": "這是您的補償內容,煩請查收!" + }; + + for (const [uid, sendPrize] of Object.entries(uid2Prize)) { + // 发放邮件 + await addEmail({ + uid: uid, + type: "system", + title: title, + content: content, + prize: sendPrize, + lngTitle: lngTitle, + lngContent: lngContent, + }); + + // 处理重复执行 + await G.mongodb.collection("payLogNew").updateMany( + Object.assign({uid: uid}, w), {$set: {patch: 1}} + ) + + console.log(`玩家${uid}终身卡奖励补发完成...`); + } +} + + +/** + "qingbaotequan" + 标题:资讯特权优化 + ja:情報特権仕様改善 + zh-TW:資訊特權改善 + ko:정보 특권 시스템 개선 + en: Intel Benefit optimization + + 內文:这是您的补偿,请查收! + ja:仕様改善に伴う補填を発送させていただきました。ご確認ください。 + zh-TW:這是您的補償內容,煩請查收! + ko:투자 시스템 개선으로 인한 보상을 보내드립니다. + en: Please find attached a few items as a compensation for the wait during our adjustments. + + 线上玩家脚本 + 1、特权内容:已购买特权的玩家,特权效果更新,不重置时间 + 2、已购买资讯特权的玩家,脚本补发:钻石*680,顶级紫色套装*1 + * */ +async function qingbaotequan() { + let w = { + key: "qingbaotequan", + patch: {$exists: false}, + del_time: {$exists: false} + }; + let users = (await G.mongodb.collection("payLogNew").find(w).toArray()).filter( + // 过滤没有结束时间 或者 有结束时间 但是没有过期的 + (pay) => pay.values?.length > 0 && (!pay.values.slice(-1)[0].eTime || pay.values.slice(-1)[0].eTime > G.time) + ); + + let uid2Prize: { [uid: string]: { a: string, t: string, n: number }[] } = {}; + users.forEach(user => { + let uid = user.uid; + + if (!uid2Prize[uid]) uid2Prize[uid] = []; + uid2Prize[uid].push({"a": "attr", "t": "rmbmoney", "n": 680}); + uid2Prize[uid].push({"a": "item", "t": "609", "n": 1}); + }); + + let title = "资讯特权优化"; + let content = "这是您的补偿,请查收!"; + let lngTitle = { + "ja": "情報特権仕様改善", + "zh-TW": "資訊特權改善", + "ko": "정보 특권 시스템 개선", + "en": "Intel Benefit optimization", + }; + let lngContent = { + "en": "Please find attached a few items as a compensation for the wait during our adjustments.", + "ja": "仕様改善に伴う補填を発送させていただきました。ご確認ください。", + "ko": "투자 시스템 개선으로 인한 보상을 보내드립니다.", + "zh-TW": "這是您的補償內容,煩請查收!" + }; + for (const [uid, sendPrize] of Object.entries(uid2Prize)) { + // 发放邮件 + await addEmail({ + uid: uid, + type: "system", + title: title, + content: content, + prize: sendPrize, + lngTitle: lngTitle, + lngContent: lngContent, + }); + await G.mongodb.collection("payLogNew").updateMany( + Object.assign({uid: uid}, w), {$set: {patch: 1}} + ) + + console.log(`玩家${uid}特权奖励补发完成...`); + } +} + +/** + "zuozhantequan" + 标题:作战特权优化 + ja:作戦特権仕様改善 + zh-TW:作戰特權改善 + ko:작전 특권 시스템 개선 + en: Strategy Benefit optimization + + 內文:这是您的补偿,请查收! + ja:仕様改善に伴う補填を発送させていただきました。ご確認ください。 + zh-TW:這是您的補償內容,煩請查收! + ko:투자 시스템 개선으로 인한 보상을 보내드립니다. + en: Please find attached a few items as a compensation for the wait during our adjustments. + + 线上玩家脚本 + 1、特权内容:已购买特权的玩家,特权效果更新,不重置时间 + 2、已购买快速特权的玩家,脚本补发:钻石300,快速探险券30 + * */ +async function zuozhantequan() { + let w = { + key: "zuozhantequan", + patch: {$exists: false}, + del_time: {$exists: false} + }; + let users = (await G.mongodb.collection("payLogNew").find(w).toArray()).filter( + // 过滤没有结束时间 或者 有结束时间 但是没有过期的 + (pay) => pay.values?.length > 0 && (!pay.values.slice(-1)[0].eTime || pay.values.slice(-1)[0].eTime > G.time) + ); + + let uid2Prize: { [uid: string]: { a: string, t: string, n: number }[] } = {}; + users.forEach(user => { + let uid = user.uid; + + if (!uid2Prize[uid]) uid2Prize[uid] = []; + uid2Prize[uid].push({"a": "item", "t": "24", "n": 30}); + uid2Prize[uid].push({"a": "attr", "t": "rmbmoney", "n": 300}); + }); + + let title = "作战特权优化"; + let content = "这是您的补偿,请查收!"; + let lngTitle = { + "ja": "作戦特権仕様改善", + "zh-TW": "作戰特權改善", + "ko": "작전 특권 시스템 개선", + "en": "Strategy Benefit optimization", + }; + let lngContent = { + "en": "Please find attached a few items as a compensation for the wait during our adjustments.", + "ja": "仕様改善に伴う補填を発送させていただきました。ご確認ください。", + "ko": "투자 시스템 개선으로 인한 보상을 보내드립니다.", + "zh-TW": "這是您的補償內容,煩請查收!" + }; + for (const [uid, sendPrize] of Object.entries(uid2Prize)) { + // 发放邮件 + await addEmail({ + uid: uid, + type: "system", + title: title, + content: content, + prize: sendPrize, + lngTitle: lngTitle, + lngContent: lngContent, + }); + await G.mongodb.collection("payLogNew").updateMany( + Object.assign({uid: uid}, w), {$set: {patch: 1}} + ) + + console.log(`玩家${uid}特权奖励补发完成...`); + } +} + +/** + "caifutequan" + 标题:资产特权优化 + ja:資産特権仕様改善 + zh-TW:資産特權改善 + ko:자산 특권 시스템 개선 + en: Asset Benefit optimization + + 內文:这是您的补偿,请查收! + ja:仕様改善に伴う補填を発送させていただきました。ご確認ください。 + zh-TW:這是您的補償內容,煩請查收! + ko:투자 시스템 개선으로 인한 보상을 보내드립니다. + en: Please find attached a few items as a compensation for the wait during our adjustments. + + 线上玩家脚本 + 1、特权内容:已购买特权的玩家,特权效果更新,不重置时间 + 2、已购买资产特权的玩家,脚本补发:钻石*300,美金*1000万 + * */ +async function caifutequan() { + let w = { + key: "caifutequan", + patch: {$exists: false}, + del_time: {$exists: false} + }; + let users = (await G.mongodb.collection("payLogNew").find(w).toArray()).filter( + // 过滤没有结束时间 或者 有结束时间 但是没有过期的 + (pay) => pay.values?.length > 0 && (!pay.values.slice(-1)[0].eTime || pay.values.slice(-1)[0].eTime > G.time) + ); + + let uid2Prize: { [uid: string]: { a: string, t: string, n: number }[] } = {}; + users.forEach(user => { + let uid = user.uid; + + if (!uid2Prize[uid]) uid2Prize[uid] = []; + uid2Prize[uid].push({"a": "attr", "t": "rmbmoney", "n": 300}) + uid2Prize[uid].push({"a": "attr", "t": "jinbi", "n": 10000000}) + }); + + let title = "资产特权优化"; + let content = "这是您的补偿,请查收!"; + let lngTitle = { + "ja": "資産特権仕様改善", + "zh-TW": "資産特權改善", + "ko": "자산 특권 시스템 개선", + "en": "Asset Benefit optimization", + }; + let lngContent = { + "en": "Please find attached a few items as a compensation for the wait during our adjustments.", + "ja": "仕様改善に伴う補填を発送させていただきました。ご確認ください。", + "ko": "투자 시스템 개선으로 인한 보상을 보내드립니다.", + "zh-TW": "這是您的補償內容,煩請查收!" + }; + for (const [uid, sendPrize] of Object.entries(uid2Prize)) { + // 发放邮件 + await addEmail({ + uid: uid, + type: "system", + title: title, + content: content, + prize: sendPrize, + lngTitle: lngTitle, + lngContent: lngContent, + }); + await G.mongodb.collection("payLogNew").updateMany( + Object.assign({uid: uid}, w), {$set: {patch: 1}} + ) + + console.log(`玩家${uid}资产特权奖励补发完成...`); + } +} + +/** + "jiubatequan" + 标题:抽奖特权优化 + ja:ガチャ特権仕様改善 + zh-TW:抽獎特權改善 + ko:모집 특권 시스템 개선 + en: Gacha Benefit optimization + + 內文:这是您的补偿,请查收! + ja:仕様改善に伴う補填を発送させていただきました。ご確認ください。 + zh-TW:這是您的補償內容,煩請查收! + ko:투자 시스템 개선으로 인한 보상을 보내드립니다. + en: Please find attached a few items as a compensation for the wait during our adjustments. + + 线上玩家脚本 + 1、特权内容:已购买特权的玩家,特权效果更新,不重置时间 + 2、已购买抽奖特权的玩家,脚本补发:钻石*680,招募卡*10 + * */ +async function jiubatequan() { + let w = { + key: "jiubatequan", + patch: {$exists: false}, + del_time: {$exists: false} + }; + let users = (await G.mongodb.collection("payLogNew").find(w).toArray()).filter( + // 过滤没有结束时间 或者 有结束时间 但是没有过期的 + (pay) => pay.values?.length > 0 && (!pay.values.slice(-1)[0].eTime || pay.values.slice(-1)[0].eTime > G.time) + ); + + let uid2Prize: { [uid: string]: { a: string, t: string, n: number }[] } = {}; + users.forEach(user => { + let uid = user.uid; + + if (!uid2Prize[uid]) uid2Prize[uid] = []; + uid2Prize[uid].push({"a": "item", "t": "4", "n": 10}); + uid2Prize[uid].push({"a": "attr", "t": "rmbmoney", "n": 680}); + }); + + let title = "抽奖特权优化"; + let content = "这是您的补偿,请查收!"; + let lngTitle = { + "ja": "ガチャ特権仕様改善", + "zh-TW": "抽獎特權改善", + "ko": "모집 특권 시스템 개선", + "en": "Gacha Benefit optimization", + }; + let lngContent = { + "en": "Please find attached a few items as a compensation for the wait during our adjustments.", + "ja": "仕様改善に伴う補填を発送させていただきました。ご確認ください。", + "ko": "투자 시스템 개선으로 인한 보상을 보내드립니다.", + "zh-TW": "這是您的補償內容,煩請查收!" + }; + for (const [uid, sendPrize] of Object.entries(uid2Prize)) { + // 发放邮件 + await addEmail({ + uid: uid, + type: "system", + title: title, + content: content, + prize: sendPrize, + lngTitle: lngTitle, + lngContent: lngContent, + }); + await G.mongodb.collection("payLogNew").updateMany( + Object.assign({uid: uid}, w), {$set: {patch: 1}} + ) + + console.log(`玩家${uid}抽奖特权奖励补发完成...`); + } +} + +/** + 不需要给玩家发送邮件 + + 线上玩家脚本 + 刷新所有玩家各档位VIP礼包到未购买状态 + **/ +async function resetVipLiBao() { + await G.mongodb.cPlayerInfo("chongzhi").updateMany( + {type: 'chongzhi'}, {$set: {giftBy: {}}} + ) +} + + +/** + 人才计划调整 + 1、线上已有该活动的玩家,保留次数进度;达到新加档位可领取的奖励则直接领取 + **/ +async function rcjhReSet() { + const hdid = [100, 101]; + const task = { + '2001': { + 'prize': [{'a': 'item', 't': '4', 'n': 5}, {'a': 'item', 't': '626', 'n': 10}], + 'tujing': '', + 'title': 'intr_yczm_day_des_2', + 'type': 2, + 'pval': 50, + 'cond': [], + 'stype': 118 + }, + '2002': { + 'prize': [{'a': 'item', 't': '4', 'n': 5}, {'a': 'item', 't': '626', 'n': 10}], + 'tujing': '', + 'title': 'intr_yczm_day_des_2', + 'type': 2, + 'pval': 100, + 'cond': [], + 'stype': 118 + }, + '2003': { + 'prize': [{'a': 'item', 't': '4', 'n': 10}, {'a': 'item', 't': '626', 'n': 20}], + 'tujing': '', + 'title': 'intr_yczm_day_des_2', + 'type': 2, + 'pval': 200, + 'cond': [], + 'stype': 118 + }, + '2004': { + 'prize': [{'a': 'item', 't': '4', 'n': 10}, {'a': 'item', 't': '600', 'n': 20}], + 'tujing': '', + 'title': 'intr_yczm_day_des_2', + 'type': 2, + 'pval': 250, + 'cond': [], + 'stype': 118 + }, + '2005': { + 'prize': [{'a': 'item', 't': '4', 'n': 10}, {'a': 'item', 't': '600', 'n': 20}], + 'tujing': '', + 'title': 'intr_yczm_day_des_2', + 'type': 2, + 'pval': 300, + 'cond': [], + 'stype': 118 + }, + '2006': { + 'prize': [{'a': 'item', 't': '4', 'n': 10}, {'a': 'item', 't': '619', 'n': 1}], + 'tujing': '', + 'title': 'intr_yczm_day_des_2', + 'type': 2, + 'pval': 400, + 'cond': [], + 'stype': 118 + }, + '2007': { + 'prize': [{'a': 'item', 't': '4', 'n': 10}, {'a': 'item', 't': '619', 'n': 1}], + 'tujing': '', + 'title': 'intr_yczm_day_des_2', + 'type': 2, + 'pval': 500, + 'cond': [], + 'stype': 118 + } + }; + // 中间插入了2004 所以之前的任务id一次往后顺延 + const change = {2004: 2005, 2005: 2006, 2006: 2007}; + // 刷新活动配置 + await G.mongodb.collection("hdinfo").updateOne({hdid: {$in: hdid}}, { + "$set": {'data.tasklist.2': task} + }) + + let datas: yangchengmubiao[] = []; + // 刷新玩家领取记录 + datas = datas.concat(await G.mongodb.cEvent(`yangchengmubiao${hdid[0]}`).find( + {type: `yangchengmubiao${hdid[0]}`} + ).toArray()); + datas = datas.concat(await G.mongodb.cEvent(`yangchengmubiao${hdid[1]}`).find( + {type: `yangchengmubiao${hdid[1]}`} + ).toArray()); + for (let i = 0; i < datas.length; i++) { + let data = datas[i]; + let finished = data.finishid["2"].map((task) => { + return change[task] ? change[task] : task + }); + let maxtaskval = Math.max(...Object.values(data.taskval)); + let taskval = Object.assign(Object.keys(task).map((taskid) => { + return {[taskid]: maxtaskval} + })); + await G.mongodb.collection("event").updateOne( + {uid: data.uid, type: data.type}, {$set: {taskval: taskval, "finishid.2": finished}} + ) + console.log(`修复玩家${data.uid}人才计划数据完成...`); + } +} + + +/** + * 标题:等级基金优化 + * ja:レベル投資仕様改善 + * zh-TW:等級基金改善 + * ko:레벨 투자 시스템 개선 + * en: Level Investment optimization + + * 內文: + * 这是您的补偿,请查收! + * ja:仕様改善に伴う補填を発送させていただきました。ご確認ください。 + * zh-TW:這是您的補償內容,煩請查收! + * ko:투자 시스템 개선으로 인한 보상을 보내드립니다. + * en: Please find attached a few items as a compensation for the wait during our adjustments. + + * 线上玩家脚本 + * 1、已购买等级基金的玩家且未领取完成的玩家,剩余奖励邮件一次性补发; + * 2、未购买的玩家活动刷新到新版本; + * 3、刷新等级基金到未购买状态; + */ +async function dengjiJiJinReSet() { + let w = {key: "dengjijijin", del_time: {$exists: false}} + // 激活了的玩家 + let _payList = (await G.mongodb.collection("payLogNew").find(w).toArray()).filter( + // 过滤没有结束时间 或者 有结束时间 但是没有过期的 + (pay) => pay.values?.length > 0 && (!pay.values.slice(-1)[0].eTime || pay.values.slice(-1)[0].eTime > G.time) + ); + + const prizeList = [ + { + "type": "dengjijijin", + "total": 20, + "pt": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 300 + } + ], + "tq": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 1700 + } + ] + }, + { + "type": "dengjijijin", + "total": 25, + "pt": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 300 + } + ], + "tq": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 1700 + } + ] + }, + { + "type": "dengjijijin", + "total": 30, + "pt": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 300 + } + ], + "tq": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 1700 + } + ] + }, + + { + "type": "dengjijijin", + "total": 35, + "pt": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 300 + } + ], + "tq": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 1700 + } + ] + }, + { + "type": "dengjijijin", + "total": 40, + "pt": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 300 + } + ], + "tq": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 1700 + } + ] + }, + { + "type": "dengjijijin", + "total": 45, + "pt": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 300 + } + ], + "tq": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 1700 + } + ] + }, + + { + "type": "dengjijijin", + "total": 50, + "pt": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 300 + } + ], + "tq": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 1700 + } + ] + }, + { + "type": "dengjijijin", + "total": 55, + "pt": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 300 + } + ], + "tq": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 1700 + } + ] + } + ]; + let _users = await G.mongodb.cEvent("dengjijijin").find( + {"uid": {"$in": _payList.map(pay => pay.uid)}, type: 'dengjijijin'} + ).toArray() + + let uid2Prize: { [uid: string]: { a: string, t: string, n: number }[] } = {}; + _users.forEach((user) => { + let uid = user.uid; + let idx2Type2Bool = user.rec; + if (!uid2Prize[uid]) uid2Prize[uid] = []; + + // 没领的全发 + prizeList.forEach((con, idx) => { + // 普通奖励没领 + if (!idx2Type2Bool[idx]?.pt) { + uid2Prize[uid].push(...con.pt) + } + // 高级奖励没领 + if (!idx2Type2Bool[idx]?.tq) { + uid2Prize[uid].push(...con.tq) + } + }); + }) + + let title = "等级基金优化"; + let content = "这是您的补偿,请查收!"; + let lngTitle = { + "ja": "レベル投資仕様改善", + "zh-TW": "等級基金改善", + "ko": "레벨 투자 시스템 개선", + "en": "Level Investment optimization", + }; + let lngContent = { + "en": "Please find attached a few items as a compensation for the wait during our adjustments.", + "ja": "仕様改善に伴う補填を発送させていただきました。ご確認ください。", + "ko": "투자 시스템 개선으로 인한 보상을 보내드립니다.", + "zh-TW": "這是您的補償內容,煩請查收!" + }; + for (const [uid, sendPrize] of Object.entries(uid2Prize)) { + // 发放邮件 + await addEmail({ + uid: uid, + type: "system", + title: title, + content: content, + prize: sendPrize, + lngTitle: lngTitle, + lngContent: lngContent, + }); + await G.mongodb.collection("payLogNew").updateMany( + Object.assign({uid: uid}, w), {$set: {patch: 1, del_time: G.time}} + ) + // 基金数据清除 + await G.mongodb.collection("event").updateMany( + {type: "dengjijijin", uid: uid}, {"$set": {uid: `${uid}_patch_del`}} + ); + console.log(`玩家${uid}等级基金奖补发完成...`); + } +} + + +/** + * 标题:关卡基金优化 + * ja:ステージ投資仕様改善 + * zh-TW:關卡基金改善 + * ko:스테이지 투자 시스템 개선 + * en: Stage Investment optimization + * + * 內文:这是您的补偿,请查收! + * ja:仕様改善に伴う補填を発送させていただきました。ご確認ください。 + * zh-TW:這是您的補償內容,煩請查收! + * ko:투자 시스템 개선으로 인한 보상을 보내드립니다. + * en: Please find attached a few items as a compensation for the wait during our adjustments. + + * 线上玩家脚本 + * 1、已购买关卡基金的玩家且未领取完成的玩家,剩余奖励邮件一次性补发; + * 2、未购买的玩家活动刷新到新版本; + * 3、刷新关卡基金到未购买状态; + * */ +async function guanqiaJiJinReSet() { + let w = {key: "guanqiajijin"}; + // 激活了的玩家 + let _payList = (await G.mongodb.collection("payLogNew").find(w).toArray()).filter( + // 过滤没有结束时间 或者 有结束时间 但是没有过期的 + (pay) => pay.values?.length > 0 && (!pay.values.slice(-1)[0].eTime || pay.values.slice(-1)[0].eTime > G.time) + ); + + const prizeList = [ + { + "type": "guanqiajijin", + "total": 30, + "pt": [], + "tq": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 2000 + } + ], + "des": "guanqiajijin_des_1" + }, + { + "type": "guanqiajijin", + "total": 50, + "pt": [], + "tq": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 2000 + } + ], + "des": "guanqiajijin_des_2" + }, + { + "type": "guanqiajijin", + "total": 70, + "pt": [], + "tq": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 2000 + } + ], + "des": "guanqiajijin_des_3" + }, + { + "type": "guanqiajijin", + "total": 90, + "pt": [], + "tq": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 2000 + } + ], + "des": "guanqiajijin_des_4" + }, + { + "type": "guanqiajijin", + "total": 110, + "pt": [], + "tq": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 2000 + } + ], + "des": "guanqiajijin_des_5" + }, + { + "type": "guanqiajijin", + "total": 150, + "pt": [], + "tq": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 2000 + } + ], + "des": "guanqiajijin_des_6" + }, + { + "type": "guanqiajijin", + "total": 180, + "pt": [], + "tq": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 2000 + } + ], + "des": "guanqiajijin_des_7" + }, + { + "type": "guanqiajijin", + "total": 250, + "pt": [], + "tq": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 2000 + } + ], + "des": "guanqiajijin_des_8" + } + ]; + + // 没激活不处理 + let _users = await G.mongodb.cEvent("guanqiajijin").find( + { + "uid": {"$in": _payList.map(pay => pay.uid)}, + "type": 'guanqiajijin' + }, + {projection: {_id: 0}} + ).toArray(); + + let uid2Prize: { [uid: string]: { a: string, t: string, n: number }[] } = {}; + _users.forEach(user => { + let uid = user.uid; + let idx2Type2Bool = user.rec; + if (!uid2Prize[uid]) uid2Prize[uid] = []; + + // 没领的全发 + prizeList.forEach((con, idx) => { + // 普通奖励没领 + if (!idx2Type2Bool[idx]?.pt) { + uid2Prize[uid].push(...con.pt) + } + // 高级奖励没领 + if (!idx2Type2Bool[idx]?.tq) { + uid2Prize[uid].push(...con.tq) + } + }); + }) + + let title = "关卡基金优化"; + let content = "这是您的补偿,请查收!"; + let lngTitle = { + "ja": "ステージ投資仕様改善", + "zh-TW": "關卡基金改善", + "ko": "스테이지 투자 시스템 개선", + "en": "Stage Investment optimization", + }; + let lngContent = { + "en": "Please find attached a few items as a compensation for the wait during our adjustments.", + "ja": "仕様改善に伴う補填を発送させていただきました。ご確認ください。", + "ko": "투자 시스템 개선으로 인한 보상을 보내드립니다.", + "zh-TW": "這是您的補償內容,煩請查收!" + }; + for (const [uid, sendPrize] of Object.entries(uid2Prize)) { + // 发放邮件 + await addEmail({ + uid: uid, + type: "system", + title: title, + content: content, + prize: sendPrize, + lngTitle: lngTitle, + lngContent: lngContent, + }); + await G.mongodb.collection("payLogNew").updateMany( + Object.assign({uid: uid}, w), {$set: {patch: 1, del_time: G.time}} + ) + // 基金数据清除 + await G.mongodb.collection("event").updateMany( + {type: "guanqiajijin", uid: uid}, {"$set": {uid: `${uid}_patch_del`}} + ); + console.log(`玩家${uid}关卡基金奖补发完成...`); + } +} + + +/** + * 标题:特别通行证优化 + * ja:特別通行証仕様改善 + * zh-TW:特別通行證改善 + * ko:특별 통행증 시스템 개선 + * en: Special Permit optimization + + * 內文:这是您的补偿,请查收! + * ja:仕様改善に伴う補填を発送させていただきました。ご確認ください。 + * zh-TW:這是您的補償內容,煩請查收! + * ko:투자 시스템 개선으로 인한 보상을 보내드립니다. + * en: Please find attached a few items as a compensation for the wait during our adjustments. + + * 线上玩家脚本 + * 1、已购买通行证基金的玩家且未领取完成的玩家,剩余奖励邮件一次性补发; + * 2、未购买的玩家活动刷新到新版本; + * 3、刷新通行证基金到未购买状态; + * */ +async function dayjiJiJinReSet() { + let w = {key: "dayjijin"}; + + // 激活了的玩家 + let _payList = (await G.mongodb.collection("payLogNew").find(w).toArray()).filter( + // 过滤没有结束时间 或者 有结束时间 但是没有过期的 + (pay) => pay.values?.length > 0 && (!pay.values.slice(-1)[0].eTime || pay.values.slice(-1)[0].eTime > G.time) + ); + + const prizeList = [ + { + "type": "dayjijin", + "total": 5, + "pt": [ + { + "a": "item", + "t": "23", + "n": 20000 + } + ], + "tq": [ + { + "a": "item", + "t": "4", + "n": 5 + } + ] + }, + { + "type": "dayjijin", + "total": 15, + "pt": [ + { + "a": "item", + "t": "2", + "n": 200 + } + ], + "tq": [ + { + "a": "item", + "t": "2", + "n": 2000 + } + ] + }, + { + "type": "dayjijin", + "total": 30, + "pt": [ + { + "a": "item", + "t": "23", + "n": 20000 + } + ], + "tq": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 888 + } + ] + }, + { + "type": "dayjijin", + "total": 45, + "pt": [ + { + "a": "item", + "t": "2", + "n": 200 + } + ], + "tq": [ + { + "a": "item", + "t": "615", + "n": 1 + } + ] + }, + { + "type": "dayjijin", + "total": 60, + "pt": [ + { + "a": "item", + "t": "23", + "n": 20000 + } + ], + "tq": [ + { + "a": "item", + "t": "4", + "n": 5 + } + ] + }, + { + "type": "dayjijin", + "total": 75, + "pt": [ + { + "a": "item", + "t": "2", + "n": 300 + } + ], + "tq": [ + { + "a": "item", + "t": "2", + "n": 2000 + } + ] + }, + { + "type": "dayjijin", + "total": 90, + "pt": [ + { + "a": "item", + "t": "23", + "n": 20000 + } + ], + "tq": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 888 + } + ] + }, + { + "type": "dayjijin", + "total": 105, + "pt": [ + { + "a": "item", + "t": "2", + "n": 300 + } + ], + "tq": [ + { + "a": "item", + "t": "615", + "n": 1 + } + ] + }, + { + "type": "dayjijin", + "total": 120, + "pt": [ + { + "a": "item", + "t": "23", + "n": 20000 + } + ], + "tq": [ + { + "a": "item", + "t": "4", + "n": 5 + } + ] + }, + { + "type": "dayjijin", + "total": 135, + "pt": [ + { + "a": "item", + "t": "2", + "n": 400 + } + ], + "tq": [ + { + "a": "item", + "t": "2", + "n": 2000 + } + ] + }, + { + "type": "dayjijin", + "total": 150, + "pt": [ + { + "a": "item", + "t": "23", + "n": 20000 + } + ], + "tq": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 888 + } + ] + }, + { + "type": "dayjijin", + "total": 165, + "pt": [ + { + "a": "item", + "t": "2", + "n": 400 + } + ], + "tq": [ + { + "a": "item", + "t": "615", + "n": 1 + } + ] + }, + { + "type": "dayjijin", + "total": 180, + "pt": [ + { + "a": "item", + "t": "23", + "n": 20000 + } + ], + "tq": [ + { + "a": "item", + "t": "4", + "n": 5 + } + ] + }, + { + "type": "dayjijin", + "total": 200, + "pt": [ + { + "a": "item", + "t": "2", + "n": 500 + } + ], + "tq": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 1888 + } + ] + } + ]; + // 没激活不处理 + let _users = await G.mongodb.cEvent("dayjijin").find( + {uid: {$in: _payList.map(pay => pay.uid)}, type: "dayjijin"} + ).toArray(); + + let uid2Prize: { [uid: string]: { a: string, t: string, n: number }[] } = {}; + _users.forEach(user => { + let uid = user.uid; + let idx2Type2Bool = user.rec; + if (!uid2Prize[uid]) uid2Prize[uid] = []; + + // 没领的全发 + prizeList.forEach((con, idx) => { + // 普通奖励没领 + if (!idx2Type2Bool[idx]?.pt) { + uid2Prize[uid].push(...con.pt) + } + // 高级奖励没领 + if (!idx2Type2Bool[idx]?.tq) { + uid2Prize[uid].push(...con.tq) + } + }); + }) + + let title = "特别通行证优化"; + let content = "这是您的补偿,请查收!"; + let lngTitle = { + "ja": "特別通行証仕様改善", + "zh-TW": "特別通行證改善", + "ko": "특별 통행증 시스템 개선", + "en": "Special Permit optimization", + }; + let lngContent = { + "en": "Please find attached a few items as a compensation for the wait during our adjustments.", + "ja": "仕様改善に伴う補填を発送させていただきました。ご確認ください。", + "ko": "투자 시스템 개선으로 인한 보상을 보내드립니다.", + "zh-TW": "這是您的補償內容,煩請查收!" + }; + for (const [uid, sendPrize] of Object.entries(uid2Prize)) { + // 发放邮件 + await addEmail({ + uid: uid, + type: "system", + title: title, + content: content, + prize: sendPrize, + lngTitle: lngTitle, + lngContent: lngContent, + }); + await G.mongodb.collection("payLogNew").updateMany( + Object.assign({uid: uid}, w), {$set: {patch: 1, del_time: G.time}} + ) + // 基金数据清除 + await G.mongodb.collection("event").updateMany( + {type: "dayjijin", uid: uid}, {"$set": {uid: `${uid}_patch_del`}} + ); + + console.log(`玩家${uid}通行证基金奖补发完成...`); + } +} + +/** + * 标题:特价基金优化 + * ja:特価投資仕様改善 + * zh-TW:特價基金改善 + * ko:특가 투자 시스템 개선 + * en: Value Investment optimization + + * 內文:这是您的补偿,请查收! + * ja:仕様改善に伴う補填を発送させていただきました。ご確認ください。 + * zh-TW:這是您的補償內容,煩請查收! + * ko:투자 시스템 개선으로 인한 보상을 보내드립니다. + * en: Please find attached a few items as a compensation for the wait during our adjustments. + + * 线上玩家脚本 + * 1、已购买特价基金128的玩家且未领取完成的玩家,剩余奖励邮件一次性补发; + * 2、未购买的玩家活动刷新到新版本; + * 3、刷新月基金到未购买状态; + * */ +async function yue128JiJinReSet() { + let w = {key: "128jijin"}; + // 激活了的玩家 + let _payList = (await G.mongodb.collection("payLogNew").find(w).toArray()).filter( + // 过滤没有结束时间 或者 有结束时间 但是没有过期的 + (pay) => pay.values?.length > 0 && (!pay.values.slice(-1)[0].eTime || pay.values.slice(-1)[0].eTime > G.time) + ); + + // 没激活不处理 + let _users = await G.mongodb.cEvent(`${128}jijin`).find( + { + "uid": {"$in": _payList.map(pay => pay.uid)}, + "type": `${128}jijin` + } + ).toArray(); + + const prizeList = [ + {a: 'item', t: '4', n: 10}, + {a: 'attr', t: 'rmbmoney', n: 300}, + {a: 'attr', t: 'rmbmoney', n: 300}, + {a: 'item', t: '9', n: 2000}, + {a: 'attr', t: 'rmbmoney', n: 300}, + {a: 'attr', t: 'rmbmoney', n: 300}, + {a: 'item', t: '609', n: 1}, + {a: 'item', t: '4', n: 10}, + {a: 'attr', t: 'rmbmoney', n: 500}, + {a: 'attr', t: 'rmbmoney', n: 300}, + {a: 'item', t: '18', n: 300}, + {a: 'attr', t: 'rmbmoney', n: 300}, + {a: 'attr', t: 'rmbmoney', n: 300}, + {a: 'item', t: '6', n: 20}, + {a: 'attr', t: 'rmbmoney', n: 300}, + {a: 'attr', t: 'rmbmoney', n: 300}, + {a: 'item', t: '9', n: 3000}, + {a: 'attr', t: 'rmbmoney', n: 300}, + {a: 'attr', t: 'rmbmoney', n: 300}, + {a: 'item', t: '4', n: 10}, + {a: 'attr', t: 'rmbmoney', n: 500}, + {a: 'attr', t: 'rmbmoney', n: 300}, + {a: 'item', t: '20', n: 200}, + {a: 'attr', t: 'rmbmoney', n: 300}, + {a: 'attr', t: 'rmbmoney', n: 300}, + {a: 'item', t: '9', n: 3000}, + {a: 'attr', t: 'rmbmoney', n: 300}, + {a: 'attr', t: 'rmbmoney', n: 300}, + {a: 'attr', t: 'rmbmoney', n: 1000}, + {a: 'item', t: '628', n: 1}, + ]; + let uid2Prize: { [uid: string]: { a: string, t: string, n: number }[] } = {}; + + _users.forEach(user => { + let uid = user.uid; + let gotarr = user.rec || []; + if (!uid2Prize[uid]) uid2Prize[uid] = []; + + // 没领的全发 + prizeList.forEach((onePrize, idx) => { + // 领过了 + if (gotarr.includes(idx)) { + return + } + uid2Prize[uid].push(onePrize) + }); + }) + + let title = "特价基金优化"; + let content = "这是您的补偿,请查收!"; + let lngTitle = { + "ja": "特価投資仕様改善", + "zh-TW": "特價基金改善", + "ko": "특가 투자 시스템 개선", + "en": "Value Investment optimization", + }; + let lngContent = { + "en": "Please find attached a few items as a compensation for the wait during our adjustments.", + "ja": "仕様改善に伴う補填を発送させていただきました。ご確認ください。", + "ko": "투자 시스템 개선으로 인한 보상을 보내드립니다.", + "zh-TW": "這是您的補償內容,煩請查收!" + }; + for (const [uid, sendPrize] of Object.entries(uid2Prize)) { + // 发放邮件 + await addEmail({ + uid: uid, + type: "system", + title: title, + content: content, + prize: sendPrize, + lngTitle: lngTitle, + lngContent: lngContent, + }); + + await G.mongodb.collection("payLogNew").updateMany( + Object.assign({uid: uid}, w), {$set: {patch: 1, del_time: G.time}} + ) + // 基金数据清除 + await G.mongodb.cEvent(`${128}jijin`).updateMany( + {uid: uid, type: `${128}jijin`}, {"$set": {uid: `${uid}_patch_del`}} + ); + + console.log(`玩家${uid}月度128基金奖补发完成...`); + } +} + +/** + * 标题:特别基金优化 + * ja:特別投資仕様改善 + * zh-TW:特別基金改善 + * ko:특별 투자 시스템 개선 + * en: Special Investment optimization + + * 內文:这是您的补偿,请查收! + * ja:仕様改善に伴う補填を発送させていただきました。ご確認ください。 + * zh-TW:這是您的補償內容,煩請查收! + * ko:투자 시스템 개선으로 인한 보상을 보내드립니다. + * en: Please find attached a few items as a compensation for the wait during our adjustments. + + * 线上玩家脚本 + * 1、已购买特别基金328的玩家且未领取完成的玩家,剩余奖励邮件一次性补发; + * 2、未购买的玩家活动刷新到新版本; + * 3、刷新月基金到未购买状态; + * */ +async function yue328JiJinReSet() { + let w = {key: "328jijin"}; + // 激活了的玩家 + let _payList = (await G.mongodb.collection("payLogNew").find(w).toArray()).filter( + // 过滤没有结束时间 或者 有结束时间 但是没有过期的 + (pay) => pay.values?.length > 0 && (!pay.values.slice(-1)[0].eTime || pay.values.slice(-1)[0].eTime > G.time) + ); + + // 没激活不处理 + let _users = await G.mongodb.cEvent(`${328}jijin`).find( + { + "uid": {"$in": _payList.map(pay => pay.uid)}, "type": `${328}jijin` + } + ).toArray(); + + const prizeList = [ + {a: 'item', t: '4', n: 30}, + {a: 'attr', t: 'rmbmoney', n: 800}, + {a: 'attr', t: 'rmbmoney', n: 800}, + {a: 'item', t: '10', n: 300}, + {a: 'attr', t: 'rmbmoney', n: 800}, + {a: 'attr', t: 'rmbmoney', n: 800}, + {a: 'item', t: '628', n: 1}, + {a: 'item', t: '4', n: 20}, + {a: 'attr', t: 'rmbmoney', n: 800}, + {a: 'attr', t: 'rmbmoney', n: 800}, + {a: 'item', t: '628', n: 1}, + {a: 'attr', t: 'rmbmoney', n: 800}, + {a: 'attr', t: 'rmbmoney', n: 800}, + {a: 'item', t: '628', n: 1}, + {a: 'attr', t: 'rmbmoney', n: 800}, + {a: 'attr', t: 'rmbmoney', n: 800}, + {a: 'item', t: '628', n: 1}, + {a: 'attr', t: 'rmbmoney', n: 800}, + {a: 'attr', t: 'rmbmoney', n: 800}, + {a: 'item', t: '4', n: 20}, + {a: 'attr', t: 'rmbmoney', n: 800}, + {a: 'attr', t: 'rmbmoney', n: 800}, + {a: 'item', t: '10', n: 400}, + {a: 'attr', t: 'rmbmoney', n: 800}, + {a: 'attr', t: 'rmbmoney', n: 800}, + {a: 'item', t: '10', n: 400}, + {a: 'attr', t: 'rmbmoney', n: 800}, + {a: 'attr', t: 'rmbmoney', n: 800}, + {a: 'attr', t: 'rmbmoney', n: 1500}, + {a: 'item', t: '617', n: 1}, + ]; + let uid2Prize: { [uid: string]: { a: string, t: string, n: number }[] } = {}; + + _users.forEach(user => { + let uid = user.uid; + let gotarr = user.rec || []; + if (!uid2Prize[uid]) uid2Prize[uid] = []; + + // 没领的全发 + prizeList.forEach((onePrize, idx) => { + // 领过了 + if (gotarr.includes(idx)) { + return + } + uid2Prize[uid].push(onePrize) + }); + }) + + let title = "特别基金优化"; + let content = "这是您的补偿,请查收!"; + let lngTitle = { + "ja": "特別投資仕様改善", + "zh-TW": "特別基金改善", + "ko": "특별 투자 시스템 개선", + "en": "Special Investment optimization", + }; + let lngContent = { + "en": "Please find attached a few items as a compensation for the wait during our adjustments.", + "ja": "仕様改善に伴う補填を発送させていただきました。ご確認ください。", + "ko": "투자 시스템 개선으로 인한 보상을 보내드립니다.", + "zh-TW": "這是您的補償內容,煩請查收!" + }; + for (const [uid, sendPrize] of Object.entries(uid2Prize)) { + // 发放邮件 + await addEmail({ + uid: uid, + type: "system", + title: title, + content: content, + prize: sendPrize, + lngTitle: lngTitle, + lngContent: lngContent, + }); + + await G.mongodb.collection("payLogNew").updateMany( + Object.assign({uid: uid}, w), {$set: {patch: 1, del_time: G.time}} + ) + // 基金数据清除 + await G.mongodb.cEvent(`${328}jijin`).updateMany( + {uid: uid, type: `${328}jijin`}, {"$set": {uid: `${uid}_patch_del`}} + ); + + console.log(`玩家${uid}月度128基金奖补发完成...`); + } +} + +async function start() { + await initMongoDB(); + + await shouChongReSet(); + await zhizunyueka(); + await chaozhiyueka(); + await zhongshenka(); + + await qingbaotequan(); + await zuozhantequan(); + await caifutequan(); + await jiubatequan(); + + await resetVipLiBao(); + + await rcjhReSet(); + + await dengjiJiJinReSet(); + await guanqiaJiJinReSet(); + + await dayjiJiJinReSet(); + + await yue128JiJinReSet(); + await yue328JiJinReSet(); +} + +ctor(); +start().then(() => { + setInterval(() => { + console.log(new Date().format("MM-dd hh:mm:ss")); + }, 1000) + console.log("逻辑执行完成...等待退出!!!"); +}); + +