✨ feat(将魂出售): 修复将魂回收的问题
4cfbce94e - 2fa8c7a91 by zhangxk
This commit is contained in:
@@ -5,7 +5,7 @@ import { STATUS, GUILD_STRUCTURE, ITID, CONSUME_TYPE, HERO_QUALITY_TYPE, HERO_GR
|
||||
import { UserShopModel } from "../../../db/UserShop";
|
||||
import { handleCost, addItems } from "../../../services/role/rewardService";
|
||||
import { SHOP } from "../../../pubUtils/dicParam";
|
||||
import { HeroModel } from "../../../db/Hero";
|
||||
import { HeroModel, HeroType } from "../../../db/Hero";
|
||||
import { checkShopInPurchase, getShopDicById, getShopListByType, getShopPrice } from "../../../services/shopService";
|
||||
import { RewardInter, recycleSoulFastPara } from "../../../pubUtils/interface";
|
||||
import { UserShopTypeModel } from "../../../db/UserShopType";
|
||||
@@ -172,35 +172,44 @@ export class ShopHandler {
|
||||
let roleId = session.get('roleId');
|
||||
let roleName = session.get('roleName');
|
||||
let sid = session.get('sid');
|
||||
let { recycleSoulFastPara } = msg;
|
||||
|
||||
// 检测参数,防止hid、goodsId重复
|
||||
let { recycleSoulFastPara } = msg;
|
||||
// 检测参数,防止hid重复
|
||||
let checkHid = new Map<number, number>();
|
||||
let checkGoodsId = new Map<number, number>();
|
||||
for (let { hid, goodsId, count } of recycleSoulFastPara) {
|
||||
if (checkHid.get(hid) || checkGoodsId.get(goodsId)) return resResult(STATUS.WRONG_PARMS);
|
||||
for (let { hid, count } of recycleSoulFastPara) {
|
||||
if (checkHid.get(hid)) return resResult(STATUS.WRONG_PARMS);
|
||||
checkHid.set(hid, 1);
|
||||
checkGoodsId.set(goodsId, count);
|
||||
}
|
||||
|
||||
let items = await ItemModel.find({ roleId, id: { $in: recycleSoulFastPara.map(obj => obj.goodsId) } });
|
||||
if (!items || items.length == 0) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||
// 从db获取所有武将数据
|
||||
const dbHeros = await HeroModel.findByHidsAndRole(roleId, recycleSoulFastPara.map(obj => obj.hid)) as HeroType[];
|
||||
let heroesMap = new Map<number, HeroType>();
|
||||
let items = []
|
||||
for (const val of dbHeros) {
|
||||
let hid = val.hid
|
||||
heroesMap.set(hid, val);
|
||||
|
||||
const itemsMap = arrToMap(items, obj => obj.id);
|
||||
let dicHero = gameData.hero.get(hid);
|
||||
if (!dicHero || !dicHero.pieceId) continue;
|
||||
items.push(dicHero.pieceId);
|
||||
}
|
||||
// 从db获取相关碎片道具数据
|
||||
if (!items || items.length == 0) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||
const dbItems = await ItemModel.findbyRoleAndIds(roleId, items);
|
||||
if (!dbItems || dbItems.length == 0) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||
const itemsMap = arrToMap(dbItems, obj => obj.id);
|
||||
|
||||
let allAddItem = [];
|
||||
let allCostItem = [];
|
||||
for (let { hid, goodsId, count } of recycleSoulFastPara) {
|
||||
let dicGoods = gameData.goods.get(goodsId);
|
||||
if (!dicGoods) return resResult(STATUS.WRONG_PARMS);
|
||||
if (hid != dicGoods.hid) return resResult(STATUS.WRONG_PARMS);//校验一下hid和goodsId是否对应
|
||||
|
||||
for (let { hid, count } of recycleSoulFastPara) {
|
||||
let residueFragment = 0;
|
||||
let goodsId = gameData.hero.get(hid)?.pieceId || 0;
|
||||
const curItemCount = itemsMap.get(goodsId)?.count || 0;
|
||||
if (curItemCount <= 0) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||
|
||||
let hero = await HeroModel.findByHidAndRole(hid, roleId);
|
||||
let hero = heroesMap.get(hid);
|
||||
if (!hero) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
|
||||
if (hero.colorStar != HERO_GROW_MAX.COLORSTAR) {
|
||||
residueFragment = await calUpSixColorsResidueFragment(roleId, hero, hid, curItemCount);
|
||||
if (!residueFragment || count > residueFragment) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||
@@ -208,17 +217,21 @@ export class ShopHandler {
|
||||
|
||||
allCostItem.push({ id: goodsId, count: count });
|
||||
|
||||
let dicGoods = gameData.goods.get(goodsId);
|
||||
if (!dicGoods) return resResult(STATUS.DIC_DATA_NOT_FOUND)
|
||||
|
||||
let reward: RewardInter[] = [];
|
||||
switch (dicGoods.quality) {
|
||||
case HERO_QUALITY_TYPE.BLUE:
|
||||
allAddItem.push(...parseGoodStr(SHOP.HERO_SOUL_BULE)); break
|
||||
reward = parseGoodStr(SHOP.HERO_SOUL_BULE); break;
|
||||
case HERO_QUALITY_TYPE.PURPLE:
|
||||
allAddItem.push(...parseGoodStr(SHOP.HERO_SOUL_PURPLE)); break;
|
||||
reward = parseGoodStr(SHOP.HERO_SOUL_PURPLE); break;
|
||||
case HERO_QUALITY_TYPE.GOLD:
|
||||
allAddItem.push(...parseGoodStr(SHOP.HERO_SOUL_GOLDEN)); break;
|
||||
reward = parseGoodStr(SHOP.HERO_SOUL_GOLDEN); break;
|
||||
case HERO_QUALITY_TYPE.UR:
|
||||
allAddItem.push(...parseGoodStr(SHOP.HERO_SOUL_UR)); break;
|
||||
reward = parseGoodStr(SHOP.HERO_SOUL_UR); break;
|
||||
}
|
||||
allAddItem.map(cur => { return { id: cur.id, count: cur.count * count } })
|
||||
allAddItem.push(...reward.map(cur => { return { id: cur.id, count: cur.count * count } }));
|
||||
}
|
||||
|
||||
let costResult = await handleCost(roleId, sid, allCostItem, ITEM_CHANGE_REASON.RECYCLE_SOUL);
|
||||
@@ -230,7 +243,7 @@ export class ShopHandler {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// !测试接口。 去除限购次数
|
||||
async debugClearPurchaseLimit(msg: {}, session: BackendSession) {
|
||||
let roleId = session.get('roleId');
|
||||
|
||||
Reference in New Issue
Block a user