✨ feat(宝物): 宝物交换继承等级
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user