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

96 lines
3.1 KiB
TypeScript

import { OptionalId, UpdateFilter } from 'mongodb';
import { ApiCall } from "tsrpc";
import { CollectionPlayerInfo } from '../../module/collection_palyerInfo';
import { PlayerFun } from '../../public/player';
import { ReqLottery, ResLottery } from "../../shared/protocols/jiaotang/PtlLottery";
import { ResOpen } from '../../shared/protocols/jiaotang/PtlOpen';
import { PublicShared } from '../../shared/public/public';
import { HongDianChange } from '../hongdian/fun';
export default async function (call: ApiCall<ReqLottery, ResLottery>) {
let need: atn[];
let prize: atn[];
let result = await G.mongodb.collection('playerInfo', 'jiaotang').findOne({ uid: call.uid, type: 'jiaotang' });
let update: UpdateFilter<OptionalId<CollectionPlayerInfo<"jiaotang">>>;
let changeData: Partial<ResOpen>;
if (call.req.type == 1) {
let isReplace = false;
let conf = G.gc.choujiang.jiaotang[1];
let toDayZeroTime = PublicShared.getToDayZeroTime();
let oneReplaceNum = result?.oneReplaceNum || 0;
if (toDayZeroTime <= result?.freeTime) {
let meet = await PlayerFun.checkNeedByArgs(call, conf.need1, conf.need2);
need = [meet.atn];
}
prize = [];
prize = prize.concat(PublicShared.randomDropGroup(oneReplaceNum == conf.replace.num ? conf.replace.diaoluo : result?.oneNum ? conf.firstdiaoluo : conf.diaoluo));
for (let atn of prize) {
let atnConf = PublicShared.getAtnConf(atn) as any;
if (atnConf.colour >= conf.replace.colour) {
isReplace = true;
break;
}
}
update = {
$inc: { oneNum: 1 },
$set: { oneReplaceNum: isReplace ? 0 : oneReplaceNum + 1 }
};
changeData = {
oneNum: (result?.oneNum || 0) + 1
};
if (!result || !result.freeTime || result.freeTime < toDayZeroTime) {
Object.assign(update.$set, { freeTime: G.time });
Object.assign(changeData, { freeTime: G.time });
}
} else if (call.req.type == 10) {
let conf = G.gc.choujiang.jiaotang[2];
let meet = await PlayerFun.checkNeedByArgs(call, conf.need1, conf.need2);
need = [meet.atn];
let dlArr = result?.tenNum ? conf.firstdiaoluo : conf.diaoluo;
dlArr.sort(() => { return 0.5 - Math.random(); });
prize = [];
for (let id of dlArr) {
prize = prize.concat(PublicShared.randomDropGroup(id));
}
update = {
$inc: { tenNum: 1 }
};
changeData = {
tenNum: (result?.tenNum || 0) + 1
};
}
need && await PlayerFun.cutNeed(call, need);
await PlayerFun.sendPrize(call, prize);
G.mongodb.collection('playerInfo', 'jiaotang').updateOne(
{
uid: call.uid,
type: 'jiaotang'
},
{
...update
},
{
upsert: true
}
);
HongDianChange.sendChangeKey(call.uid, ['jiaotang', 'taskhd', 'huodonghd']);
call.succ({
prize: prize,
changeData: changeData
});
}