HJ_Server/src/public/wzry.ts
2023-12-25 17:43:34 +08:00

234 lines
7.7 KiB
TypeScript

import { ApiCall } from 'tsrpc';
import { formatNpcData } from '../shared/fightControl/fightFun';
import { hongdianVal } from '../shared/protocols/hongdian/PtlGet';
import { wangzherongyao_baoming, wangzherongyao_staus, wzry_info } from '../shared/protocols/wzry/PtlOpen';
import { PublicShared } from '../shared/public/public';
export class WangZheRongYaofun {
/**王者荣耀配置 */
static async getCon() {
let _con = G.gc.wangzherongyao;
return _con;
}
/**获取赛程状态 */
static async getWangZheStatus() {
let _tmp = await this.getCon();
let _con = _tmp.wangzhe.timestatus;
let _weekOneTime = PublicShared.getToWeekMondayZeroTime();
let _res: wangzherongyao_staus = { // 默认比赛结束状态
status: _con[_con.length - 1].status + 1,
stime: _weekOneTime + _con[_con.length - 1].etime,
etime: _weekOneTime + 7 * 24 * 3600
};
for (let index = 0; index < _con.length; index++) {
const element = _con[index];
let _stime = _weekOneTime + element.stime;
let _etime = _weekOneTime + element.etime;
_res.stime = _stime;
_res.etime = _etime;
if (_stime <= G.time && G.time < _etime) {
_res.status = element.status;
_res.num = await this.getBaoMingNum();
break;
}
}
return _res;
}
/**获取报名人数 */
static async getBaoMingNum() {
let zkey: string = PublicShared.getToWeek();
let _num = G.mongodb.collection('playerInfo', 'wzry').countDocuments({ isbm: 1 });
return _num;
}
/**获取本服各种数据 */
static async getMyData(call) {
let zkey = PublicShared.getToWeek();
let _res: wzry_info = {
isdldrefre: 0,
isauto: 0,
zkey: zkey,
isbm: 0,
dldinfo: {
dldpknum: 0,
dldrefrenum: 0
},
isjjzs: 0,
uid: call.uid,
};
let _mydata = await G.mongodb.collection('playerInfo', 'wzry').findOne({ uid: call.conn.uid, type: 'wzry' });
if (!_mydata) {
await G.mongodb.collection('playerInfo', 'wzry').updateOne({
uid: call.uid,
type: 'wzry'
}, { $set: _res }, { upsert: true });
return _res;
} else {
delete _mydata._id;
}
return _mydata;
}
/**设置报名数据 */
static async setWzryBaoMing(call: ApiCall, setData: { [id: string]: any; }) {
await G.mongodb.cPlayerInfo("wzry").updateOne({ uid: call.uid, type: 'wzry' }, { $set: setData }, { upsert: true });
let data = await call.conn.getDefaultFightData();
let _res = await G.clientCross.callApi('wzry/BaoMing', { zkey: setData.zkey, data: data });
return _res;
}
/**获取我的wzry战斗数据 */
static async getMyFight(call: ApiCall) {
let _res = await G.clientCross.callApi('wzry/WzFightData', { uid: call.uid, iswzfight: true });
if (_res.isSucc && _res.res.info) {
return _res.res.info;
}
return false;
}
/**获取王者之巅数据 */
static async getWzzd(uid: string) {
let _res = await G.clientCross.callApi('wzry/WzFightData', { uid: uid, iswzzd: true });
return _res;
}
/**获取王者之巅数据 n 条数据 */
static async getWzzdList() {
let _res = await G.clientCross.callApi('wzry/Wzzd', {});
if (_res.isSucc && _res.res.wzzdlist) {
return _res.res.wzzdlist;
}
return false;
}
/**获取wzry某一组数据 */
static async getFightGroup(call: ApiCall, where: {}) {
let _res = await G.clientCross.callApi('wzry/WzFightGroup', { where: where });
if (_res.isSucc && _res.res.info) {
return _res.res.info;
}
return false;
}
/**wzry 结束 删除相关数据 */
static async delGroup() {
let _res = await G.clientCross.callApi('wzry/WzFightData', { uid: '', isdel: true });
await G.mongodb.collection('playerInfo', 'wzry').updateMany({ type: 'wzry' }, {
$set: {
isdldrefre: 0,
isbm: 0,
dldinfo: {
dldpknum: 0,
dldrefrenum: 0,
dldfight: []
},
isjingcai: {
totalmoney: 0,
guessuid: ''
}
}
});
return true;
}
/**设置大乱斗战斗数据 */
static async setWzryDldFight(call: ApiCall, Fight: wangzherongyao_baoming) {
let data = Fight.data;
let _res = await G.clientCross.callApi('wzry/SetWzFight', { zkey: Fight.zkey, data: data, jifen: Fight.jifen });
return _res.res;
}
/**增加npc数据 */
static async addNpc(num: number) {
let _wzryCon = await this.getCon();
let addnpcid = _wzryCon.wangzhe.addnpcid;
let _npcFights = [];
let _zkey = await PublicShared.getToWeek();
for(let index = 0; index < num; index++){
let _fight = formatNpcData(addnpcid[index]);
let _tmp = {
data: _fight,
zkey: _zkey,
jifen: 0,
uid: _fight.player.uid
};
_npcFights.push(_tmp);
}
return _npcFights;
}
/**获取增加的积分 */
static async getMyScore(dldfight: number[]) {
let _score = 0
if (dldfight[dldfight.length-1] == 0) {
_score = 10;
} else {
_score = 2;
}
let win_num = 0;
for (let i = dldfight.length - 1; i >= 0; i--) {
if (dldfight[i] == 0) {
win_num++;
} else {
break
}
}
if (win_num > 1) {
return _score + win_num
}
return _score
}
/**红点 */
static async getHongDian(call: ApiCall) {
let _res: hongdianVal = {
show: false
};
let [isOpen, tips] = PublicShared.getOpenCond(call, "wzrybm")
if (!isOpen) return _res;
// 周一0点-22点 开启功能未报名加红点 1
// 周二0点-22点 开启功能有大乱斗次数加红点 3
// 周四钻石赛最后一场 未竞猜加红点
let status = await WangZheRongYaofun.getWangZheStatus();
let _mydata = await this.getMyData(call);
if (status.status == 1 && _mydata.isbm == 0) {
_res.show = true;
}
if (!_res.show && status.status == 3 && _mydata.dldinfo.dldpknum < G.gc.wangzherongyao.wangzhe.dlpknum) {
_res.show = true;
}
if (!_res.show && status.status == 15 && !_mydata?.isjingcai?.totalmoney) {
let _jcList = await WangZheRongYaofun.getFightGroup(call, { deep: { $gte: 5 } });
if (_jcList) {
_res.show = true;
}
}
return _res;
}
/**转str */
static async fmtContent(content: string, ...arg) {
if (arguments.length < 2) return content;
if (arguments.length == 2 && Object.prototype.toString.call(arguments[1]) == "[object Array]") {
let args = arguments[1];
for (let i = 0; i < args.length; i++) {
content = content.replace(new RegExp("\\{" + (i + 1) + "\\}", "g"), args[i]);
}
} else {
for (let i = 1; i < arguments.length; i++) {
content = content.replace(new RegExp("\\{" + i + "\\}", "g"), arguments[i]);
}
}
return content;
}
}