HJ_Server/src/api_s2c/rank/ApiOpen.ts
2023-12-13 20:51:17 +08:00

103 lines
3.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { ApiCall } from "tsrpc";
import { JJCFun } from '../../public/jjc';
import { Rank } from '../../public/rank/rank';
import { ReqOpen, ResOpen } from "../../shared/protocols/rank/PtlOpen";
import { getToper50RankInfo } from "../hbzb/jfs/fun";
import { getZbsRankList } from "../hbzb/zbs/fun";
export default async function (call: ApiCall<ReqOpen, ResOpen>) {
let obj = await rankOpenfun(call, call.req)
call.succ(obj);
}
// 参数需调整req数组应使用types字段接收需增加分页参数,需前端配合优化redis存储暂不改。
/**
*
* @param call
* @param req <array> 旧模式兼容,保留数组的判断
* @param req.type <array> 查询数据的类型
* @param req.page 页码从0开始
* @param req.offset 每页条数
* @returns
*/
export async function rankOpenfun(call, req: ReqOpen): Promise<ResOpen> {
let obj: ResOpen = {};
// 数组,兼容旧的参数
if(req instanceof Array) {
var types = req
var page = 0
var offset = 1
} else {
var types = req.type
var page = req.page || 0
var offset = req.offset || 1
}
// 取排行范围
// 应用规则接口类如跨服统一使用page&offset, 接口内部需要min&max自行转换 调用函数使用min,max
const { min, max } = Rank.pageToMin(page, offset)
for (let type of types) {
switch (type) {
case 'jjc':
// 获取前50名ranklist数据
let rankList = await JJCFun.getRankList(min, max);
// 获取自己的排名
let myRank = await JJCFun.getRankSortByUid(call.uid)
// 获取自己的rank信息
let myRankInfo = await JJCFun.getPlayerData(call.uid)
obj[type] = {
rankList: rankList,
myRank: {
rank: myRank,
player: myRankInfo?.player || call.conn.gud,
valArr: myRankInfo?.valArr || [],
otherData: myRankInfo?.otherData || {}
}
};
break;
// case 'hbzbCross':
// obj[type] = await Rank.list.hbzbLocal.getCrossRankList(call.uid, page, offset);
// break;
// case 'hbzbZbsCross':
// obj[type] = await Rank.list.hbzbLocal.getZbsRankList(call.uid, page, offset);
// break;
case 'slzd1':
case 'slzd2':
case 'slzd3':
case 'slzd4':
case 'slzd5':
case 'slzd6':
obj[type] = await Rank.list[type].getRankList(call.conn.gud.ghId, {min, max});
break;
case 'kbzz':
let resCall = await G.clientCross.callApi('kbzz/Rank', { uid: call.uid, page, offset});
if (!resCall.isSucc) {
return call.error('', { code: -2, message: globalThis.lng.rank_kbzz });
}
obj[type] = resCall.res;
break;
case 'clslCross':
//let resCallClsl = await G.clientCross.callApi('clsl/Rank', { gud: call.conn.gud, page, offset});
//obj[type] = resCallClsl.res;
break;
case 'wzryCross':
let resCallWzry = await G.clientCross.callApi('wzry/Rank', { gud: call.conn.gud, page, offset});
obj[type] = resCallWzry.res;
break;
case "hbzbLocal":
//黑帮积分赛排行
obj[type] = await getToper50RankInfo(call.uid) as any;
break;
case 'hbzbCross':
obj[type] = await getZbsRankList(call.uid) as any;
break;
default:
obj[type] = await Rank.list[type].getRankList(call.uid, {min, max});
break;
}
}
return obj
}