'use strict'; // var https = require('https'); // var md5 = require('md5'); var quick = require('quick-pomelo'); var P = quick.Promise; var _ = require('lodash'); var uuid = require('node-uuid'); var C = require('../../../../share/constant'); var configCommon = require('../../../../share/configCommon');//////TL++配置相关的公共方法 // 构造方法 var hallLogic = function (app) { // this.app = table.game.app; console.warn("hallLogic 这里是构造方法111 "+(typeof app)); this.app = app; this.lconfigCommon = new configCommon(this.app); }; // 导出类 // module.exports = hallLogic; module.exports = function (app) { // setInterval(() => checkVersion(), 5000); // console.warn("活动配置内容 ??? exports() "+typeof require.cache[require.resolve('./hallHandler')]); return new hallLogic(app); }; // 原型对象 var proto = hallLogic.prototype; // ts++绑定手机号之后给用户发邮件 proto.setBindPhone = P.coroutine(function* (msg, session, next,userId) { let diamond = 200; let form = "bindPhone"; // console.warn("hallLogic 给用户发邮件 "+session.uid+" diamond "+diamond); var mail = yield this.app.models.Mails.findByIdAsync(session.uid, 'mailInfos'); if (mail) { let item = { _id: "", index: mail.mailInfos.length, // 邮件下标 tittleT: 6, // 邮件标题类型 0:未定义 1:普通通知 2:有奖励通知 3:补偿通知 4:版本更新通知 descT: 6, // 邮件内容类型 0:未定义 1:普通通知 2:有奖励通知 3:补偿通知 4:版本更新通知 reward: 1, // 有无奖励 0:无奖励 1:有奖励 rewardT: 1, // 奖励类型 0:未定义 1:钻石, rewardC: diamond, // 奖励数量 receive: 0, // 是否领取 0:未领取 1:已领取 read: 0, // 是否已读 0:未读 1:已读 form:form, //邮件来源 sendTime: Date.now() // 发送日期 } let newItem = _.clone(mail.mailInfos); let newItem2 = [0].concat(newItem); newItem2[0] = item; if(newItem2.length > 60){ newItem2 = newItem2.slice(0,60) } mail.mailInfos = []; mail.mailInfos = _.clone(newItem2); yield mail.saveAsync(); } else{ let item = { _id: "", index: 0, // 邮件下标 tittleT: 6, // 邮件标题类型 0:未定义 1:普通通知 2:有奖励通知 3:补偿通知 4:版本更新通知 descT: 6, // 邮件内容类型 0:未定义 1:普通通知 2:有奖励通知 3:补偿通知 4:版本更新通知 reward: 1, // 有无奖励 0:无奖励 1:有奖励 rewardT: 1, // 奖励类型 0:未定义 1:钻石, rewardC: diamond, // 奖励数量 receive: 0, // 是否领取 0:未领取 1:已领取 read: 0, // 是否已读 0:未读 1:已读 form:form, //邮件来源 sendTime: Date.now() // 发送日期 } let newItem = []; newItem[0] = item; var newMail = new this.app.models.Mails({ _id: session.uid, // 用户id(player表的主键) userId: userId, // 用户的userId mailInfos: newItem // 该活动的达成条件和奖励信息列表 }); yield newMail.saveAsync(); } return next(null, { code: C.OK, data: {}}); }); ////获得是否已领取比赛奖品(4~6名发钻石) proto.getIsTakeBSPrize = P.coroutine(function* (msg, session) { if (!session.uid) { return { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }; } if (!msg.aid) { return { code: C.FAILD, msg: C.GAME_PARAM_ERROR }; } let uid = session.uid; let agentId = msg.aid; let aidsub = agentId.substr(0, 9); let bsIndex = aidsub.indexOf("promote_"); if(bsIndex == -1) return { code: C.FAILD, msg: "is not compete aid" };//非比赛链接 let nowTime = Date.now(); let jrStart = this.lconfigCommon.getTodaySJC(); // nowTime = 1684925400000; // jrStart = 1681920000000; var opts = { stime: { $gte: jrStart }, outTime: {$gt: nowTime}//过期时间大于当前时间 }; opts['aid'] = agentId; let timelist = yield this.app.models.RaceTimeInfos.findMongoAsync(opts, 'aid agentNo stime etime bigRound gameId round playerCount other outTime yljList', { sort: { stime: 1 } }); if(timelist.length == 0){ this.app.controllers.bisai.setNowBSInfo([],agentId); return { code: C.FAILD, msg: "today no compate"}; } let userid = 1; var player = yield this.app.models.Player.findByIdAsync(uid, 'userId'); if (player) { if(player.userId) userid = player.userId; } let userList = [];//今日比赛所有参与的玩家uid let scoreList = [];//今日比赛所有参与的玩家的分数 let ccList = [];//今日比赛所有参与的玩家已经统计分数的场次 let ckszbsccxx = timelist[0];//此刻所处比赛场的比赛信息 let iszzpm = false;//是否是最终排名(比赛过程中统计的排名并非本场比赛最终的排名) let yljList = []; if(ckszbsccxx){ // console.warn("获得是否已领取比赛奖品 ckszbsccxx "+JSON.stringify(ckszbsccxx)); let jlbspmgbsj = (ckszbsccxx.etime + 15*60*1000) - nowTime;//距离比赛排名公布时间 if(jlbspmgbsj < 0) iszzpm = true; if(!iszzpm) return { code: C.FAILD, msg: "距离比赛最终排名仅剩 "+jlbspmgbsj+" 秒"}; if(ckszbsccxx.yljList && ckszbsccxx.yljList.length >= 0){ yljList = _.cloneDeep(ckszbsccxx.yljList); if(yljList.indexOf(userid) != -1){ return { code: C.OK, data: {bsjlsfylq:true}} } } var opts = { stime: { $gte: ckszbsccxx.stime, $lt: ckszbsccxx.etime }, over: { $gte: 1 } }; opts['agentId'] = agentId; var list = yield this.app.models.FHMJTables.findMongoAsync(opts, 'tableNo users', { sort: { stime: 1 } }); for (let i = 0; i < list.length; ++i) { let bjus = list[i].users;//本局users for (let j = 0; j < bjus.length; ++j) { let wjszxb = userList.indexOf(bjus[j].userId);//玩家所在下标 if(wjszxb == -1){ let xwjxb = userList.length;//新玩家下标 userList[xwjxb] = bjus[j].userId;//今日比赛所有参与的玩家 scoreList[xwjxb] = bjus[j].score;//今日比赛所有参与的玩家的分数 ccList[xwjxb] = 1;//今日比赛所有参与的玩家已经统计分数的场次 } else{ if(ccList[wjszxb] < ckszbsccxx.bigRound){//每个玩家止统计今日的前三场战绩 scoreList[wjszxb] += bjus[j].score;//今日比赛所有参与的玩家的分数 ccList[wjszxb] += 1;//今日比赛所有参与的玩家已经统计分数的场次 } } } } } let infoList = []; for (let i = 0; i < userList.length; ++i) { infoList[i] = { score:scoreList[i], uid:userList[i] } } var scorersSort = _.sortBy(infoList, (i) => i.score); // let qsmInfoList = [];//分数前十名 // _.reverse(scorersSort); // for (let i = 0; i < 10; ++i) { // qsmInfoList[i] = scorersSort[i]; // } // let zjmcxx = null;//自己的分数信息 // for (let i = 0; i < qsmInfoList.length; ++i) { // if(qsmInfoList[i] && qsmInfoList[i].uid == userid){ // zjmcxx = qsmInfoList[i]; // zjmcxx.mc = i; // } // } // if(!zjmcxx) return { code: C.FAILD, msg: "no prize"}; // let zjmc = -2; // if(zjmcxx) zjmc = zjmcxx.mc || -1; // zjmc++ // let bsjlsfylq = false;//比赛奖励是否已领取 // if(zjmc < 4 || zjmc > 10) return { code: C.FAILD, msg: "ranking error"}; // if(yljList.indexOf(userid) != -1){ // console.warn("此人没有领取过奖励了 "); // bsjlsfylq = true; // } //上面是4~10名可以领取钻石,下面是前10名联系客服10名之后所有参与比赛的玩家都可以领取参与奖送的钻石 _.reverse(scorersSort); let zjmcxx = null;//自己的分数信息 for (let i = 0; i < scorersSort.length; ++i) { if(scorersSort[i] && scorersSort[i].uid == userid){ zjmcxx = scorersSort[i]; zjmcxx.mc = i; break; } } if(!zjmcxx) return { code: C.FAILD, msg: "您未参与该场比赛"}; let zjmc = -2; if(zjmcxx) zjmc = zjmcxx.mc || -1; zjmc++ let bsjlsfylq = false;//比赛奖励是否已领取 if(zjmc < 11) return { code: C.FAILD, msg: "ranking error"}; if(yljList.indexOf(userid) != -1){ // console.warn("此人没有领取过奖励了 "); bsjlsfylq = true; } return { code: C.OK, data: {bsjlsfylq:bsjlsfylq}} }); //// 领取比赛奖品 proto.takeBSPrize = P.coroutine(function* (msg, session) { if (!session.uid) { return { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }; } if (!msg.aid) { return { code: C.FAILD, msg: C.GAME_PARAM_ERROR }; } let uid = session.uid; let agentId = msg.aid; let aidsub = agentId.substr(0, 9); let bsIndex = aidsub.indexOf("promote_"); if(bsIndex == -1) return { code: C.FAILD, msg: "is not compete aid" };//非比赛链接 let nowTime = Date.now(); let jrStart = this.lconfigCommon.getTodaySJC(); // nowTime = 1684925400000; // jrStart = 1681920000000; var opts = { stime: { $gte: jrStart }, outTime: {$gt: nowTime}//过期时间大于当前时间 }; opts['aid'] = agentId; let timelist = yield this.app.models.RaceTimeInfos.findMongoAsync(opts, 'aid agentNo stime etime bigRound gameId round playerCount other outTime yljList', { sort: { stime: 1 } }); if(timelist.length == 0){ this.app.controllers.bisai.setNowBSInfo([],agentId); return { code: C.FAILD, msg: "today no compate"}; } let userid = 1; var player = yield this.app.models.Player.findByIdAsync(uid, 'userId'); if (player) { if(player.userId) userid = player.userId; } let userList = [];//今日比赛所有参与的玩家uid let scoreList = [];//今日比赛所有参与的玩家的分数 let ccList = [];//今日比赛所有参与的玩家已经统计分数的场次 let ckszbsccxx = timelist[0];//此刻所处比赛场的比赛信息 let iszzpm = false;//是否是最终排名(比赛过程中统计的排名并非本场比赛最终的排名) let yljList = []; if(ckszbsccxx){ let jlbspmgbsj = (ckszbsccxx.etime + 15*60*1000) - nowTime;//距离比赛排名公布时间 if(jlbspmgbsj < 0) iszzpm = true; if(!iszzpm) return { code: C.FAILD, msg: "距离比赛最终排名仅剩 "+jlbspmgbsj+" 秒"}; if(ckszbsccxx.yljList && ckszbsccxx.yljList.length >= 0){ yljList = _.cloneDeep(ckszbsccxx.yljList); // console.warn("已领奖人数 "+yljList.length); if(yljList.indexOf(userid) != -1){ return {code: C.FAILD, msg: "本场比赛奖励已领取了。"} } } var opts = { stime: { $gte: ckszbsccxx.stime, $lt: ckszbsccxx.etime }, over: { $gte: 1 } }; opts['agentId'] = agentId; var list = yield this.app.models.FHMJTables.findMongoAsync(opts, 'tableNo users', { sort: { stime: 1 } }); // console.warn("战绩-------------------length",list.length); for (let i = 0; i < list.length; ++i) { let bjus = list[i].users;//本局users for (let j = 0; j < bjus.length; ++j) { let wjszxb = userList.indexOf(bjus[j].userId);//玩家所在下标 if(wjszxb == -1){ let xwjxb = userList.length;//新玩家下标 userList[xwjxb] = bjus[j].userId;//今日比赛所有参与的玩家 scoreList[xwjxb] = bjus[j].score;//今日比赛所有参与的玩家的分数 ccList[xwjxb] = 1;//今日比赛所有参与的玩家已经统计分数的场次 } else{ if(ccList[wjszxb] < ckszbsccxx.bigRound){//每个玩家止统计今日的前三场战绩 scoreList[wjszxb] += bjus[j].score;//今日比赛所有参与的玩家的分数 ccList[wjszxb] += 1;//今日比赛所有参与的玩家已经统计分数的场次 } } } } } let infoList = []; for (let i = 0; i < userList.length; ++i) { infoList[i] = { score:scoreList[i], uid:userList[i] } } var scorersSort = _.sortBy(infoList, (i) => i.score); // let qsmInfoList = [];//分数前十名 // _.reverse(scorersSort); // for (let i = 0; i < 10; ++i) { // qsmInfoList[i] = scorersSort[i]; // } // let zjmcxx = null;//自己的分数信息 // for (let i = 0; i < qsmInfoList.length; ++i) { // if(qsmInfoList[i] && qsmInfoList[i].uid == userid){ // zjmcxx = qsmInfoList[i]; // zjmcxx.mc = i; // } // } // if(!zjmcxx) return { code: C.FAILD, msg: "no prize"}; // let zjmc = -2; // if(zjmcxx) zjmc = zjmcxx.mc || -1; // zjmc++ // let diamond = 0; // let bsrslevel = [0,200,400];//比赛人数等级 // let bsszlevel1 = [888,588];//比赛送钻等级1 // let bsszlevel2 = [2888,1888];//比赛送钻等级2 // let bsszlevel3 = [8888,3888];//比赛送钻等级3 // let nowLevel = -1; // for (var i = 0; i < bsrslevel.length; i++) { // if(scorersSort.length >= bsrslevel[i]) nowLevel = i; // else break; // } // let szList = [];//送钻列表 // if(nowLevel+1 == 1) szList = szList = bsszlevel1; // else if(nowLevel+1 == 2) szList = szList = bsszlevel2; // else if(nowLevel+1 >= 3) szList = szList = bsszlevel3; // if(zjmc <= 3) return { code: C.FAILD, msg: "no prize!"}; // else if(zjmc <= 6) diamond = szList[0];//888; // else diamond = szList[1];//588; //上面是4~10名可以领取钻石,下面是前10名联系客服10名之后所有参与比赛的玩家都可以领取参与奖送的钻石 _.reverse(scorersSort); let zjmcxx = null;//自己的分数信息 for (let i = 0; i < scorersSort.length; ++i) { if(scorersSort[i] && scorersSort[i].uid == userid){ zjmcxx = scorersSort[i]; zjmcxx.mc = i; } } if(!zjmcxx) return { code: C.FAILD, msg: "no prize"}; let zjmc = -2; if(zjmcxx) zjmc = zjmcxx.mc || -1; zjmc++ if(zjmc <= 10) return { code: C.FAILD, msg: "no prize!"}; let diamond = 88; if(diamond > 0){ let bsjlsfylq = false;//比赛奖励是否已领取 if(yljList.indexOf(userid) != -1){ bsjlsfylq = true; } if(bsjlsfylq) return {code: C.FAILD, msg: "本场比赛奖励已领取"} let form = "bisaiSys"; yield this.lconfigCommon.senMailToPlayer(session.uid,userid,14,14,1,1,diamond,form); if(timelist[0].yljList){ let newylq = []; for (var i = 0; i < timelist[0].yljList.length; i++) { newylq[i] = timelist[0].yljList[i]; } newylq[newylq.length] = userid; timelist[0].yljList = _.cloneDeep(newylq); yield timelist[0].saveAsync(); } return { code: C.OK, data: {diamond:diamond,bsid:timelist[0]._id,userid:userid}} } return { code: C.FAILD, msg: "您没有可领取的奖励"}; });