HJ_Server/src/api_s2c/conglinshoulie/ApiFind.ts
xcy e00e9c4dfc fix:
丛林狩猎优化
2023-12-27 16:42:46 +08:00

91 lines
2.9 KiB
TypeScript

import { ApiCall } from "tsrpc";
import { FightFun } from '../../public/fight';
import { PlayerFun } from '../../public/player';
import { ReqFind, ResFind } from "../../shared/protocols/conglinshoulie/PtlFind";
import { PublicShared } from '../../shared/public/public';
import { addStar, clslDb } from './ApiOpen';
import { EmailFun } from "../../public/email";
export default async function (call: ApiCall<ReqFind, ResFind>) {
let weekZeroTime = PublicShared.getToWeekMondayZeroTime();
// 未到开启时间
if (G.time < weekZeroTime + G.gc.clsl_com.fightTime[0] || G.time > weekZeroTime + G.gc.clsl_com.fightTime[1]) {
return call.errorCode(-1)
};
// 获取自己的数据
let db = await clslDb().findOne({ uid: call.uid, type: 'clsl' });
let curStar = db?.allStar || 0;
let useNum = db?.useFightNum || 0;
let buyNum = db?.buyFightNum || 0;
let danPrize = db?.danPrize || [];
let curMaxStar = db?.curMaxStar || 0;
// 战斗次数不足
if (useNum >= buyNum + G.gc.clsl_com.fightNum) {
return call.errorCode(-2);
}
// 自己战斗数据
let my = await call.conn.getDefaultFightData();
// 获取一个对手
let other = (await G.clientCross.callApi('clsl/FindEnemy', { uid: call.uid, myStasr: curStar })).res;
let result = FightFun.fight([my, other.info]);
let starConf = G.gc.clsl_dan[curStar] || Object.values(G.gc.clsl_dan).slice(-1)[0];
let updata = { $inc: { useFightNum: 1 } };
// 更新战斗胜利的次数
if (result.winSide == 0) {
updata.$inc["fightWinNum"] = 1;
// 首次达到某个段位
if (curStar + 1 > curMaxStar) {
curMaxStar += 1;
updata.$inc["curMaxStar"] = 1;
}
}
// 段位奖励邮件
let title = G.gc.clsl_com.email_dan.title;
let content = G.gc.clsl_com.email_dan.content;
G.gc.clsl_com.danPrize.forEach(conf => {
// 段位未达到 或者 奖励已经发放
if (conf.star > curMaxStar || danPrize.includes(conf.star)) {
return
}
// 发放邮件
EmailFun.addEmail({
uid: call.uid,
type: 'system',
title: title,
content: content,
prize: conf.prize,
contentInsertArr:[conf.title]
})
danPrize.push(conf.star);
updata["$set"] = { danPrize: danPrize };
})
// 输了掉星 或者 赢了加星 同时更新排行数据
addStar(call, result.winSide == 0 ? 1 : -starConf.failCut, my, updata);
result.initData[0].star = curStar;
result.initData[1].star = other.allStar;
// 发送战斗奖励
await PlayerFun.sendPrize(call, starConf.fightPrize);
// 记录战斗日志
G.clientCross?.callApi('clsl/Log', { uid: call.uid, result: result });
G.clientCross?.callApi('clsl/Log', { uid: other.info.player.uid, result: result });
call.succ({ enemy: other, result: result });
}