132 lines
4.8 KiB
TypeScript
132 lines
4.8 KiB
TypeScript
import {ApiCall} from "tsrpc";
|
||
import {PlayerFun} from '../../public/player';
|
||
import {UserFun} from '../../public/user';
|
||
import {ReqUse, ResUse} from "../../shared/protocols/item/PtlUse";
|
||
import {PublicShared} from '../../shared/public/public';
|
||
import {TanXianShared} from '../../shared/public/tanxian';
|
||
import {event_dldh_addPrize} from '../event/diaoluoduihuan/ApiOpen';
|
||
import {getEventPrize} from '../tanxian/ApiEvent';
|
||
import { getItemByItemId } from "../../public/item";
|
||
|
||
const iType = {
|
||
3: 'hero',
|
||
4: 'equip',
|
||
5: 'item'
|
||
};
|
||
|
||
export default async function (call: ApiCall<ReqUse, ResUse>) {
|
||
|
||
//ȥ<><C8A5>item Redis<69><73><EFBFBD>
|
||
let itemInfo = await getItemByItemId(call.uid,call.req.itemId); //call.conn.item[call.req.itemId];
|
||
if(!itemInfo[call.req.itemId]) return call.error(globalThis.lng.item_1);
|
||
let item = itemInfo[call.req.itemId];
|
||
|
||
let useNum = call.req.useNum;
|
||
let itemConf = G.gc.item[item?.itemId];
|
||
|
||
if (!item) return call.error(globalThis.lng.item_1);
|
||
if (itemConf.type == 1) return call.error(globalThis.lng.item_2);
|
||
if (useNum < 1) return call.error(globalThis.lng.item_3);
|
||
|
||
let cutPrize: atn[] = [];
|
||
let sendPrize: atn[] = [];
|
||
|
||
if (itemConf.type == 2) {
|
||
|
||
if (useNum > item.num) return call.error(globalThis.lng.item_3);
|
||
if (itemConf.useNeed?.length > 0) {
|
||
await PlayerFun.checkNeedIsMeet(call, itemConf.useNeed.map(need => {
|
||
return {...need, n: need.n * useNum};
|
||
}));
|
||
await PlayerFun.cutNeed(call, itemConf.useNeed.map(need => {
|
||
return {...need, n: need.n * useNum};
|
||
}));
|
||
}
|
||
if (itemConf.selecPrize?.length > 0) {
|
||
if (call.req.selectIndex == undefined || !itemConf.selecPrize[call.req.selectIndex]) return call.errorCode(-3);
|
||
sendPrize.push({
|
||
...itemConf.selecPrize[call.req.selectIndex],
|
||
n: itemConf.selecPrize[call.req.selectIndex].n * useNum
|
||
});
|
||
}
|
||
|
||
if (itemConf.diaoluo) {
|
||
sendPrize.push(...PublicShared.randomDropGroup(itemConf.diaoluo, useNum));
|
||
} else if (itemConf.usePrize?.length > 0) {
|
||
itemConf.usePrize.forEach(id => {
|
||
sendPrize.push(...PublicShared.randomDropGroup(id, useNum));
|
||
});
|
||
}
|
||
|
||
if (G.gc.other[`item${itemConf.id}`] && itemConf.id == 614) {
|
||
let lv = call.conn.gud.wxcLv.lv;
|
||
let conf = G.gc.other[`item${itemConf.id}`] as _gcType['other']['item614'];
|
||
let find = conf.find(v => lv >= v.lv[0] && lv <= v.lv[1]);
|
||
sendPrize = PublicShared.randomDropGroup(find.dlz).map(dp => {
|
||
return {
|
||
...dp,
|
||
n: dp.n * useNum
|
||
};
|
||
});
|
||
}
|
||
|
||
if (itemConf.id == 24) {
|
||
|
||
let prize = TanXianShared.getGuaJiPrize(G.gc.tanxian_com.fastGuaJiTime, call.conn.gud.mapId, false);
|
||
let eventPrize = getEventPrize(call.conn.gud.lv, G.gc.tanxian_com.fastGuaJiTime, call.conn.gud.mapId, call.conn.gud.wxcLv?.lv);
|
||
let _p = [].concat(prize.prize, prize.dlz, eventPrize.prize);
|
||
// await event_dldh_addPrize(_p, call, G.gc.tanxian_com.fastGuaJiTime);
|
||
sendPrize = _p.map(atn => ({...atn, n: atn.n * useNum}));
|
||
}
|
||
|
||
cutPrize = [{
|
||
a: 'item',
|
||
t: item.itemId,
|
||
n: useNum
|
||
}];
|
||
|
||
sendPrize.forEach(atn => {
|
||
if (atn.a == 'shiwu' && !atn.colour) atn.colour = itemConf.colour;
|
||
});
|
||
} else if ([2, 3, 4].includes(itemConf.type)) {
|
||
if (useNum * itemConf.num > item.num) return call.error(globalThis.lng.item_3);
|
||
if (!itemConf[iType[itemConf.type]]) return call.error(globalThis.lng.item_4);
|
||
cutPrize = [
|
||
{
|
||
a: 'item',
|
||
t: item.itemId,
|
||
n: useNum * itemConf.num
|
||
}
|
||
];
|
||
sendPrize = [
|
||
{
|
||
a: iType[itemConf.type],
|
||
t: itemConf[iType[itemConf.type]].toString(),
|
||
n: useNum
|
||
}
|
||
];
|
||
} else if ([7, 8].includes(itemConf.type)) {
|
||
if (useNum > item.num) return call.error(globalThis.lng.item_3);
|
||
if (itemConf.type == 7) UserFun.activeHeadFrame(call.uid, itemConf.diaoluo.toString(), useNum);
|
||
if (itemConf.type == 8) UserFun.activeChatFrame(call.uid, itemConf.diaoluo.toString(), useNum);
|
||
|
||
cutPrize = [
|
||
{
|
||
a: 'item',
|
||
t: item.itemId,
|
||
n: useNum
|
||
}
|
||
];
|
||
}
|
||
|
||
if (cutPrize && sendPrize) {
|
||
await PlayerFun.cutNeed(call, cutPrize);
|
||
await PlayerFun.sendPrize(call, sendPrize);
|
||
|
||
call.succ({
|
||
prize: sendPrize
|
||
});
|
||
} else {
|
||
call.error(globalThis.lng.item_5);
|
||
}
|
||
} |