import {ApiCall, ApiReturn} from "tsrpc"; import {HongDianChange} from "../api_s2c/hongdian/fun"; import {taskType} from "../shared/protocols/task/type"; import {PublicShared} from "../shared/public/public"; import {PeijianFun} from "./peijian"; import {manager} from "./taskclass"; let taskDict = {}; const SHUJUKU = "task"; export class TaskFun { /**获取所有任务stype 注册监听使用 */ static async getStypes() { let _con = G.gc.task; let _r = []; for (let index = 0; index < Object.keys(_con).length; index++) { const element = _con[Object.keys(_con)[index]]; let _values = Object.values(element); _values.forEach(ele => { if (_r.indexOf(ele["stype"]) == -1) { _r.push(ele["stype"]); } }); } return _r; } static async addeventHanshu(index) { let _name = "Class_task_" + index; if (taskDict[_name]) return 1; let _tmp; try { _tmp = new (manager)[_name](); } catch { return 0; } taskDict[index] = _tmp; return 2; } /**注册监听 */ static async addevent() { let _stypes = [1, 999, 100, 101, 102, 103, 104, 105]; for (let index = 0; index < _stypes.length; index++) { const element = _stypes[index]; let _tmp = await this.addeventHanshu(element); } for (let index = 106; index < 900; index++) { let _tmp = await this.addeventHanshu(index); if (_tmp != 2) break; } } /** * * @param type 任务类型 * @returns 相关类型任务的所有配置 */ static async getTaskConsByType(type: number) { let _taskCon: {}; try { _taskCon = G.gc.task[type]; } catch { _taskCon = {}; console.log(`====== task type getcon error task >>> >>> ${type}`); } return _taskCon; } /** * * @param type * @param taskid * @returns 获取任务配置 */ static async getTaskConByType(type: number, taskid: number) { let _taskCon: {}; try { _taskCon = G.gc.task[type][taskid]; } catch { _taskCon = {}; console.log(`====== task getcon error taskid >>> >>> ${taskid}`); } return _taskCon; } /** * * @param uid * @param stype 任务stype * @param val 任务完成值 * @param chkCall 检测回调 * @param chkval 任务条件检测值 * @param isinc 是否累加 * 设置某种任务类型的nval */ static async setTaskVal(call: ApiCall, stype: number, val: number, chkCall: Function, chkval: number = 0, isinc: number = 0, alchangeVal: Function, arg) { let uid = call.uid; // let _unFinish = await this.getFinishByStype(call, stype, { finish: 0, "$where": "return this.pval > this.nval" }); //let _unFinish = await this.getFinishByStype(call, stype, {finish: 0}); //_unFinish = _unFinish.filter(x => x.pval > x.nval) let _unFinish = await this.getFinishByStype(call, stype, { finish: 0, '$expr': { $gt: ["$pval", "$nval"] } }); if (_unFinish.length == 0) return; for (let index = 0; index < _unFinish.length; index++) { const _task = _unFinish[index]; let _taskCon = await this.getTaskConByType(_task["type"], _task["taskid"]); if (!_taskCon || Object.keys(_taskCon).length == 0) { // 策划改了任务 找不到 自动删除任务 await G.mongodb.collection(SHUJUKU).deleteMany({uid: call.uid, taskid: _task["taskid"]}); continue } ; let _pval = _taskCon["pval"]; let _nval = _task["nval"]; if (_nval >= _pval) continue; // 不符合任务要求 if (!await chkCall(_taskCon["cond"], chkval, arg)) continue; // 根据需求改写 val = await alchangeVal(call, _taskCon, val, arg); let _resVal: number; // 累加型 if (isinc == 1) { _resVal = _nval + val; } else { // 覆盖型 if (val <= _nval) { continue; } else { _resVal = val; } } // 任务值上限检测 _resVal = _resVal > _pval ? _pval : _resVal; // 设置任务 let _setData = {nval: _resVal}; let _where = {taskid: _task["taskid"]}; await this.setTask(uid, _where, _setData); if (_resVal == _pval) { call.conn.sendMsg('msg_s2c/TaskChange', {..._task, nval: _resVal}) } } } /** * 检测任务刷新 */ static async refreshTask(call: ApiCall) { let _refre = Object.keys(await this.getDayReSetType()); for (let index = 0; index < _refre.length; index++) { const _ttype = _refre[index]; await this.reSetTaskByType(call, parseInt(_ttype)); } } /** * 重置任务类型 */ static async getDayReSetType() { let _r = { 1: "day", // 每日任务 // 2: "week" // 主线任务 // 3: "week" // 成就任务 4: "baoxiang" // 每日任务的宝箱 }; return _r; } /** * 重置任务 */ static async reSetTaskByType(call: ApiCall, ttype: number) { let _dayType = await this.getDayReSetType(); if (!_dayType[ttype]) { return; } // 重置每日任务 if (ttype == 1 || ttype == 4) { let _zero = PublicShared.getToDayZeroTime(G.time); let _where = {retime: {$gte: _zero, $lte: _zero + 24 * 60 * 60 - 1}, type: ttype}; let _tmp = await this.getUserTaksList(call.uid, _where); if (_tmp.length == 0) await this.resetDailyTask(call, ttype); } } /** * 重置每日任务 */ static async resetDailyTask(call: ApiCall, type: number = 1) { await this.delTasks(call.uid, {type: type}); // 该限制改到红点检测判断,避免此处注释后,红点检测与账号创建初始化任务并发。 // if (PublicShared.chkSameDate(call.conn.gud.cTime, G.time)) return; let _taskCons = await this.getTaskConsByType(type); let _taskInfo = []; for (let _taskid in _taskCons) { let task = _taskCons[_taskid]; // 起步任务 if (task.pretask == 0) { let _temp = await this.fmtTask(call, task); _taskInfo.push(_temp); } } await this.insertTasks(call, _taskInfo); } /** * * @param call * @param taskcon * @returns 任务初始完成值 */ static async getTaskNval(call: ApiCall, taskcon) { let _resVal: number; try { _resVal = await taskDict[taskcon.stype].getInitVal(call, taskcon); } catch { _resVal = 0; } return _resVal; } /** * 获取所有相关 stype 的任务 * @param stype 任务stype */ static async getFinishByStype(call: ApiCall, stype: number, where: {}) { // 任务刷新 await this.refreshTask(call); Object.assign(where, {stype: stype}); let _r = await this.getUserTaksList(call.uid, where); return _r; } /** * 获取所有相关 ttype 的任务 * @param ttype 任务type */ static async getFinishByTtype(call: ApiCall, ttype: number[], where: {}, ischk = 0) { // 任务刷新 if (ischk == 1) await this.refreshTask(call); let _r = {}; let _w = {}; // 未完成任务的 type 也返回 const _finishType = [1, 4]; // Object.assign(where, { type: { $in: ttype } }) for (let index = 0; index < ttype.length; index++) { const _type = ttype[index]; Object.assign(_w, {type: _type, ...where}); if (_finishType.indexOf(_type) != -1) { delete _w["finish"]; } let _tmp = await this.getUserTaksList(call.uid, _w); _r[_type] = _tmp; } return _r; } /** * 格式化任务数据 * @param task 任务配置 */ static async fmtTask(call: ApiCall, task: { stype: number, type: number, id: number, pval: number; }) { let _nt = G.time; let _r: taskType = { stype: task.stype, type: task.type, taskid: task.id, pval: task.pval, nval: await this.getTaskNval(call, task), finish: 0, lasttime: _nt, retime: _nt, uid: call.uid }; return _r; } /** * 检测生成后续任务 * @param uid * @param _follow 后续任务id * @param _task 任务数据 * @returns 新的任务 */ static async setTaskInfo(call: ApiCall, _follow: number, _task: { type: number; }) { let newTask: taskType; // 新任务配置 let _ftaskCon = await TaskFun.getTaskConByType(_task["type"], _follow); if (Object.keys(_ftaskCon).length > 0) { // @ts-ignore newTask = await TaskFun.fmtTask(call, _ftaskCon); // 插入任务 await TaskFun.insertTasks(call, [newTask]); } if (newTask["_id"]) delete newTask["_id"]; return newTask; } /** * 生成所有任务 */ static async generateAllTask(call: ApiCall) { let _r = await G.mongodb.collection(SHUJUKU).count({uid: call.uid}); if (_r > 0) return; let _taskInfo = []; let _con = G.gc.task; for (let _type in _con) { for (let _taskid in _con[_type]) { let task = _con[_type][_taskid]; // 起步任务 if (task.pretask == 0) { let _temp = await this.fmtTask(call, task); _taskInfo.push(_temp); } } } await this.insertTasks(call, _taskInfo); } /**生成指定类型任务-初始化 */ static async reInitTask(call: ApiCall, type: string) { // 查询类型任务是否存在 let _r = await G.mongodb.collection(SHUJUKU).count({uid: call.uid, type: ~~type}); let _taskInfo = []; if (_r == 0) { let _con = G.gc.task; // 数据不存在,未初始化,执行初始化 for (let _taskid in _con[type]) { let task = _con[type][_taskid]; if (task.pretask == 0) { let _temp = await this.fmtTask(call, task) _taskInfo.push(_temp); } } } _taskInfo.length > 0 && await this.insertTasks(call, _taskInfo); return _taskInfo; } /** * 获取任务列表 */ static async getUserTaksList(uid: string, where: {}) { // type : 1 主线 2 成就 3 每日 Object.assign(where, {uid: uid}); let _taskInfo = await G.mongodb.collection(SHUJUKU).find(where).toArray(); _taskInfo.forEach(e => { if (e._id) delete e._id; }); return _taskInfo; } /** * 删除相关任务 */ static async delTasks(uid: string, where: { type: number; }) { Object.assign(where, {uid: uid}); await G.mongodb.collection(SHUJUKU).deleteMany(where); } /** * 批量插入任务 * @param call * @param _tasks */ static async insertTasks(call: ApiCall, _tasks: taskType[]) { if (_tasks.length == 0) { return; } await G.mongodb.collection(SHUJUKU).insertMany(_tasks); _tasks.map(i => { if (i.type == 2) { call.conn.sendMsg('msg_s2c/TaskChange', i) } }) // await G.mongodb.collection(SHUJUKU).updateMany( // { uid: uid }, // _tasks // ); } /** * 设置单个任务值 */ static async setTask(uid: string, where: {}, setData: {}) { if (Object.keys(setData).length == 0) { return; } Object.assign(where, {uid}); setData = {$set: setData}; await G.mongodb.collection(SHUJUKU).updateOne(where, setData); } /**红点 */ static async getHongDian(call: ApiCall) { let _res = { show: false, val: { tasktypes: [] } }; // 如果是创建当天,不跑红点刷新 if (!PublicShared.chkSameDate(call.conn.gud.cTime, G.time)) await this.refreshTask(call) const _ttype = { 1: [1, 4], // 每日 2: [2], // 主线任务 3: [3] // 成就 删掉 type 5 的成就宝箱任务 }; for (let index = 0; index < Object.keys(_ttype).length; index++) { const element = Object.keys(_ttype)[index]; if ((element == "1" || element == "3") && call.conn.gud.lv < 7) continue; let _values: number[] = _ttype[element]; let _where: {} = { uid: call.uid, type: {$in: _values}, finish: 0, '$expr': { $lte: ["$pval", "$nval"] } }; //let taskArr = await G.mongodb.collection(SHUJUKU).find(_where).toArray(); let count = await G.mongodb.collection(SHUJUKU).count(_where); //let _tmp = taskArr.filter(x => x.pval <= x.nval) //if (_tmp.length) { if (count > 0) { _res.show = true; _res.val.tasktypes.push(element); } } return _res; } } export class TaskAllEmitFun { // 所有任务监听执行 static async allEmit(node: { call: ApiCall; return: ApiReturn; }) { if (node.call.service.name == 'sign/GetPrize' && node.return.isSucc) { // 签到一次 G.emit("Class_task_100", 'Class_task_100', node.call, 1, 0); } if (node.call.service.name == 'hero/LvUp' && node.return.isSucc) { // 升级一次干部 G.emit("Class_task_101", 'Class_task_101', node.call, 1, 0); } if (node.call.service.name == 'shop/Buy' && node.return.isSucc) { let _val = node.call.req.buyNum ? node.call.req.buyNum : 1; if (node.call.req.shopId == "1") { // 杂货铺购买 n 次 G.emit("Class_task_102", 'Class_task_102', node.call, _val, 0); } // 商店购买 n 次道具 G.emit("Class_task_119", 'Class_task_119', node.call, _val, 0); if (node.call.req.shopId == "9") { // 获得 x 个 配置颜色 配件 后面复写数值 G.emit("Class_task_137", 'Class_task_137', node.call, 1, 0, node.call.return.res.prize); } } if (node.call.service.name == 'task/Finsh' && node.return.isSucc) { if (node.call.return.res.task.type == 1) { // 日常任务完成 n 次 G.emit("Class_task_999", 'Class_task_999', node.call, 1, 0); } if (node.call.return.res.task.type == 3) { // 成就任务完成 n 次 G.emit("Class_task_105", 'Class_task_105', node.call, 1, 0); } } if (node.call.service.name == 'task/AllFinsh' && node.return.isSucc) { let _val = node.call.return.res.finishtask.length; if (node.call.req.type == 1 && _val != 0) { // 日常任务完成 n 次 G.emit("Class_task_999", 'Class_task_999', node.call, _val, 0); } if (node.call.req.type == 3 && _val != 0) { // 成就任务完成 n 次 G.emit("Class_task_105", 'Class_task_105', node.call, _val, 0); } } if (node.call.eventMsg && node.call.eventMsg["msg_s2c/PlayerChange"] && node.call.eventMsg["msg_s2c/PlayerChange"].lv) { // 玩家升级 let _lv = node.call.eventMsg["msg_s2c/PlayerChange"].lv; G.emit("Class_task_104", 'Class_task_104', node.call, _lv, 0); HongDianChange.sendChangeKey(node.call.uid, ['jijinhd']) } if (node.call.service.name == 'tanxian/Fight' && node.return.isSucc) { let _val = node.call.conn.gud.mapId; // 玩家通关主线关卡 n 次 G.emit("Class_task_1", 'Class_task_1', node.call, _val, 0); // 探险进行 n 次战斗 不管输赢 G.emit("Class_task_120", 'Class_task_120', node.call, 1, 0); } if (node.call.service.name == 'hero/LvUp' && node.return.isSucc) { let _val = node.call.return.res.lv; let usertasklog = await G.mongodb.collection('playerInfo', 'usertasklog').findOne({ uid: node.call.conn.uid, type: 'usertasklog' }); if (_val > (usertasklog?.maxherolv | 0)) { await G.mongodb.collection('playerInfo', 'usertasklog').updateOne({ uid: node.call.conn.uid, type: 'usertasklog' }, {$set: {maxherolv: _val}}); } // 干部等级达到 n 级 G.emit("Class_task_106", 'Class_task_106', node.call, _val, 0); } if (node.call.service.name == 'hero/ChangePos' && node.return.isSucc) { // if (node.call.req.state == 'set') { // let _val = Object.values(node.call.return.res).filter(v => { return v; }).length; // G.emit("Class_task_107", 'Class_task_107', node.call, _val, 0); // } let _val = Object.values(node.call.return.res).filter(v => { return v; }).length; G.emit("Class_task_107", 'Class_task_107', node.call, _val, 0); } if (node.call.service.name == 'hero/JinJie' && node.return.isSucc) { let _val = 0; // 后面有复写 G.emit("Class_task_108", 'Class_task_108', node.call, _val, 0); } if (node.call.service.name == 'chat/Send' && node.return.isSucc) { if (node.call.req.type == 'local') { // 综合聊天1次 G.emit("Class_task_109", 'Class_task_109', node.call, 1, 0); } } if (node.call.service.name == 'gongyu/xunlianjihua/UpSkill' && node.return.isSucc) { // 升级 n 次训练技能 G.emit("Class_task_110", 'Class_task_110', node.call, 1, 0); } if (node.call.service.name == 'equip/LvUp' && node.return.isSucc) { // 装备强化 n 次 G.emit("Class_task_111", 'Class_task_111', node.call, node.call.return.res.addlv, 0); // 装备强化到 n 级 let _val = node.call.return.res.lv; let usertasklog = await G.mongodb.collection('playerInfo', 'usertasklog').findOne({ uid: node.call.conn.uid, type: 'usertasklog' }); if (_val > (usertasklog?.maxequiplv | 0)) { await G.mongodb.collection('playerInfo', 'usertasklog').updateOne({ uid: node.call.conn.uid, type: 'usertasklog' }, {$set: {maxequiplv: _val}}); } G.emit("Class_task_112", 'Class_task_112', node.call, _val, 0); // 有 n 件强化 配置 等级装备 后面复写正确值 G.emit("Class_task_113", 'Class_task_113', node.call, 0, 0); } if (node.call.service.name == 'equip/OneKeyLvUp' && node.return.isSucc) { // 装备强化 n 次 let _qhNum = Object.values(node.call.return.res.posLvUp).sum(); G.emit("Class_task_111", 'Class_task_111', node.call, _qhNum, 0); // 装备强化到 n 级 let _val = Object.values(node.call.return.res.log).max(); G.emit("Class_task_112", 'Class_task_112', node.call, _val, 0); // 更新强化等级 let usertasklog = await G.mongodb.collection('playerInfo', 'usertasklog').findOne({ uid: node.call.conn.uid, type: 'usertasklog' }); if (_val > (usertasklog?.maxequiplv | 0)) { await G.mongodb.collection('playerInfo', 'usertasklog').updateOne({ uid: node.call.conn.uid, type: 'usertasklog' }, {$set: {maxequiplv: _val}}); } // 有 n 件强化 配置 等级装备 后面复写正确值 G.emit("Class_task_113", 'Class_task_113', node.call, 0, 0); } if (node.call.eventMsg && node.call.eventMsg["msg_s2c/HeroChange"]) { // 获得 n 个 配置颜色 干部 let array = Object.values(node.call.eventMsg["msg_s2c/HeroChange"]); for (let index = 0; index < array.length; index++) { const element = array[index]; if (element.heroId && element.lv == 1) { let _color = G.gc.hero[element.heroId].colour; G.emit("Class_task_114", 'Class_task_114', node.call, 1, _color); await G.mongodb.collection('playerInfo', 'usertasklog').updateOne({ uid: node.call.conn.uid, type: 'usertasklog' }, {$inc: G.mongodb.createTreeObj({key: `herocolor.${_color}`, val: 1})}); } } } if (node.call.eventMsg && node.call.eventMsg["msg_s2c/EquipChange"]) { // 获得 n 个 配置颜色 装备 let array = Object.values(node.call.eventMsg["msg_s2c/EquipChange"]); // 获取task配置装备数量 let usertasklog = await G.mongodb.collection('playerInfo', 'usertasklog').findOne({ uid: node.call.uid, type: 'usertasklog' }) for (let index = 0; index < array.length; index++) { const element = array[index]; if (element.equipId && element.lv == 0 && !element.wearaId) { let _color = G.gc.equip[element.equipId].colour; // 增加相关等级装备数量 if (!usertasklog.equipcolor[_color]) usertasklog.equipcolor[_color] = 0 usertasklog.equipcolor[_color]++ G.emit("Class_task_115", 'Class_task_115', node.call, 1, _color); } } // 更新表内装备数量,重置任务时会依据该内容计算已获得数量。 await G.mongodb.collection('playerInfo', 'usertasklog').updateOne({ uid: node.call.uid, type: 'usertasklog' }, {$set: {equipcolor: usertasklog.equipcolor}}) } // if (node.call.service.name == 'chongzhi/Open' && node.return.isSucc) { // // 累计充值 n 钻石 数量后面复写 // G.emit("Class_task_116", 'Class_task_116', node.call, 1, 0); // } if (node.call.service.name == 'dixiaqianzhuang/Qf' && node.return.isSucc) { // 使用 n 次点金 let _val = Object.values(node.call.return.res.bj).sum(); G.emit("Class_task_117", 'Class_task_117', node.call, _val, 0); } if (node.call.service.name == 'jiuba/Lottery' && node.return.isSucc) { // 酒吧招募 n 次 let _val = node.call.req.type; G.emit("Class_task_118", 'Class_task_118', node.call, _val, 0); } if (node.call.service.name == 'gonghui/Jx' && node.return.isSucc) { // 势力捐献进行 n 次捐献 G.emit("Class_task_121", 'Class_task_121', node.call, 1, 0); // 势力 配置xx 捐献进行 n 次捐献 G.emit("Class_task_142", 'Class_task_142', node.call, 1, node.call.req.index); } if ((node.call.service.name == 'equip/Wear' || node.call.service.name == 'equip/OneKeyWear') && node.return.isSucc) { // 穿戴X件以上装备 G.emit("Class_task_143", 'Class_task_143', node.call, 1, 0); } if ((node.call.service.name == 'friend/Apply' || node.call.service.name == 'friend/Gift') && node.return.isSucc) { // 进行x次好友申请或送礼 let usertasklog = await G.mongodb.collection('playerInfo', 'usertasklog').findOne({ uid: node.call.conn.uid, type: 'usertasklog' }); let _val = 1 if (node.call.service.name == 'friend/Gift') { _val = (node.call.return.res.change.sendGift.length || 0) } _val = _val + usertasklog.friendAsk + usertasklog.sendGift await G.mongodb.collection('playerInfo', 'usertasklog').updateOne({ uid: node.call.conn.uid, type: 'usertasklog' }, {$set: {friendAsk: _val}}); G.emit("Class_task_144", 'Class_task_144', node.call, 1, 0); } if (node.call.service.name == 'tanxian/FastGuaJi' && node.return.isSucc) { // 进行 n 次快速探险 G.emit("Class_task_122", 'Class_task_122', node.call, 1, 0); } if (node.call.service.name == 'tanxian/GuaJi' && node.return.isSucc) { // 领取 n 次挂机收益 G.emit("Class_task_145", 'Class_task_145', node.call, 1, 0); } if (node.call.service.name == 'jjc/Fight' && node.return.isSucc) { // 竞技场中挑战 n 次对手 G.emit("Class_task_123", 'Class_task_123', node.call, 1, 0); } if ((node.call.service.name == 'pata/Fight' || node.call.service.name == 'pata/SaoDang') && node.return.isSucc) { let _val = node.call.service.name == 'pata/Fight' ? 1 : node.call.req.num; // 斩草除根进行 n 次通关或扫荡 G.emit("Class_task_124", 'Class_task_124', node.call, _val, 0); } if (node.call.service.name == 'meirishilian/Fight' && node.return.isSucc) { // 挑战 n 次物资筹集 G.emit("Class_task_125", 'Class_task_125', node.call, 1, 0); } if (node.call.service.name == 'kuangdong/ZhanLing' && node.return.isSucc) { // 地盘争夺抢夺或战领 n 次 G.emit("Class_task_126", 'Class_task_126', node.call, 1, 0); } if (node.call.service.name == 'qjzzd/Fight' && node.return.isSucc) { // 挑战 n 次清缴真主党 G.emit("Class_task_127", 'Class_task_127', node.call, 1, 0); } if (node.call.service.name == 'jjc/Fight' && node.return.isSucc) { // 竞技场首次达到x名 后面复写 G.emit("Class_task_129", 'Class_task_129', node.call, 1, 0); } if (node.call.service.name == 'jjc/Open' && node.return.isSucc) { // 竞技场首次达到x名 后面复写 G.emit("Class_task_129", 'Class_task_129', node.call, 1, 0); } if (node.call.service.name == 'peijiancangku/Deal' && node.return.isSucc) { if (node.call.req.num == 10) { // 在仓库使用 x 次交易10次(交易一次不算) G.emit("Class_task_130", 'Class_task_130', node.call, 1, 0); } // 在仓库交易x次 G.emit("Class_task_141", 'Class_task_141', node.call, node.call.req.num, 0) // 获得 x 个 配置颜色 配件 后面复写数值 G.emit("Class_task_137", 'Class_task_137', node.call, 1, 0, node.call.return.res.prize); } if (node.call.service.name == 'peijiancangku/Jump' && node.return.isSucc) { // 在仓库使用 x 次指定高级仓库 G.emit("Class_task_131", 'Class_task_131', node.call, 1, 0); } if (node.call.service.name == 'gonglukuangbiao/Fight' && node.return.isSucc) { // 进行 x 次公路狂飙 G.emit("Class_task_132", 'Class_task_132', node.call, 1, 0); } if (node.call.service.name == 'jiaotang/Lottery' && node.return.isSucc) { // 进行 x 教会招募 let _val = node.call.req.type; G.emit("Class_task_133", 'Class_task_133', node.call, _val, 0); } if (node.call.service.name == 'item/Use' && node.return.isSucc) { let itemConf = G.gc.item[node.call.req.itemId]; if ([3, 4].includes(itemConf.type)) { // 进行 x 次英雄合成 let prizeList = node.return.res.prize console.log(prizeList) let heroList = prizeList.filter(i => i.a == 'hero') let equipList = prizeList.filter(i => i.a == 'equip') if (heroList.length) { let _val = heroList.reduce((c, r) => c + r.n, 0) G.emit("Class_task_146", 'Class_task_146', node.call, _val, 0); } if (equipList.length) { let _val = equipList.reduce((c, r) => c + r.n, 0) G.emit("Class_task_147", 'Class_task_147', node.call, _val, 0); } } } if (node.call.service.name == 'gongyu/mingdao/Repair' && node.return.isSucc) { // 修复 x 次名刀 let _val = node.call.req.num; G.emit("Class_task_136", 'Class_task_136', node.call, _val, 0); } if (node.call.service.name == 'peijian/LvUp' && node.return.isSucc) { // 配件升级 xx 次 let _val = node.call.req.num; G.emit("Class_task_138", 'Class_task_138', node.call, _val, 0); } if (node.call.service.name == 'peijian/OneKeyLvUp' && node.return.isSucc) { // 配件升级 xx 次 let _val = node.call.return.res.sjnum; G.emit("Class_task_138", 'Class_task_138', node.call, _val, 0); } if (node.call.eventMsg && node.call.eventMsg["msg_s2c/PeijianChange"] && node.call.eventMsg["msg_s2c/PeijianChange"]) { let _change = node.call.eventMsg["msg_s2c/PeijianChange"]; // 配件记录信息 let usertasklog = await G.mongodb.collection('playerInfo', 'usertasklog').findOne({ uid: node.call.conn.uid, type: 'usertasklog' }); let _setData = {$set: {}}; // 更新配件记录 let peijianCon = G.gc.peijian; let _lv = 0; for (let index = 0; index < Object.keys(_change).length; index++) { const _tmp = Object.keys(_change)[index]; let element = _change[_tmp]; if (!element.lv) continue; if (element.lv > (usertasklog?.maxpeijianlv || 0)) { _lv = element.lv; _setData["$set"]["maxpeijianlv"] = _lv; } // 配件颜色信息 let _peijian = await PeijianFun.getPeijian(node.call, _tmp); let _color = peijianCon[_peijian.peijianId].colour; if (element.lv > (usertasklog?.peijiancolor ? [_color] : 0)) { // if (!_setData["$set"]["peijiancolor"]) _setData["$set"]["peijiancolor"] = {} _setData["$set"][`peijiancolor.${_color}`] = element.lv; // 配置 配件升级到 xx 级(颜色限制) G.emit("Class_task_140", 'Class_task_140', node.call, element.lv, _color); } } if (Object.keys(_setData["$set"]).length > 0) { // 配件升级到 xx 级 if (_setData["$set"]["maxpeijianlv"]) G.emit("Class_task_139", 'Class_task_139', node.call, _lv, 0); await G.mongodb.collection('playerInfo', 'usertasklog').updateOne({ uid: node.call.conn.uid, type: 'usertasklog' }, _setData); } } } } // TaskFun.addevent()