装备:修复装备交换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
@@ -615,12 +615,13 @@ export class EquipHandler {
if (index < 0) if (index < 0)
return resResult(STATUS.WRONG_PARMS); return resResult(STATUS.WRONG_PARMS);
let equipOffInfo = <EquipType>hero.ePlace[index].equip; 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); let curEquip = await changeEquip(serverId, roleId, sid, equipOffInfo, equip.hid, id, equip, funcs);
if (!!curEquip) if (!!curEquip)
curEquips.push(curEquip); curEquips.push(...curEquip);
curEquip = await dressEquip(serverId, roleId, sid, hero, equip, funcs); curEquip = await dressEquip(serverId, roleId, sid, hero, equip, funcs);
if (!!curEquip) if (!!curEquip)
curEquips.push(curEquip); curEquips.push(...curEquip);
//任务 //任务
//英雄满装备且都镶嵌相同阶数的宝石 //英雄满装备且都镶嵌相同阶数的宝石
@@ -632,7 +633,7 @@ export class EquipHandler {
if (!equip.hid) if (!equip.hid)
return resResult(STATUS.EQUIP_NOT_EQUIPED); return resResult(STATUS.EQUIP_NOT_EQUIPED);
let curEquip = await takeOffEquipAndCalPlayerCe(roleId, sid, hero, equip, id, funcs); let curEquip = await takeOffEquipAndCalPlayerCe(roleId, sid, hero, equip, id, funcs);
curEquips.push(curEquip); curEquips.push(...curEquip);
} }
return resResult(STATUS.SUCCESS, { curEquips: curEquips }); return resResult(STATUS.SUCCESS, { curEquips: curEquips });
@@ -681,7 +682,7 @@ export class EquipHandler {
if (sortedAndSuitEquips.length > 0) { if (sortedAndSuitEquips.length > 0) {
let { equip } = sortedAndSuitEquips.shift(); let { equip } = sortedAndSuitEquips.shift();
let curEquip = await dressEquip(serverId, roleId, sid, hero, equip, funcs); let curEquip = await dressEquip(serverId, roleId, sid, hero, equip, funcs);
if (!!curEquip) curEquips.push(curEquip); if (!!curEquip) curEquips.push(...curEquip);
} }
} }
+17 -11
View File
@@ -85,16 +85,13 @@ export async function changeEquip(serverId: number, roleId: string, sid: string,
if (!!equipA) {//需要卸下的装备 if (!!equipA) {//需要卸下的装备
if (!!heroB) { if (!!heroB) {
let goodInfo = getGoodById(equipA.id); 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);//卸下装备并重算战力 let res = await takeOffEquipAndCalPlayerCe(roleId, sid, heroB, equipB, id, funcs);//卸下装备并重算战力
return res; return res;
} } else {
if (checkEquipCanPut(hid, equipA.id)) { let res = await dressEquip(serverId, roleId, sid, heroB, equipA, funcs);//替换给武将,并计算战力
let res = await takeOffEquipAndCalPlayerCe(roleId, sid, heroB, equipB, id, funcs);//卸下装备并重算战力
return res; return res;
} }
let res = await dressEquip(serverId, roleId, sid, heroB, equipA, funcs);//替换给武将,并计算战力
return res;
} else { } else {
let res = await takeOffEquipAndCalPlayerCe(roleId, sid, null, equipA, id, funcs);//卸下装备并重算战力 let res = await takeOffEquipAndCalPlayerCe(roleId, sid, null, equipA, id, funcs);//卸下装备并重算战力
return res; return res;
@@ -113,7 +110,7 @@ export async function changeEquip(serverId: number, roleId: string, sid: string,
* @param id * @param id
*/ */
export async function takeOffEquipAndCalPlayerCe(roleId: string, sid: string, hero: HeroType, equip: EquipType, id: number, funcs: number[]) { 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) { if (hero) {
let args = calEquipSeids(hero); let args = calEquipSeids(hero);
hero = await HeroModel.removeEquip(roleId, hero.hid, id, equip._id); 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 checkTask(roleId, sid, funcs, TASK_TYPE.EQUIP_SUM, -1, true, {});
await checkTaskWithEquip(roleId, sid, funcs, TASK_TYPE.EQUIP_QUALITY, equip, [-1]); 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 * @param equip
*/ */
export async function dressEquip(serverId: number, roleId: string, sid: string, hero: HeroType, equip: EquipType, funcs: number[]) { 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); 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_QUALITY, 1, { quality: equip.quality })
await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.EQUIP_SUM, 1) 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) { export function checkEquipCanPut(hid: number, id: number) {
+5 -5
View File
@@ -182,14 +182,13 @@ export default class Hero extends BaseModel {
return hero; 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( const hero: HeroType = await HeroModel.findOneAndUpdate(
{ roleId, hid, 'ePlace.id': ePlaceId }, { roleId, hid, 'ePlace.id': ePlaceId },
{ $set: { 'ePlace.$.equip': equipId } }, { $set: { 'ePlace.$.equip': equipId } },
{ new: true }).populate('ePlace.equip').lean(lean); { new: true }).populate('ePlace.equip').lean();
if (hero) { await Equip.putOnOrOff(equipId, hero.hid);
await Equip.putOnOrOff(equipId, hero.hid); if(equipOffId) await Equip.putOnOrOff(equipOffId, 0);
}
return hero; return hero;
} }
@@ -198,6 +197,7 @@ export default class Hero extends BaseModel {
{ roleId, hid, 'ePlace.id': ePlaceId }, { roleId, hid, 'ePlace.id': ePlaceId },
{ $set: { 'ePlace.$.equip': null } }, { $set: { 'ePlace.$.equip': null } },
{ new: true }).populate('ePlace.equip').lean(lean); { new: true }).populate('ePlace.equip').lean(lean);
if (hero) { if (hero) {
await Equip.putOnOrOff(equipId, 0); await Equip.putOnOrOff(equipId, 0);
} }