HJ_Server/src/public/task.ts
DESKTOP-15R5JU0\legu 7d8dff9799 init
2023-11-17 21:55:32 +08:00

829 lines
32 KiB
TypeScript

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 (<any>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<any, any, any>;
return: ApiReturn<any>;
}) {
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()