import { ApiCall } from "tsrpc"; import { FightFun } from '../../public/fight'; import { PlayerFun } from '../../public/player'; import { ReqFight, ResFight } from "../../shared/protocols/ganhai/PtlFight"; import { prizeType } from '../../shared/protocols/type'; import { HongDianChange } from "../hongdian/fun"; export default async function (call: ApiCall) { let dbData = await G.mongodb.collection('ganhai').findOne({ uid: call.uid }); let index = call.req.index; let fightNum = dbData.useFightNum + 1; let toShipUid = dbData.ships[index]?.player?.player?.uid; let toShip if(toShipUid){ toShip = (await G.mongodb.collection('ganhai').findOne({ uid: toShipUid })).ship; } if (fightNum > G.gc.ganhai.fightNum) return call.error('', { code: -1 }); if (!toShip) return call.error('', { code: -2 }); if (toShip.beFightNum >= G.gc.ganhai.ships[toShip.index].ldNum) return call.error('', { code: -3 }); G.mongodb.collection('ganhai').updateOne({ uid: call.uid }, { $set: { ships: dbData.ships, useFightNum: fightNum } }); let change: ResFight['change'] = { useFightNum: fightNum, ships: dbData.ships }; let result = FightFun.fight([await call.conn.getDefaultFightData(), toShip.player]); result.otherData = { shipIndex: toShip.index }; FightFun.saveLog(call.uid, 'ganhai', result); FightFun.saveLog(toShip.player.player.uid, 'ganhai', {...result,winSide:result.winSide?0:1}); let prize: prizeType[] = []; if (result.winSide == 0) { // 我方胜利加1 toShip.beFightNum++; G.mongodb.collection('ganhai').updateOne({ uid: toShip.player.player.uid }, { $inc: { 'ship.beFightNum': 1 } }); let conf = G.gc.ganhai.ships[toShip.index]; prize = conf.prize.slice(1).map(atn => ({ ...atn, n: Math.floor(atn.n * conf.ldRatio) })); await PlayerFun.sendPrize(call, prize); } HongDianChange.sendChangeKey(call.uid, ['gonghuihd']); call.succ({ prize: prize, result: result, change: change }); }