89 lines
3.3 KiB
TypeScript
89 lines
3.3 KiB
TypeScript
import { ApiCall } from "tsrpc";
|
|
import { HeroFun } from '../../public/hero';
|
|
import { PlayerFun } from '../../public/player';
|
|
import { ReqReset, ResReset } from "../../shared/protocols/hero/PtlReset";
|
|
import { prizeType } from '../../shared/protocols/type';
|
|
import { PublicShared } from "../../shared/public/public";
|
|
|
|
export default async function (call: ApiCall<ReqReset, ResReset>) {
|
|
let req = call.req;
|
|
if (req.type == 'qs' && Object.values(call.conn.gud.heroPos).filter(_id => _id != '').concat(call.conn.gud.helpHeros.map(h => h._id)).intersection(req._ids).length > 0) return call.errorCode(-1);
|
|
|
|
let heros = (await HeroFun.getHeros(call, req._ids)).filter(h => !!h);
|
|
if (heros.length < req._ids.length) return call.errorCode(-2);
|
|
|
|
let prize: prizeType[] = [];
|
|
if (req.type == 'yl') {
|
|
for (let hero of heros) {
|
|
if (hero.lv <= 1 && hero.jieji == 0) {
|
|
let item = G.gc.item[hero.heroId];
|
|
if (item) {
|
|
prize.push({ a: 'item', t: item.id, n: item.num });
|
|
}
|
|
}
|
|
let p = await HeroFun.delHero(call, hero);
|
|
prize.push(...p);
|
|
}
|
|
prize = PublicShared.mergePrize(prize);
|
|
prize.forEach(p => {
|
|
if (p.t == 'jinbi') p.n = Math.floor(p.n * G.gc.guanlidiaodu.hero_cz_jinbi);
|
|
});
|
|
return call.succ({
|
|
prize: prize
|
|
});
|
|
} else if (req.type == 'cz') {
|
|
// if (heros.filter(h => h.lv <= 1).length > 0) return call.errorCode(-10);
|
|
|
|
let need = G.gc.guanlidiaodu.hero_cz_need.map(n => {
|
|
return {
|
|
...n,
|
|
n: n.n * heros.length
|
|
};
|
|
});
|
|
await PlayerFun.checkNeedIsMeet(call, need);
|
|
await PlayerFun.cutNeed(call, need);
|
|
|
|
let oneHeros = heros.filter(v => v.lv <= 1 && v.jieji == 0 ).map(v => v._id);
|
|
|
|
for (let hero of heros) {
|
|
|
|
if (hero.lv > 1 || hero.jieji > 0) {
|
|
let p = await HeroFun.delHero(call, hero);
|
|
let { _id, uid, ...ops } = hero;
|
|
await HeroFun.changeHeroAttr(call, hero, ops);
|
|
prize.push(...p);
|
|
} else {
|
|
let item = G.gc.item[hero.heroId];
|
|
if (item) {
|
|
prize.push({ a: 'item', t: item.id, n: item.num });
|
|
}
|
|
}
|
|
}
|
|
|
|
oneHeros.length > 0 && await PlayerFun.cutHero(call, oneHeros);
|
|
} else if (req.type == 'qs') {
|
|
if (heros.filter(h => h.lv > 1 || h.jieji > 0).length > 0) return call.errorCode(-20);
|
|
|
|
let need = G.gc.guanlidiaodu.hero_qs_need.map(n => {
|
|
return {
|
|
...n,
|
|
n: n.n * heros.length
|
|
};
|
|
});
|
|
await PlayerFun.checkNeedIsMeet(call, need);
|
|
await PlayerFun.cutNeed(call, need);
|
|
|
|
await PlayerFun.cutHero(call, heros.map(h => h._id));
|
|
prize.push(...heros.map(c => G.gc.guanlidiaodu.hero_qs_prize[G.gc.hero[c.heroId].star] as any[]).reduce((a, b) => a.concat(b)));
|
|
}
|
|
|
|
prize.forEach(p => {
|
|
if (p.t == 'jinbi') p.n = Math.floor(p.n * G.gc.guanlidiaodu.hero_cz_jinbi);
|
|
});
|
|
prize = PublicShared.mergePrize(prize);
|
|
await PlayerFun.sendPrize(call, prize);
|
|
|
|
call.succ({
|
|
prize: prize
|
|
});
|
|
} |