装备:修复装备交换bug

This commit is contained in:
luying
2021-08-10 15:24:55 +08:00
parent e71d181e0e
commit 440b9689d8
3 changed files with 27 additions and 20 deletions

View File

@@ -615,12 +615,13 @@ export class EquipHandler {
if (index < 0)
return resResult(STATUS.WRONG_PARMS);
let equipOffInfo = <EquipType>hero.ePlace[index].equip;
console.log('**********equipOffInfo', equipOffInfo&&equipOffInfo.seqId)
let curEquip = await changeEquip(serverId, roleId, sid, equipOffInfo, equip.hid, id, equip, funcs);
if (!!curEquip)
curEquips.push(curEquip);
curEquips.push(...curEquip);
curEquip = await dressEquip(serverId, roleId, sid, hero, equip, funcs);
if (!!curEquip)
curEquips.push(curEquip);
curEquips.push(...curEquip);
//任务
//英雄满装备且都镶嵌相同阶数的宝石
@@ -632,7 +633,7 @@ export class EquipHandler {
if (!equip.hid)
return resResult(STATUS.EQUIP_NOT_EQUIPED);
let curEquip = await takeOffEquipAndCalPlayerCe(roleId, sid, hero, equip, id, funcs);
curEquips.push(curEquip);
curEquips.push(...curEquip);
}
return resResult(STATUS.SUCCESS, { curEquips: curEquips });
@@ -681,7 +682,7 @@ export class EquipHandler {
if (sortedAndSuitEquips.length > 0) {
let { equip } = sortedAndSuitEquips.shift();
let curEquip = await dressEquip(serverId, roleId, sid, hero, equip, funcs);
if (!!curEquip) curEquips.push(curEquip);
if (!!curEquip) curEquips.push(...curEquip);
}
}

View File

@@ -85,16 +85,13 @@ export async function changeEquip(serverId: number, roleId: string, sid: string,
if (!!equipA) {//需要卸下的装备
if (!!heroB) {
let goodInfo = getGoodById(equipA.id);
if (goodInfo.lvLimited > heroB.lv) {
if (goodInfo.lvLimited > heroB.lv || !checkEquipCanPut(hid, equipA.id)) { // 不能穿,就只卸载
let res = await takeOffEquipAndCalPlayerCe(roleId, sid, heroB, equipB, id, funcs);//卸下装备并重算战力
return res;
}
if (checkEquipCanPut(hid, equipA.id)) {
let res = await takeOffEquipAndCalPlayerCe(roleId, sid, heroB, equipB, id, funcs);//卸下装备并重算战力
} else {
let res = await dressEquip(serverId, roleId, sid, heroB, equipA, funcs);//替换给武将,并计算战力
return res;
}
let res = await dressEquip(serverId, roleId, sid, heroB, equipA, funcs);//替换给武将,并计算战力
return res;
} else {
let res = await takeOffEquipAndCalPlayerCe(roleId, sid, null, equipA, id, funcs);//卸下装备并重算战力
return res;
@@ -113,7 +110,7 @@ export async function changeEquip(serverId: number, roleId: string, sid: string,
* @param id
*/
export async function takeOffEquipAndCalPlayerCe(roleId: string, sid: string, hero: HeroType, equip: EquipType, id: number, funcs: number[]) {
console.log(roleId, sid, hero, equip, id)
console.log('***takeOffEquipAndCalPlayerCe', roleId, sid, hero&&hero.hid, equip.seqId, id)
if (hero) {
let args = calEquipSeids(hero);
hero = await HeroModel.removeEquip(roleId, hero.hid, id, equip._id);
@@ -126,7 +123,7 @@ export async function takeOffEquipAndCalPlayerCe(roleId: string, sid: string, he
// 任务
await checkTask(roleId, sid, funcs, TASK_TYPE.EQUIP_SUM, -1, true, {});
await checkTaskWithEquip(roleId, sid, funcs, TASK_TYPE.EQUIP_QUALITY, equip, [-1]);
return { seqId: equip.seqId, hid: 0, id: equip.id, ePlaceId: equip.ePlaceId };
return [{ seqId: equip.seqId, hid: 0, id: equip.id, ePlaceId: equip.ePlaceId }];
}
/**
* 穿戴装备并重算战力
@@ -136,9 +133,12 @@ export async function takeOffEquipAndCalPlayerCe(roleId: string, sid: string, he
* @param equip
*/
export async function dressEquip(serverId: number, roleId: string, sid: string, hero: HeroType, equip: EquipType, funcs: number[]) {
let args = calEquipSeids(hero);
console.log('***dressEquip', roleId, sid, hero&&hero.hid, equip.seqId)
hero = await HeroModel.addEquip(roleId, hero.hid, equip.ePlaceId, equip._id);
let args = calEquipSeids(hero);
let index = hero.ePlace.findIndex(cur => cur.id == equip.ePlaceId);
let equipOffInfo = <EquipType>hero.ePlace[index].equip;
hero = await HeroModel.addEquip(roleId, hero.hid, equip.ePlaceId, equip._id, equipOffInfo?._id);
await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP, sid, roleId, hero, {}, args);
// 任务
@@ -148,7 +148,13 @@ export async function dressEquip(serverId: number, roleId: string, sid: string,
await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.EQUIP_QUALITY, 1, { quality: equip.quality })
await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.EQUIP_SUM, 1)
return { seqId: equip.seqId, hid: hero.hid, id: equip.id, ePlaceId: equip.ePlaceId };
let res = [
{ seqId: equip.seqId, hid: hero.hid, id: equip.id, ePlaceId: equip.ePlaceId }
];
if(equipOffInfo) {
res.push({ seqId: equipOffInfo.seqId, hid: 0, id: equipOffInfo.id, ePlaceId: equipOffInfo.ePlaceId })
}
return res
}
export function checkEquipCanPut(hid: number, id: number) {

View File

@@ -182,14 +182,13 @@ export default class Hero extends BaseModel {
return hero;
}
public static async addEquip(roleId: string, hid: number, ePlaceId: number, equipId: string, lean = true) {
public static async addEquip(roleId: string, hid: number, ePlaceId: number, equipId: string, equipOffId: string) {
const hero: HeroType = await HeroModel.findOneAndUpdate(
{ roleId, hid, 'ePlace.id': ePlaceId },
{ $set: { 'ePlace.$.equip': equipId } },
{ new: true }).populate('ePlace.equip').lean(lean);
if (hero) {
await Equip.putOnOrOff(equipId, hero.hid);
}
{ new: true }).populate('ePlace.equip').lean();
await Equip.putOnOrOff(equipId, hero.hid);
if(equipOffId) await Equip.putOnOrOff(equipOffId, 0);
return hero;
}
@@ -198,6 +197,7 @@ export default class Hero extends BaseModel {
{ roleId, hid, 'ePlace.id': ePlaceId },
{ $set: { 'ePlace.$.equip': null } },
{ new: true }).populate('ePlace.equip').lean(lean);
if (hero) {
await Equip.putOnOrOff(equipId, 0);
}