获得战报,刷新,领取
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import {Application, BackendSession} from 'pinus';
|
||||
const _ = require('underscore');
|
||||
import { gameData } from '../../../pubUtils/data';
|
||||
import { checkPvp, initPvpInfo, refreshEnemies, getEnemies, getPlusScore, getLvByScore, defaultHeroes, checkRoleIsRobot} from '../../../services/pvpService';
|
||||
import { gameData, getPvpBoxs } from '../../../pubUtils/data';
|
||||
import { checkPvp, initPvpInfo, refreshEnemies, getEnemies, getPlusScore, getLvByScore, defaultHeroes, comsumeChallengeCnt, refresh, findPvpDefByRoleId, checkRoleIsRobot } from '../../../services/pvpService';
|
||||
import { RoleModel, RoleType } from '../../../db/Role';
|
||||
import { STATUS } from '../../../consts/statusCode';
|
||||
import { resResult, reduceCe, genCode } from '../../../pubUtils/util';
|
||||
@@ -11,6 +11,7 @@ import { PvpDefenseModel, PvpDefenseType, OppPlayers } from '../../../db/PvpDefe
|
||||
import { oppHeroesDefenseInter, pvpEndParamInter, RankParam, PlayerDetail, PlayerDetailHero } from '../../../pubUtils/interface';
|
||||
import { PVP_HERO_POS, REDIS_KEY } from '../../../consts';
|
||||
|
||||
import { addItems } from '../../../services/rewardService';
|
||||
import { HeroType, HeroModel } from '../../../db/Hero';
|
||||
import { CeAttrNumber } from '../../../db/generalField';
|
||||
import { checkBattleHeroesByHid } from '../../../services/normalBattleService';
|
||||
@@ -31,10 +32,10 @@ export class PvpHandler {
|
||||
let roleId = session.get('roleId');
|
||||
let pvpDefense = await PvpDefenseModel.findByRoleIdIncludeAll(roleId);
|
||||
let oppPlayers = await getEnemies(pvpDefense.oppPlayers, pvpDefense.winStreakNum);
|
||||
let {warId, seasonNum, seasonEndTime} = await SystemConfigModel.findSystemConfig();
|
||||
let {heroes, score, pLv, winStreakNum, refOppCnt, challengeCnt, challengeRefTime, receivedBox, hisScore, heroScores, isFirstEntry} = pvpDefense;
|
||||
let { warId, seasonNum, seasonEndTime } = await SystemConfigModel.findSystemConfig();
|
||||
let { heroes, score, pLv, winStreakNum, refOppCnt, challengeCnt, challengeRefTime, receivedBox, hisScore, heroScores, isFirstEntry } = pvpDefense;
|
||||
if (pvpDefense.seasonNum !== seasonNum) {
|
||||
let { score, pLv, winStreakNum, heroScores, refOppCnt, challengeCnt, challengeRefTime } = await setPvpDefResult(pvpDefense, seasonNum);
|
||||
let { score, pLv, winStreakNum, heroScores, refOppCnt, challengeCnt, challengeRefTime } = await setPvpDefResult(pvpDefense, seasonNum, seasonEndTime);
|
||||
}
|
||||
if (isFirstEntry) {
|
||||
await PvpDefenseModel.updateInfo(roleId, {isFirstEntry:false});
|
||||
@@ -143,10 +144,14 @@ export class PvpHandler {
|
||||
let checkHeroes = await checkBattleHeroesByHid(roleId, heroes);
|
||||
if(!checkHeroes) return resResult(STATUS.BATTLE_HERO_NOT_FOUND);
|
||||
|
||||
// TODO 检查挑战次数
|
||||
|
||||
const pvpDefense = await PvpDefenseModel.findByRoleId(roleId);
|
||||
if(!pvpDefense) return resResult(STATUS.PVP_NOT_OPEN);
|
||||
// 检查挑战次数
|
||||
let { challengeCnt } = refresh(pvpDefense.challengeCnt, pvpDefense.challengeRefTime, pvpDefense.seasonEndTime);
|
||||
if (challengeCnt == 0) {
|
||||
return resResult(STATUS.PVP_CHALLENGE_TIMES_NOT_ENOUGH);
|
||||
}
|
||||
let { oppPlayers } = pvpDefense;
|
||||
let curOpp = oppPlayers.find(cur => cur.roleId == oppRoleId);
|
||||
if(!curOpp) return resResult(STATUS.PVP_ROLE_NOT_FOUND)
|
||||
@@ -190,7 +195,7 @@ export class PvpHandler {
|
||||
if(!flag) return resResult(STATUS.BATTLE_INFO_VALIDATE_ERR);
|
||||
|
||||
// 更新军功
|
||||
let pvpDefense = await PvpDefenseModel.findByRoleId(roleId);
|
||||
let {pvpDefense, warId} = await findPvpDefByRoleId(roleId);
|
||||
if(!pvpDefense) return resResult(STATUS.PVP_NOT_OPEN);
|
||||
let { oppPlayers, winStreakNum, heroScores, score } = pvpDefense;
|
||||
let curOpp = oppPlayers.find(cur => cur.roleId == oppRoleId && cur.pos == pos);
|
||||
@@ -274,20 +279,29 @@ export class PvpHandler {
|
||||
$set: { status: isSuccess?1:2 }
|
||||
}, true);
|
||||
|
||||
// TODO 增加挑战次数
|
||||
|
||||
pvpDefense = await PvpDefenseModel.updateInfoAndInclude(roleId, { oppPlayers: newOppPlayers, heroScores, score, pLv, winStreakNum });
|
||||
// 增加挑战次数
|
||||
let { challengeCnt, challengeRefTime } = comsumeChallengeCnt(pvpDefense.challengeCnt, pvpDefense.challengeRefTime, pvpDefense.seasonEndTime);
|
||||
pvpDefense = await PvpDefenseModel.updateInfoAndInclude(roleId, { oppPlayers: newOppPlayers, heroScores, score, pLv, winStreakNum, challengeCnt, challengeRefTime });
|
||||
let result = await getEnemies(pvpDefense.oppPlayers, pvpDefense.winStreakNum);
|
||||
|
||||
// 加入排行榜
|
||||
let params = new RankParam(roleName, role.lv, role.vLv, role.headHid, role.sHid, role.title);
|
||||
await setRank(REDIS_KEY.PVP_RANK, 0, roleId, pvpDefense.score, pvpDefense.updatedAt.getTime(), params);
|
||||
let myRank = await getMyRank(REDIS_KEY.PVP_RANK, 0, roleId);
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
battleCode, isSuccess,
|
||||
score, pLv, myRank,
|
||||
heroScores: showHeroScores,
|
||||
oppPlayers: result
|
||||
oppPlayers: result,
|
||||
seasonNum: pvpDefense.seasonNum,
|
||||
seasonEndTime: pvpDefense.seasonEndTime,
|
||||
refOppCnt: pvpDefense.refOppCnt,
|
||||
challengeCnt: pvpDefense.challengeCnt,
|
||||
challengeRefTime: pvpDefense.challengeRefTime,
|
||||
hisScore: pvpDefense.hisScore,
|
||||
winStreakNum: pvpDefense.winStreakNum,
|
||||
warId
|
||||
});
|
||||
}
|
||||
|
||||
@@ -300,12 +314,14 @@ export class PvpHandler {
|
||||
heroes = _.uniq(heroes, function(item) {
|
||||
return item.order;
|
||||
});
|
||||
let { heroes: defHeros } = await PvpDefenseModel.findByRoleId(roleId);
|
||||
let { heroes: defHeros, seasonEndTime, challengeCnt: lastChallengeCnt, challengeRefTime: lastChallengeRefTime } = await PvpDefenseModel.findByRoleId(roleId);
|
||||
let defCe = 0;
|
||||
let { challengeCnt, challengeRefTime } = refresh(lastChallengeCnt, lastChallengeRefTime, seasonEndTime);
|
||||
|
||||
if (!!isDefaultHero) {
|
||||
let role = await RoleModel.findByRoleId(roleId);
|
||||
let { resHeroes } = await defaultHeroes(role);
|
||||
return resResult(STATUS.SUCCESS, { data: { heroes: resHeroes } });
|
||||
return resResult(STATUS.SUCCESS, { heroes: resHeroes, challengeCnt, challengeRefTime} );
|
||||
} else {
|
||||
for (let dataId = PVP_HERO_POS.START; dataId <= PVP_HERO_POS.END; dataId++) {
|
||||
let index = _.findIndex(heroes, {dataId});
|
||||
@@ -332,8 +348,8 @@ export class PvpHandler {
|
||||
defHeros[defIndex].hero = hero._id;
|
||||
defCe += hero.ce;
|
||||
}
|
||||
let { heroes: resHeroes } = await PvpDefenseModel.updateInfo(roleId, {defCe, heroes: defHeros});
|
||||
return resResult(STATUS.SUCCESS, { data: { heroes: resHeroes } });
|
||||
let { heroes: resHeroes } = await PvpDefenseModel.updateInfo(roleId, {defCe, heroes: defHeros, challengeCnt, challengeRefTime });
|
||||
return resResult(STATUS.SUCCESS, { heroes: resHeroes, challengeCnt, challengeRefTime });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -419,4 +435,35 @@ export class PvpHandler {
|
||||
|
||||
return resResult(STATUS.SUCCESS, result);
|
||||
}
|
||||
|
||||
async receiveBox(msg: {id: number}, session: BackendSession) {
|
||||
let {id} = msg;
|
||||
let roleId = session.get('roleId');
|
||||
let sid: string = session.get('sid');
|
||||
let roleName = session.get('roleName');
|
||||
let { hisScore, receivedBox, challengeCnt: lastChallengeCnt, challengeRefTime: lastChallengeRefTime, seasonEndTime } = await PvpDefenseModel.findByRoleIdIncludeAll(roleId);
|
||||
let pvpBoxs = getPvpBoxs();
|
||||
let pvpBox = _.findWhere(pvpBoxs, {id})
|
||||
if (hisScore < pvpBox.score) {
|
||||
return resResult(STATUS.PVP_NOT_REACH_BOX_SCORE);
|
||||
}
|
||||
if (_.indexOf(receivedBox, id) != -1 ) {
|
||||
return resResult(STATUS.PVP_BOX_IS_GOT);
|
||||
}
|
||||
receivedBox.push(id);
|
||||
let { challengeCnt, challengeRefTime } = refresh(lastChallengeCnt, lastChallengeRefTime, seasonEndTime);
|
||||
|
||||
await PvpDefenseModel.updateInfo(roleId, {receivedBox, challengeCnt, challengeRefTime});
|
||||
|
||||
let result = await addItems(roleId, roleName, sid, pvpBox.reward );
|
||||
return resResult(STATUS.SUCCESS,{goods: result, receivedBox, challengeCnt, challengeRefTime});
|
||||
|
||||
}
|
||||
|
||||
async getRec(msg: {}, session: BackendSession ) {
|
||||
let roleId = session.get('roleId');
|
||||
let roleName = session.get('roleName');
|
||||
let pvpRecords = await PvpRecordModel.getRecByRoleId(roleId);
|
||||
return resResult(STATUS.SUCCESS, {list: pvpRecords});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user