fix 黑帮争霸分组定时器

This commit is contained in:
dy 2023-12-23 12:30:11 +08:00
parent 077f7a488e
commit 14daa94dba

View File

@ -1,55 +1,58 @@
/**
* 300
* 100
* 100
* 100
*/
export async function zbsGroup(){
export async function zbsGroup() {
let arr = await G.mongodb.collection("hbzb_user_cross").find(
{ "jifen": { $gt: -999999 } }
).sort(
{ "data.player.cTime": -1 }
).project({
uid:1,
jifen:1
}).toArray();
{"jifen": {$gt: -999999}}
).project({
uid: 1,
jifen: 1,
'data.player.cTime': 1
}).toArray();
// 移除mongo查询里的排序↑会造成内存超出报错
// 在内存里按照玩家注册时间相近的排序分组
R.sort((a, b) => b.data.player.cTime - a.data.player.cTime)
//有积分的玩家总数
let groups = [];
let currGroup = [];
arr.map((u,index)=>{
if(currGroup.length >= 300){
arr.map((u, index) => {
if (currGroup.length >= 300) {
//每300个丢一组
groups.push( currGroup );
groups.push(currGroup);
currGroup = [];
}
currGroup.push({uid: u.uid, jifen: u.jifen});
});
//循环完毕后检查余量
if(currGroup.length > 0){
if(currGroup.length >= 100){
if (currGroup.length > 0) {
if (currGroup.length >= 100) {
//如果有100人 就自己一组
groups.push( currGroup );
}else{
groups.push(currGroup);
} else {
//不够100 就合到前一组
groups[groups.length] = (groups[groups.length]||[]).concat(currGroup);
groups[groups.length] = (groups[groups.length] || []).concat(currGroup);
}
currGroup = [];
}
//循环groups里的数据对每一组里按jifen降序排序然后给每个玩家分组
groups.map((group,groupIndex)=>{
group.sort((a,b)=>{
groups.map((group, groupIndex) => {
group.sort((a, b) => {
return b.jifen - a.jifen;
});
for(let i=0;i<group.length;i++){
for (let i = 0; i < group.length; i++) {
G.mongodb.collection("hbzb_user_cross").updateOne(
{ uid: group[i].uid },
{uid: group[i].uid},
{
$set: {
"zbsgroup": "group"+(groupIndex+1),
"rank":(i+1),
"zbsgroup": "group" + (groupIndex + 1),
"rank": (i + 1),
}
}
)
@ -60,51 +63,51 @@ export async function zbsGroup(){
/**
*
*/
export async function getZbsRankList(uid?: string, _zbsgroup?: string) : Promise<{ myRank: any; rankList: any[]; }> {
export async function getZbsRankList(uid?: string, _zbsgroup?: string): Promise<{ myRank: any; rankList: any[]; }> {
let myData;
let zbsgroup = _zbsgroup;
if(uid){
myData = await G.crossmongodb.collection("hbzb_user_cross").findOne({uid:uid});
if(!myData || !myData?.zbsgroup)return null;
if (uid) {
myData = await G.crossmongodb.collection("hbzb_user_cross").findOne({uid: uid});
if (!myData || !myData?.zbsgroup) return null;
zbsgroup = myData?.zbsgroup;
}
let arr = await G.crossmongodb.collection("hbzb_user_cross").find(
{ "zbsgroup": zbsgroup }
{"zbsgroup": zbsgroup}
).sort(
{ "rank": 1 }
{"rank": 1}
).limit(100).toArray();
let rank = {
"myRank":{},
"rankList" : []
"myRank": {},
"rankList": []
}
let myRank = -1;
arr.map((u,index)=>{
rank.rankList.push( {
arr.map((u, index) => {
rank.rankList.push({
player: ((u.data) as any).player || {},
roles: ((u.data) as any).roles || {},
rank : (index+1),
rank: (index + 1),
//兼容前端
valArr: [ (index+1) ]
valArr: [(index + 1)]
});
if(u.uid == uid){
if (u.uid == uid) {
myRank = rank.rankList.length;
rank.myRank = {
player: ((u.data) as any).player || {},
roles: ((u.data) as any).roles || {},
rank : (index+1),
rank: (index + 1),
//兼容前端
valArr: [ (index+1) ]
valArr: [(index + 1)]
};
}
})
return rank;
}