diff --git a/game-server/app/services/pvpService.ts b/game-server/app/services/pvpService.ts index 36bb2a576..909c5091b 100644 --- a/game-server/app/services/pvpService.ts +++ b/game-server/app/services/pvpService.ts @@ -476,23 +476,32 @@ export async function generPVPOppRecInfo(isSuccess: boolean, curOpp: OppPlayer, if(!curOpp.isRobot && !isSuccess) { let pvpDefense = await PvpDefenseModel.findByRoleId(robotIdComBack(curOpp.roleId)); if(pvpDefense && pvpDefense.defense) { - let { attack, defense, heroScores, score } = pvpDefense; - for(let { actorId } of defense.heroes) { - let hs = heroScores.find(cur => cur.hid == actorId); - if(hs) { - hs.score += PVP.PVP_DEFENSE_SUCCESS_REWARD; - } else { - heroScores.push({ hid: actorId, score: PVP.PVP_DEFENSE_SUCCESS_REWARD }) - } - addSumScore += PVP.PVP_DEFENSE_SUCCESS_REWARD; + let { attack, defense, heroScores, score, defenseScoreCnt, refDefenseScore } = pvpDefense; + if(shouldRefresh(refDefenseScore, new Date())) { + defenseScoreCnt = 0; refDefenseScore = new Date(); } - console.log('&&&&&', 'addSumScore', addSumScore) - - let newAttack = calLineupScore(attack, heroScores); - let newDefense = calLineupScore(defense, heroScores); - - await PvpDefenseModel.updateInfo(oppRole.roleId, { attack: newAttack, defense: newDefense, heroScores, score: score + addSumScore }); + if(defenseScoreCnt < PVP.PVP_DEFENSE_SUCCESS_REWARD_MAX_CNT) { + for(let { actorId } of defense.heroes) { + let hs = heroScores.find(cur => cur.hid == actorId); + const dicOpp = gameData.pvpOpponent.get(curOpp.pos); + let addScore = PVP.PVP_DEFENSE_SUCCESS_REWARD - dicOpp.score; + if(hs) { + hs.score += addScore; + } else { + heroScores.push({ hid: actorId, score: addScore }) + } + addSumScore += addScore; + } + + let newAttack = calLineupScore(attack, heroScores); + let newDefense = calLineupScore(defense, heroScores); + + await PvpDefenseModel.updateInfo(pvpDefense.roleId, { attack: newAttack, defense: newDefense, heroScores, score: score + addSumScore, defenseScoreCnt: defenseScoreCnt + 1, refDefenseScore }); + + } else { + await PvpDefenseModel.updateInfo(pvpDefense.roleId, { defenseScoreCnt: defenseScoreCnt + 1, refDefenseScore }); + } } } diff --git a/shared/db/PvpDefense.ts b/shared/db/PvpDefense.ts index f76a85014..8abbd62ac 100644 --- a/shared/db/PvpDefense.ts +++ b/shared/db/PvpDefense.ts @@ -59,6 +59,11 @@ export default class PvpDefense extends BaseModel { @prop({ required: true, default: true }) isFirstEntry: boolean; + @prop({ required: true, default: 0 }) + defenseScoreCnt: number; + @prop({ required: true }) + refDefenseScore: Date; + public static async findByRoleId(roleId: string, getters = false) { const result: PvpDefenseType = await PvpDefenseModel.findOne({ roleId }).lean({ getters}); return result; diff --git a/shared/pubUtils/dicParam.ts b/shared/pubUtils/dicParam.ts index d7b54643d..692aae6ba 100644 --- a/shared/pubUtils/dicParam.ts +++ b/shared/pubUtils/dicParam.ts @@ -36,7 +36,7 @@ export const PVP = { PVP_SET_ATTACK_FREE_CNT: 2, // pvp每天免费设挑战阵容的次数 PVP_BUY_SET_ATTACK_CNT: 3, // pvp每天可购买的设置挑战阵容的次数 PVP_SET_ATTACK_CNT_GOLD: 100, // pvp收费设置挑战阵容的花费 - PVP_DEFENSE_SUCCESS_REWARD: 5, // pvp防守成功积分奖励 + PVP_DEFENSE_SUCCESS_REWARD: 20, // pvp防守方赢了应该是用20-攻击方应得的积分,防守方没有连胜 PVP_DEFENSE_SUCCESS_REWARD_MAX_CNT: 5, // 每天防守成功可以获得的奖励次数 PVP_SEASON_REWARD_TIME_BEFORE: 2, // pvp赛季结束几分钟前结算 PVP_SEASON_FORBID_BATTLE_TIME_BEFORE: 3600, // pvp赛季结束前几秒钟禁止挑战队伍 @@ -92,6 +92,7 @@ export const HTTPMANAGE = { export const CHAT_SYSTEM = { RECENT_GROUP_MSGS_CNT: 10, // 群消息获取条数 RECENT_PRIVATE_CHATS_CNT: 20, // 最近私聊个数 + RECENT_SYSTEM_OPEN: 11, // 聊天开启等级 }; export const GUILDACTIVITY = { GATEACTIVITY_CHALLENGE_TIMES: 1, // 蛮夷入侵每天可以挑战次的次数