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

73 lines
2.3 KiB
TypeScript

import {ApiCall} from "tsrpc";
import {FightFun} from '../../public/fight';
import {PlayerFun} from "../../public/player";
import {formatNpcData} from '../../shared/fightControl/fightFun';
import {ReqChallenge, ResChallenge} from "../../shared/protocols/ganbutexun/PtlChallenge";
export default async function (call: ApiCall<ReqChallenge, ResChallenge>) {
let heroid = call.req.id;
let conf = G.gc.ganbutexun[heroid];
// 判断开启条件
// 判断关卡进度 TODO
let isUnlock = Object.entries(conf.cond).every(v => call.conn.gud[v[0]] >= v[1]);
if (!isUnlock) {
return call.error('', {code: -1});
}
let need = [conf.need];
await PlayerFun.checkNeedIsMeet(call, need);
// 战斗 TODO
let prize = [];
let addnum = 0;
let fightNum = (await G.mongodb.collection('gbtx').findOne({uid: call.uid}))?.fightNum?.[call.req.id] || 0;
fightNum + 1;
let lv = fightNum % 6 + fightNum;
let npc = formatNpcData(conf.battle, null, lv);
const result = FightFun.fight([await call.conn.getDefaultFightData(), npc]);
const isWin = result.winSide == 0;
if (isWin) {
addnum = G.gc.common.gbtxcom.gbtxadd;
let data = await G.redis.get('gbtx', call.uid, 'luck');
let prizeArr = JSON.parse(JSON.stringify(conf.prize));
let obj = {};
obj['luck.' + call.req.id] = addnum;
data[call.req.id] = data[call.req.id] || 0;
prize = (data[call.req.id] > 0 && data[call.req.id] % 6 == 5) ? prizeArr.map((item) => {
item.n *= 2;
return item;
}) : prizeArr;
data[call.req.id] += addnum;
G.redis.set('gbtx', call.uid, 'luck', data);
await PlayerFun.cutNeed(call, need);
await PlayerFun.addItem(call, prize);
G.mongodb.collection('gbtx').updateOne(
{uid: call.uid},
{
$inc: obj
},
{
upsert: true
}
);
}
G.mongodb.collection('gbtx').updateOne(
{uid: call.uid},
{
$inc: G.mongodb.createTreeObj({key: `fightNum.${call.req.id}`, val: 1})
},
{
upsert: true
}
);
return call.succ({
addluck: addnum,
prize: prize,
fightobj: result
});
}