HJ_Server/src/api_s2c/lingzhulaixi/ApiSaoDang.ts
DESKTOP-15R5JU0\legu 97e070ea81 init
2023-11-17 12:02:12 +08:00

104 lines
3.4 KiB
TypeScript

import { ApiCall } from "tsrpc";
import { LingZhuLaiXifun } from "../../public/lingzhulaixi";
import { PlayerFun } from "../../public/player";
import { ReqSaoDang, ResSaoDang } from "../../shared/protocols/lingzhulaixi/PtlSaoDang";
import { PublicShared } from "../../shared/public/public";
import { HongDianChange } from "../hongdian/fun";
export default async function (call: ApiCall<ReqSaoDang, ResSaoDang>) {
let _con = await LingZhuLaiXifun.getCon(call.req.bid)
if (!_con) {
// 参数错误,无相关配置
return call.error('', { code: -1, message: globalThis.lng.lingzhulaixi_1 })
}
if (call.conn.gud.lv < _con.lv) {
// 等级不足
return call.error('', { code: -2, message: globalThis.lng.lingzhulaixi_2 })
}
// boss信息
let _bossData = await LingZhuLaiXifun.getBossData(call.req.bid)
if (_bossData.passtime != 0) {
// boss 未复活
return call.error('', { code: -3, message: globalThis.lng.lingzhulaixi_4 })
}
if (!_bossData.pkuser[call.uid]) {
// 未挑战过,请先去挑战
return call.error('', { code: -4, message: globalThis.lng.lingzhulaixi_5 })
}
let _myData = await LingZhuLaiXifun.getUsePKNum(call)
let _maxNum = G.gc.com.PiratesFight_ChallengesNum.value
let _logMaxDel = _myData.maxdps?.[_bossData.bid] || 0 // 历史最大伤害
let _num = 0 // 实际扫荡次数
let prize: atn[] = []
for (let index = 0; index < call.req.num; index++) {
_num += 1
if (_myData.num + _num > _maxNum) {
// 挑战次数不足直接跳出
break
}
_bossData.delhp += _logMaxDel
if (_bossData.delhp >= _bossData.maxhp) {
// 击杀boss
prize = prize.concat(await LingZhuLaiXifun.getPrize(_con.kill_drop))
break
} else {
prize = prize.concat(await LingZhuLaiXifun.getPrize(_con.drop))
}
_bossData.pkuser[call.uid] += _logMaxDel
}
if (!prize[0]) {
// 无奖励,没有挑战次数
return call.error('', { code: -5, message: globalThis.lng.lingzhulaixi_6 })
}
let _setData // 设置数据
if (_bossData.delhp >= _bossData.maxhp) {
_setData = {
$set: {
pkuser: {},
delhp: 0,
maxhp: await LingZhuLaiXifun.getBossMapHp(_bossData.bid),
passtime: _con.member * 60 + G.time,
randusernum: 0
}
}
Object.assign(_bossData, _setData["$set"])
// 清除玩家数据
await G.mongodb.cPlayerInfo('lingzhulaixi').updateMany(
{ type: 'lingzhulaixi' },
{ $set: G.mongodb.createTreeObj({ key: `maxdps.${call.req.bid}`, val: 0 }) }
)
} else {
_setData = {
$set: {
delhp: _bossData.delhp,
pkuser: _bossData.pkuser
}
}
}
// 设置boss数据
await LingZhuLaiXifun.setBossData(_bossData.bid, _setData)
await LingZhuLaiXifun.setMyData(call, { $inc: { num: _num } })
// 发奖
prize = PublicShared.mergePrize(prize)
await PlayerFun.sendPrize(call, prize)
// 扣除挑战次数
_myData.num += _num
HongDianChange.sendChangeKey(call.uid, ['lingzhulaixihd'])
call.succ({
mydata: _myData,
bossdata: _bossData,
prize: prize
})
}