✨ feat(宝物): 宝物交换继承等级
This commit is contained in:
@@ -5,7 +5,7 @@ import { HeroModel } from "../../../db/Hero";
|
|||||||
import { ArtifactParam } from "../../../domain/roleField/hero";
|
import { ArtifactParam } from "../../../domain/roleField/hero";
|
||||||
import { gameData, getArtifactByGidAndType, getArtifactStageZero, getArtifactWithQuality, getDicArtifactLvByPlanId, getNextArtifact } from "../../../pubUtils/data";
|
import { gameData, getArtifactByGidAndType, getArtifactStageZero, getArtifactWithQuality, getDicArtifactLvByPlanId, getNextArtifact } from "../../../pubUtils/data";
|
||||||
import { ARTIFACT, BAG } from "../../../pubUtils/dicParam";
|
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 { resResult, parseGoodStr, arrToMap, genCode } from "../../../pubUtils/util";
|
||||||
import { checkArtifactCanCompose, getRebuildConsume, hasArtifactStrength } from "../../../services/equipService";
|
import { checkArtifactCanCompose, getRebuildConsume, hasArtifactStrength } from "../../../services/equipService";
|
||||||
@@ -25,36 +25,53 @@ export class ArtifactHandler {
|
|||||||
constructor(private app: Application) {
|
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 roleId: string = session.get('roleId');
|
||||||
|
let roleName: string = session.get('roleName');
|
||||||
let sid: string = session.get('sid');
|
let sid: string = session.get('sid');
|
||||||
let serverId: number = session.get('serverId');
|
let serverId: number = session.get('serverId');
|
||||||
|
|
||||||
let { seqId, hid } = msg;
|
let { seqId, hid, isExtendLv } = msg;
|
||||||
let hero = await HeroModel.findByHidAndRole(hid, roleId);
|
let hero = await HeroModel.findByHidAndRole(hid, roleId);
|
||||||
if (!hero) return resResult(STATUS.HERO_NOT_FIND);
|
if (!hero) return resResult(STATUS.HERO_NOT_FIND);
|
||||||
|
|
||||||
let chosenArtifact = await ArtifactModel.findbySeqId(roleId, seqId);
|
let chosenArtifact = await ArtifactModel.findbySeqId(roleId, seqId);
|
||||||
if(!chosenArtifact) return resResult(STATUS.ARTIFACT_IS_NOT_FIND);
|
if(!chosenArtifact) return resResult(STATUS.ARTIFACT_IS_NOT_FIND);
|
||||||
|
if(chosenArtifact.lv > 0) isExtendLv = false;
|
||||||
|
|
||||||
let artifacts: ArtifactModelType[] = [];
|
let artifacts: ArtifactModelType[] = [];
|
||||||
let artifactOfHero = hero.artifact? await ArtifactModel.findbySeqId(roleId, hero.artifact): null; // 原本自己的天晶石
|
let artifactOfHero = hero.artifact? await ArtifactModel.findbySeqId(roleId, hero.artifact): null; // 原本自己的天晶石
|
||||||
if(chosenArtifact.hid != 0) { // 如果天晶石原本镶嵌在其他武将身上,把自己的给他
|
let targetLv = artifactOfHero?.lv, returnCoin: RewardInter[] = [];
|
||||||
let heroOfChosenArtifact = await HeroModel.findByHidAndRole(chosenArtifact.hid, roleId); // 我想要的宝物的原持有者
|
let dicChosenArtifact = getArtifactWithQuality(chosenArtifact.artifactId);
|
||||||
if(heroOfChosenArtifact) {
|
if(!dicChosenArtifact) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||||
await calculateCeWithHero(HERO_SYSTEM_TYPE.PUT_ARTIFACT, roleId, serverId, sid, heroOfChosenArtifact.hid, { artifact: hero.artifact||0 }, { artifact: artifactOfHero, job: heroOfChosenArtifact.job, skinId: heroOfChosenArtifact.skinId }); // 把我的换给他
|
|
||||||
|
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) { // 更新自己的天晶石
|
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);
|
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);
|
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 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 });
|
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) {
|
public async putOff(msg: { seqId: number }, session: BackendSession) {
|
||||||
|
|||||||
@@ -1139,6 +1139,7 @@ export enum ITEM_CHANGE_REASON {
|
|||||||
GVG_TECH_SEND_KNIFE = 173, // gvg点科技树发放诸葛连弩
|
GVG_TECH_SEND_KNIFE = 173, // gvg点科技树发放诸葛连弩
|
||||||
GVG_REVIVE = 174, // gvg复活队伍
|
GVG_REVIVE = 174, // gvg复活队伍
|
||||||
GVG_USE_ITEM = 175, // gvg使用连弩
|
GVG_USE_ITEM = 175, // gvg使用连弩
|
||||||
|
ARTIFACT_LV_RETURN = 176, // 宝物继承等级返还
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum TA_EVENT {
|
export enum TA_EVENT {
|
||||||
|
|||||||
@@ -85,8 +85,10 @@ export default class Artifact extends BaseModel {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async putOnOrOff(roleId: string, seqId: number, hid: number) {
|
public static async putOnOrOff(roleId: string, seqId: number, hid: number, lv?: number) {
|
||||||
let rec: ArtifactModelType = await ArtifactModel.findOneAndUpdate({ roleId, seqId }, { $set: { hid } }, { new: true }).lean();
|
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;
|
return rec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user