91 lines
3.8 KiB
TypeScript
91 lines
3.8 KiB
TypeScript
|
|
import { Application, BackendSession, pinus, HandlerService, } from 'pinus';
|
|
import { uniq, findWhere, findIndex, pick } from 'underscore';
|
|
import { gameData, getPvpBoxBySeasonNumAndIndex } from '../../../pubUtils/data';
|
|
import { RoleModel, RoleType } from '../../../db/Role';
|
|
import { STATUS } from '../../../consts/statusCode';
|
|
import { resResult, genCode, checkRoleIsRobot, robotIdComBack } from '../../../pubUtils/util';
|
|
import { LadderMatchModel, LadderUpdateInter } from '../../../db/LadderMatch';
|
|
import { getBuyCntCost, getLadderData, refreshLadderDaily } from '../../../services/ladderService';
|
|
import { LadderDataReturn, LadderDefense, LadderDefenseHero } from '../../../domain/battleField/ladder';
|
|
import { LadderMatchRecModel } from '../../../db/LadderMatchRec';
|
|
import { HeroModel, HeroType } from '../../../db/Hero';
|
|
import { LADDER } from '../../../pubUtils/dicParam';
|
|
import { handleCost } from '../../../services/role/rewardService';
|
|
import { ITEM_CHANGE_REASON } from '../../../consts';
|
|
|
|
export default function (app: Application) {
|
|
new HandlerService(app, {});
|
|
return new LadderHandler(app);
|
|
}
|
|
|
|
export class LadderHandler {
|
|
constructor(private app: Application) {
|
|
}
|
|
|
|
//1获取主界面
|
|
async getData(msg: {}, session: BackendSession) {
|
|
let roleId = session.get('roleId');
|
|
|
|
let result = await getLadderData(roleId, true)
|
|
return resResult(STATUS.SUCCESS, result);
|
|
}
|
|
|
|
// 8. 设置防守阵容
|
|
async saveDefense(msg: { warId: number, heroes: { actorId: number, ai: number, dataId: number, order: number }[] }, session: BackendSession) {
|
|
let { warId, heroes } = msg;
|
|
let roleId = session.get('roleId');
|
|
|
|
let ladderData = await LadderMatchModel.findByRoleId(roleId);
|
|
if(!ladderData) return resResult(STATUS.LADDER_NOT_OPEN);
|
|
|
|
let hids: number[] = heroes.map(cur => cur.actorId);
|
|
let dbHeroes = await HeroModel.findByHidRange(hids, roleId, '_id hid ce', true);
|
|
|
|
let defenseHeroes = heroes.map(cur => {
|
|
let dbHero = dbHeroes.find(ccur => ccur.hid == cur.actorId);
|
|
return dbHero && new LadderDefenseHero(cur, dbHero._id, dbHero.ce);
|
|
}).filter(cur => cur);
|
|
let defense = new LadderDefense(defenseHeroes, warId);
|
|
ladderData = await LadderMatchModel.updateByRoleId(roleId, { defense });
|
|
// 返回
|
|
let result = new LadderDataReturn();
|
|
result.setLadderData(ladderData);
|
|
|
|
return resResult(STATUS.SUCCESS, pick(result, 'defense'));
|
|
}
|
|
|
|
|
|
// 11. 购买次数
|
|
async buyCnt(msg: { count: number }, session: BackendSession) {
|
|
let { count } = msg;
|
|
let roleId = session.get('roleId');
|
|
let sid = session.get('sid');
|
|
|
|
let ladderData = await LadderMatchModel.findByRoleId(roleId);
|
|
if(!ladderData) return resResult(STATUS.LADDER_NOT_OPEN);
|
|
|
|
let update: LadderUpdateInter = {};
|
|
// 刷新次数
|
|
let refOppObj = refreshLadderDaily(ladderData);
|
|
if(refOppObj.shouldRefOpp) {
|
|
update = { ...refOppObj };
|
|
}
|
|
|
|
if(refOppObj.buyCnt + count > LADDER.LADDER_CHALLENGE_COST_TIMES) {
|
|
return resResult(STATUS.LADDER_BUY_MAX);
|
|
}
|
|
let consumes = getBuyCntCost(refOppObj.buyCnt, count);
|
|
if(!consumes) return resResult(STATUS.LADDER_BUY_MAX);
|
|
|
|
let consumeResult = await handleCost(roleId, sid, consumes||[], ITEM_CHANGE_REASON.LADDER_BUY_CNT);
|
|
if(!consumeResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
|
|
|
update.buyCnt = refOppObj.buyCnt + count;
|
|
ladderData = await LadderMatchModel.updateByRoleId(roleId, update);
|
|
// 返回
|
|
let result = new LadderDataReturn();
|
|
result.setLadderData(ladderData);
|
|
return resResult(STATUS.SUCCESS, pick(result, 'buyCnt', 'challengeCnt'));
|
|
}
|
|
} |