feat(宝物): 宝物交换继承等级

This commit is contained in:
luying
2023-03-14 17:23:42 +08:00
parent 261a4b7a77
commit 59914323d6
3 changed files with 33 additions and 13 deletions

View File

@@ -5,7 +5,7 @@ import { HeroModel } from "../../../db/Hero";
import { ArtifactParam } from "../../../domain/roleField/hero";
import { gameData, getArtifactByGidAndType, getArtifactStageZero, getArtifactWithQuality, getDicArtifactLvByPlanId, getNextArtifact } from "../../../pubUtils/data";
import { ARTIFACT, BAG } from "../../../pubUtils/dicParam";
import { ItemInter } from "../../../pubUtils/interface";
import { ItemInter, RewardInter } from "../../../pubUtils/interface";
import { resResult, parseGoodStr, arrToMap, genCode } from "../../../pubUtils/util";
import { checkArtifactCanCompose, getRebuildConsume, hasArtifactStrength } from "../../../services/equipService";
@@ -25,36 +25,53 @@ export class ArtifactHandler {
constructor(private app: Application) {
}
public async putOn(msg: { seqId: number, hid: number }, session: BackendSession) {
public async putOn(msg: { seqId: number, hid: number, isExtendLv: boolean }, session: BackendSession) {
let roleId: string = session.get('roleId');
let roleName: string = session.get('roleName');
let sid: string = session.get('sid');
let serverId: number = session.get('serverId');
let { seqId, hid } = msg;
let { seqId, hid, isExtendLv } = msg;
let hero = await HeroModel.findByHidAndRole(hid, roleId);
if (!hero) return resResult(STATUS.HERO_NOT_FIND);
let chosenArtifact = await ArtifactModel.findbySeqId(roleId, seqId);
if(!chosenArtifact) return resResult(STATUS.ARTIFACT_IS_NOT_FIND);
if(chosenArtifact.lv > 0) isExtendLv = false;
let artifacts: ArtifactModelType[] = [];
let artifactOfHero = hero.artifact? await ArtifactModel.findbySeqId(roleId, hero.artifact): null; // 原本自己的天晶石
if(chosenArtifact.hid != 0) { // 如果天晶石原本镶嵌在其他武将身上,把自己的给他
let heroOfChosenArtifact = await HeroModel.findByHidAndRole(chosenArtifact.hid, roleId); // 我想要的宝物的原持有者
if(heroOfChosenArtifact) {
await calculateCeWithHero(HERO_SYSTEM_TYPE.PUT_ARTIFACT, roleId, serverId, sid, heroOfChosenArtifact.hid, { artifact: hero.artifact||0 }, { artifact: artifactOfHero, job: heroOfChosenArtifact.job, skinId: heroOfChosenArtifact.skinId }); // 把我的换给他
let targetLv = artifactOfHero?.lv, returnCoin: RewardInter[] = [];
let dicChosenArtifact = getArtifactWithQuality(chosenArtifact.artifactId);
if(!dicChosenArtifact) return resResult(STATUS.DIC_DATA_NOT_FOUND);
if(isExtendLv && targetLv > dicChosenArtifact.maxLv) {
for(let lv = dicChosenArtifact.maxLv + 1; lv <= targetLv; lv++) {
let dicArtifactLv = getDicArtifactLvByPlanId(dicChosenArtifact.lvAttrPlan, lv);
if(!dicArtifactLv) break;
returnCoin.push(...dicArtifactLv.consumes);
}
}
targetLv = dicChosenArtifact.maxLv;
};
if(artifactOfHero) { // 更新自己的天晶石
artifactOfHero = await ArtifactModel.putOnOrOff(roleId, artifactOfHero.seqId, chosenArtifact.hid||0);
artifactOfHero = await ArtifactModel.putOnOrOff(roleId, artifactOfHero.seqId, 0, isExtendLv? 0: undefined);
if(artifactOfHero) artifacts.push(artifactOfHero);
}
chosenArtifact = await ArtifactModel.putOnOrOff(roleId, seqId, hid);
if(chosenArtifact.hid != 0) {
let heroOfChosenArtifact = await HeroModel.findByHidAndRole(chosenArtifact.hid, roleId); // 我想要的宝物的原持有者
if(heroOfChosenArtifact) {
await calculateCeWithHero(HERO_SYSTEM_TYPE.PUT_OFF_ARTIFACT, roleId, serverId, sid, heroOfChosenArtifact.hid, { artifact: 0 }); // 对方卸下
}
}
chosenArtifact = await ArtifactModel.putOnOrOff(roleId, seqId, hid, isExtendLv? targetLv: undefined);
if(chosenArtifact) artifacts.push(chosenArtifact);
await calculateCeWithHero(HERO_SYSTEM_TYPE.PUT_ARTIFACT, roleId, serverId, sid, hid, { artifact: seqId }, { artifact: chosenArtifact, job: hero.job, skinId: hero.skinId }); // 把我的换给他
await checkTask(serverId, roleId, sid, TASK_TYPE.ARTIFACT_QUALITY_EQUIP, { artifacts });
return resResult(STATUS.SUCCESS, { artifacts: artifacts.map(artifact => new ArtifactParam(artifact)) });
let goods = returnCoin.length > 0? await addItems(roleId, roleName, sid, combineItems(returnCoin), ITEM_CHANGE_REASON.ARTIFACT_LV_RETURN): undefined;
return resResult(STATUS.SUCCESS, { artifacts: artifacts.map(artifact => new ArtifactParam(artifact)), goods });
}
public async putOff(msg: { seqId: number }, session: BackendSession) {

View File

@@ -1139,6 +1139,7 @@ export enum ITEM_CHANGE_REASON {
GVG_TECH_SEND_KNIFE = 173, // gvg点科技树发放诸葛连弩
GVG_REVIVE = 174, // gvg复活队伍
GVG_USE_ITEM = 175, // gvg使用连弩
ARTIFACT_LV_RETURN = 176, // 宝物继承等级返还
}
export enum TA_EVENT {

View File

@@ -85,8 +85,10 @@ export default class Artifact extends BaseModel {
return result;
}
public static async putOnOrOff(roleId: string, seqId: number, hid: number) {
let rec: ArtifactModelType = await ArtifactModel.findOneAndUpdate({ roleId, seqId }, { $set: { hid } }, { new: true }).lean();
public static async putOnOrOff(roleId: string, seqId: number, hid: number, lv?: number) {
let update: ArtifactModelUpdate = { hid };
if(lv != undefined) update.lv = lv;
let rec: ArtifactModelType = await ArtifactModel.findOneAndUpdate({ roleId, seqId }, { $set: update }, { new: true }).lean();
return rec;
}