pvp:添加购买挑战次数

This commit is contained in:
luying
2021-11-01 15:30:03 +08:00
parent e507ff933b
commit bb625b88ed
7 changed files with 59 additions and 37 deletions
@@ -55,7 +55,7 @@ export class PvpHandler {
if(refChallengeObj.hasChanged) {
update = { ...update, ...refChallengeObj }
}
let refOppObj = refreshRefOppCnt(pvpDefense.refOppCnt, pvpDefense.setAttackCnt, pvpDefense.refDaily);
let refOppObj = refreshRefOppCnt(pvpDefense);
// 每天首次打开要刷掉对手
if(refOppObj.shouldRefOpp) {
if(pvpDefense.attack) {
@@ -104,7 +104,7 @@ export class PvpHandler {
if(!pvpDefense.attack) return resResult(STATUS.PVP_NOT_SET_ATTACK);
// 刷新次数及消耗
let refOppObj = refreshRefOppCnt(pvpDefense.refOppCnt, pvpDefense.setAttackCnt, pvpDefense.refDaily);
let refOppObj = refreshRefOppCnt(pvpDefense);
if (refOppObj.refOppCnt >= gameData.maxPvpRefreshCnt.max) {
return resResult(STATUS.PVP_REFRESH_CNT_REACH_MAX);
}
@@ -277,6 +277,52 @@ export class PvpHandler {
});
}
async buyAttackCnt(msg: { count: number }, session: BackendSession) {
let { count } = msg;
let roleId = session.get('roleId');
let sid = session.get('sid');
if(count <= 0 || count == undefined) return resResult(STATUS.WRONG_PARMS);
let pvpDefense = await PvpDefenseModel.findByRoleId(roleId);
if(!pvpDefense) return resResult(STATUS.PVP_NOT_OPEN);
// 次数
let refOppObj = refreshRefOppCnt(pvpDefense);
if(refOppObj.buyAttackCnt + count > PVP.PVP_BUY_SET_ATTACK_CNT) {
return resResult(STATUS.PVP_BUY_ATTACK_CNT_NOT_ENOUGH);
}
refOppObj.buyAttackCnt += count;
let gold = getGoldObject(PVP.PVP_SET_ATTACK_CNT_GOLD * count);
let costResult = await handleCost(roleId, sid, [gold]);
if(!costResult) return resResult(STATUS.TOWER_GOLD_NOT_ENOUGH);
let update: pvpUpdateInter = { ...refOppObj };
// 更新挑战阵容
if(refOppObj.shouldRefOpp) {
if(pvpDefense.attack) {
let role = await RoleModel.findByRoleId(roleId);
let { seasonNum } = await PVPConfigModel.findCurPVPConfig();
let oppPlayers = await refreshEnemies(role, seasonNum, pvpDefense.attack.score, pvpDefense.attack.pLv||1);
update.oppPlayers = oppPlayers;
}
}
// 保存
pvpDefense = await PvpDefenseModel.updateInfoAndInclude(roleId, update);
// 返回
let result = new PvpDataReturn();
result.setPvpDefense(pvpDefense);
let pickParam = ['buyAttackCnt', 'setAttackCnt', 'refOppCnt'];
if(refOppObj.shouldRefOpp) {
let oppPlayersReturn = await getEnemies(pvpDefense.oppPlayers||[], pvpDefense.winStreakNum);
result.setOppPlayers(oppPlayersReturn);
pickParam.push('oppPlayers');
}
return resResult(STATUS.SUCCESS, pick(result, pickParam));
}
async saveAttack(msg: { heroes: { actorId: number, order: number }[] }, session: BackendSession) {
let { heroes } = msg;
let roleId = session.get('roleId');
@@ -290,15 +336,10 @@ export class PvpHandler {
if(!pvpDefense) return resResult(STATUS.PVP_NOT_OPEN);
// 次数
let refOppObj = refreshRefOppCnt(pvpDefense.refOppCnt, pvpDefense.setAttackCnt, pvpDefense.refDaily);
if(refOppObj.setAttackCnt >= PVP.PVP_SET_ATTACK_CNT) {
let refOppObj = refreshRefOppCnt(pvpDefense);
if(refOppObj.setAttackCnt >= PVP.PVP_BUY_SET_ATTACK_CNT + refOppObj.buyAttackCnt) {
return resResult(STATUS.PVP_SET_ATTACK_CNT_NOT_ENOUGH);
}
if(refOppObj.setAttackCnt >= PVP.PVP_SET_ATTACK_FREE_CNT) {
let gold = getGoldObject(PVP.PVP_SET_ATTACK_CNT_GOLD);
let result = await handleCost(roleId, sid, [gold]);
if(!result) return resResult(STATUS.TOWER_GOLD_NOT_ENOUGH);
}
refOppObj.setAttackCnt ++;
let { seasonNum, seasonEndTime } = await PVPConfigModel.findCurPVPConfig();
let refChallengeObj = refChallengeCnt(pvpDefense.challengeCnt, pvpDefense.challengeRefTime, seasonEndTime);