任务:埋点30/70

This commit is contained in:
luying
2021-04-19 13:17:17 +08:00
parent bc07e1ea31
commit 9f4f346447
38 changed files with 1088 additions and 692 deletions
+35 -28
View File
@@ -3,10 +3,11 @@ import { EquipModel } from "../db/Equip";
import { HeroModel, EPlace, HeroType } from "../db/Hero";
import { getHeroJob, getGoodById, gameData, getJewelById, getHeroEquipByClassId } from "../pubUtils/data";
import { calPlayerCeAndSave } from "./playerCeService";
import { HERO_SYSTEM_TYPE } from "../consts";
import { HERO_SYSTEM_TYPE, TASK_TYPE } from "../consts";
import { EquipType } from "../db/Equip";
import { calEquipSeids } from '../pubUtils/playerCe';
import { indexOf, findIndex } from 'underscore';
import { checkTask, checkTaskWithHero, checkTaskWithEquip } from './taskService';
/**
* 校验前端传入的消耗数量是否准确,并返回消耗的道具并加上特殊材料needConsumes
* @param consumes
@@ -44,40 +45,42 @@ export function checkMaterialEnough(consumes:Array<{id: number, count: number}>,
return needConsumes;
}
/**
* 将装备卸载下来,并坚持是否有替换装备的武将,若有则替换
* @param roleId
* 将装备卸载下来,并检查是否有替换装备的武将,若有则替换
* 武将A(装备A)&武将B(装备B) ==> 武将A(装备B)&武将B(装备A)
* @param roleId 玩家id
* @param sid
* @param equip
* @param hid
* @param id
* @param seqId
* @param equip 目标武将要卸下的装备,装备A
* @param hid 要装上的装备备原来装备着的武将id, 武将B
* @param id 装备类型
* @param seqId 要装上的装备的唯一id 装备B
*/
export async function changeEquip(roleId: string, sid: string, equip: EquipType, hid: number, id: number, seqId: number) {
let hero;
export async function changeEquip(roleId: string, sid: string, equipA: EquipType, hid: number, id: number, equipB: EquipType) {
let heroB: HeroType;
if (!!hid) //需要卸下或者替换的武将
hero = await HeroModel.findByHidAndRoleWithEquip(hid, roleId);//需要替换的武将
if (!!equip) {//需要卸下的装备
if (!!hero) {
let goodInfo = getGoodById(equip.id);
if (goodInfo.lvLimited > hero.lv) {
let res = await takeOffEquip(equip.seqId);//不能替换,卸载装备不算战力
heroB = await HeroModel.findByHidAndRoleWithEquip(hid, roleId);//需要替换的武将
if (!!equipA) {//需要卸下的装备
if (!!heroB) {
let goodInfo = getGoodById(equipA.id);
if (goodInfo.lvLimited > heroB.lv) {
let res = await takeOffEquipAndCalPlayerCe(roleId, sid, heroB, equipB, id);//卸下装备并重算战力
return res;
}
let { jobid } = gameData.hero.get(hid);
let { job_class } = getHeroJob(jobid);
let { classId } = getHeroEquipByClassId(goodInfo.itid);
if (indexOf(classId, job_class) < 0) {
let res = await takeOffEquip(equip.seqId);//不能替换,卸载装备不算战力
let res = await takeOffEquipAndCalPlayerCe(roleId, sid, heroB, equipB, id);//卸下装备并重算战力
return res;
}
let res = await dressEquip(roleId, sid, hero, equip);//替换给武将,并计算战力
let res = await dressEquip(roleId, sid, heroB, equipA);//替换给武将,并计算战力
return res;
} else {
let res = await takeOffEquip(equip.seqId);//不能替换,卸载装备不算战力
let res = await takeOffEquipAndCalPlayerCe(roleId, sid, heroB, equipB, id);//卸下装备并重算战力
return res;
}
} else if (!!hero) {//从穿戴装备的武将上卸下装备
await takeOffEquipAndCalPlayerCe(roleId, sid, hero, equip, id);//卸下装备并重算战力
} else if (!!heroB) {//从穿戴装备的武将上卸下装备
await takeOffEquipAndCalPlayerCe(roleId, sid, heroB, equipB, id);//卸下装备并重算战力
}
}
/**
@@ -93,6 +96,12 @@ export async function takeOffEquipAndCalPlayerCe(roleId: string, sid: string, he
hero = await HeroModel.removeEquip(roleId, hero.hid, id, equip._id);
await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP, sid, roleId, hero, {}, args);
// 任务
await checkTask(roleId, sid, TASK_TYPE.EQUIP_SUM, 1, true, {});
await checkTaskWithHero(roleId, sid, TASK_TYPE.EQUIP_BY_HERO, hero, [1]);
await checkTaskWithEquip(roleId, sid, TASK_TYPE.EQUIP_QUALITY, equip, [1]);
return { seqId: equip.seqId, hid: 0};
}
/**
@@ -107,13 +116,11 @@ export async function dressEquip(roleId: string, sid: string, hero:HeroType, equ
hero = await HeroModel.addEquip(roleId, hero.hid, equip.ePlaceId, equip._id);
await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP, sid, roleId, hero, {}, args);
// 任务
await checkTask(roleId, sid, TASK_TYPE.EQUIP_SUM, -1, true, {});
await checkTaskWithHero(roleId, sid, TASK_TYPE.EQUIP_BY_HERO, hero, [-1]);
await checkTaskWithEquip(roleId, sid, TASK_TYPE.EQUIP_QUALITY, equip, [-1]);
return { seqId: equip.seqId, hid: hero.hid };
}
/**
* 修改装备未穿戴状态,不计算战力
* @param seqId
*/
async function takeOffEquip(seqId: number) {
await EquipModel.updateEquipInfo(seqId, { hid: 0 });
return { seqId, hid: 0};
}