diff --git a/game-server/app/servers/battle/handler/pvpHandler.ts b/game-server/app/servers/battle/handler/pvpHandler.ts index 0a09e8e27..d7fa2b5df 100644 --- a/game-server/app/servers/battle/handler/pvpHandler.ts +++ b/game-server/app/servers/battle/handler/pvpHandler.ts @@ -9,13 +9,14 @@ import { SystemConfigModel } from '../../../db/SystemConfig' import { PvpDefenseModel, PvpDefenseType, OppPlayers } from '../../../db/PvpDefense'; import { oppHeroesDefenseInter, pvpEndParamInter } from '../../../pubUtils/interface'; -import { PVP_HERO_POS, ROBOT_NAME } from '../../../consts'; +import { PVP_HERO_POS } from '../../../consts'; import { HeroType, HeroModel } from '../../../db/Hero'; import { CeAttrNumber } from '../../../db/generalField'; import { checkBattleHeroesByHid } from '../../../services/normalBattleService'; import { BattleRecordModel } from '../../../db/BattleRecord'; import { PvpRecordModel, HeroesRecord } from '../../../db/PvpRecord'; +import { setPvpDefResult } from '../../../services/timeTaskService'; export default function(app: Application) { return new PvpHandler(app); } @@ -33,15 +34,17 @@ export class PvpHandler { async getData (msg: {}, session: BackendSession) { let roleId = session.get('roleId'); - let {heroes, score, pLv, winStreakNum, oppPlayers: oppPlayerInfos, refOppCnt, challengeCnt, challengeRefTime, receivedBox, hisScore, heroScores, seasonNum: playerSeaSonNum} = await PvpDefenseModel.findByRoleIdIncludeAll(roleId); - let oppPlayers = getEnemies(oppPlayerInfos, winStreakNum); + let pvpDefense = await PvpDefenseModel.findByRoleIdIncludeAll(roleId); + let oppPlayers = getEnemies(pvpDefense.oppPlayers, pvpDefense.winStreakNum); let {warId, seasonNum, seasonEndTime} = await SystemConfigModel.findSystemConfig(); - if (playerSeaSonNum !== seasonNum) { + let {heroes, score, pLv, winStreakNum, refOppCnt, challengeCnt, challengeRefTime, receivedBox, hisScore, heroScores} = pvpDefense; + if (pvpDefense.seasonNum !== seasonNum) { //TODO去结算 + let {score, pLv, winStreakNum} = await setPvpDefResult(pvpDefense) } let myRank = 999;//TODO去redis中获取 let data = {warId, seasonNum, seasonEndTime, myRank, oppPlayers, heroes, score, pLv, winStreakNum, refOppCnt, challengeCnt, challengeRefTime, receivedBox, hisScore, heroScores} - return resResult(STATUS.SUCCESS, { data: data }); + return resResult(STATUS.SUCCESS, data); } @@ -328,4 +331,6 @@ export class PvpHandler { return resResult(STATUS.SUCCESS, { data: { heroes: resHeroes } }); } } + + } diff --git a/game-server/app/services/timeTaskService.ts b/game-server/app/services/timeTaskService.ts index 80905c2ac..18490e0f3 100644 --- a/game-server/app/services/timeTaskService.ts +++ b/game-server/app/services/timeTaskService.ts @@ -7,7 +7,7 @@ import { SystemConfigModel } from '../db/SystemConfig'; import PvpDefenseType,{ PvpDefenseModel } from '../db/PvpDefense'; import { PVP } from '../pubUtils/dicParam'; import { nowSeconds, getTodayZeroPoint } from '../pubUtils/timeUtil'; -import { getPvpGkWarIds } from '../pubUtils/data'; +import { getPvpGkWarIds, getPvpRankRewards, getPvpHeroRewards, getPLvByScore } from '../pubUtils/data'; import { getRandomArr } from '../pubUtils/util'; const _ = require('underscore'); const PER_SECOND = 1 * 1000; @@ -45,8 +45,25 @@ export async function setPvpSeasonResult(obj:{ name:string }) { await setNextPvpTime(); } -async function setPvpDefResult(pvpDefense: PvpDefenseType) { - await PvpDefenseModel.updateInfo(pvpDefense.roleId, {score:100, pLv: 1}); +export async function setPvpDefResult(pvpDefense: PvpDefenseType) { + let pvpRankRewards = getPvpRankRewards(); + let pvpHeroRewards = getPvpHeroRewards(); + let goods = []; + let rankLv = 0;//TODO 排行榜 + let pvpRankReward = getScore(pvpRankRewards, rankLv); + goods = goods.concat(pvpRankReward.reward); + let score = 0 + for (let i = 0; i < pvpDefense.heroScores.length; i++) { + let heroScore = pvpDefense.heroScores[i]; + let pvpHeroReward = getScore(pvpHeroRewards, heroScore.score); + goods = goods.concat(pvpHeroReward.reward); + heroScore.score = pvpHeroReward.heroscore; + score += heroScore.score; + } + let pLv = getPLvByScore(score); + pvpDefense = await PvpDefenseModel.updateInfo(pvpDefense.roleId, {score:score, pLv, heroScores: pvpDefense.heroScores}); + //TODO 下发邮件 + return pvpDefense; } export async function resetPvpWarId() { @@ -68,3 +85,11 @@ async function setNextPvpTime() { let settleTime = (seasonEndTime - SETTLE_DIFF)* PER_SECOND; scheduleJob(settleTime, setPvpSeasonResult); } + +function getScore(arr, score) { + for (let item of arr) { + if (item.max >= score && score < item.min) { + return item; + } + } +} \ No newline at end of file diff --git a/shared/consts/constModules/sysConst.ts b/shared/consts/constModules/sysConst.ts index 37a3143a1..90a43eeba 100644 --- a/shared/consts/constModules/sysConst.ts +++ b/shared/consts/constModules/sysConst.ts @@ -293,6 +293,8 @@ export const FILENAME = { DIC_PVP_TEAM_LEVEL: 'dic_pvp_teamLevel', DIC_GK_PVP: 'dic_zyz_gk_pvp', DIC_PVP_REFRESHCONSUME: 'dic_pvp_refreshConsume', + DIC_PVP_HERO_REWARD: 'dic_pvp_heroAccountReward', + DIC_PVP_RANK_REWARD: 'dic_pvp_rankReward', } export const WAR_RELATE_TABLES = [ diff --git a/shared/pubUtils/data.ts b/shared/pubUtils/data.ts index 3ed56b07b..e9730b4aa 100644 --- a/shared/pubUtils/data.ts +++ b/shared/pubUtils/data.ts @@ -39,7 +39,9 @@ import { ABI_TYPE_TO_STAGE } from "../consts"; import { dicPvpOpponent } from './dictionary/DicPvpOpponent'; import { dicPvpTeamLevel } from './dictionary/DicPvpTeamLevel'; import { dicPvpRefreshConsume } from './dictionary/DicPvpRefreshConsume'; -import { dicGkPvp, dicGkPvps } from './dictionary/DicGkPvp' +import { dicGkPvp, dicGkPvps } from './dictionary/DicGkPvp'; +import { dicHeroRewads } from './dictionary/DicPvpHeroReward'; +import { dicRankRewads } from './dictionary/DicPvpRankReward'; export const gameData = { blurprtCompose: dicBlueprtCompose, blueprtPossibility: dicBlueprtPossibility, @@ -94,6 +96,8 @@ export const gameData = { pvpRefreshConsume: dicPvpRefreshConsume, pvpGk: dicGkPvp, pvpGks: dicGkPvps, + pvpHeroRewards: dicHeroRewads, + pvpRankRewards: dicRankRewads, }; // 在此提供一些原先在gamedata中提供的方法,以便更方便获取gameData数据 @@ -278,4 +282,12 @@ export function getPvpGkByWarId (warId: number) { export function getPvpGkWarIds() { let warIds = gameData.pvpGks; return warIds; +} + +export function getPvpHeroRewards() { + return gameData.pvpHeroRewards; +} + +export function getPvpRankRewards() { + return gameData.pvpRankRewards; } \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicPvpHeroReward.ts b/shared/pubUtils/dictionary/DicPvpHeroReward.ts new file mode 100644 index 000000000..f19fe4f0f --- /dev/null +++ b/shared/pubUtils/dictionary/DicPvpHeroReward.ts @@ -0,0 +1,21 @@ +import { readJsonFile, parseGoodStr } from '../util' +import { FILENAME } from '../../consts' +import { RewardInter } from '../interface'; + +export interface DicHeroRewads { + readonly id: number; + readonly min: number; + readonly max: number; + readonly heroscore: number; + readonly reward: Array; + +} + +const str = readJsonFile(FILENAME.DIC_PVP_RANK_REWARD); +let arr = JSON.parse(str); + +export const dicHeroRewads = new Array(); +arr.forEach(o => { + o.reward = parseGoodStr(o.reward); + dicHeroRewads.push(o); +}); \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicPvpRankReward.ts b/shared/pubUtils/dictionary/DicPvpRankReward.ts new file mode 100644 index 000000000..e69604d8b --- /dev/null +++ b/shared/pubUtils/dictionary/DicPvpRankReward.ts @@ -0,0 +1,20 @@ +import { readJsonFile, parseGoodStr } from '../util' +import { FILENAME } from '../../consts' +import { RewardInter } from '../interface'; + +export interface DicRankRewads { + readonly id: number; + readonly min: number; + readonly max: number; + readonly reward: Array; + +} + +const str = readJsonFile(FILENAME.DIC_PVP_RANK_REWARD); +let arr = JSON.parse(str); + +export const dicRankRewads = new Array(); +arr.forEach(o => { + o.reward = parseGoodStr(o.reward); + dicRankRewads.push(o); +}); \ No newline at end of file