diff --git a/game-server/app/servers/battle/handler/pvpHandler.ts b/game-server/app/servers/battle/handler/pvpHandler.ts index d6d48871d..996bdf2fe 100644 --- a/game-server/app/servers/battle/handler/pvpHandler.ts +++ b/game-server/app/servers/battle/handler/pvpHandler.ts @@ -32,7 +32,7 @@ export class PvpHandler { let roleId = session.get('roleId'); let {pvpDefense, warId} = await findPvpDefAllByRoleId(roleId); let oppPlayers = await getEnemies(pvpDefense.oppPlayers, pvpDefense.winStreakNum); - let { heroes, score, pLv, winStreakNum, refOppCnt, challengeCnt, challengeRefTime, receivedBox, hisScore, heroScores, isFirstEntry, seasonNum, seasonEndTime } = pvpDefense; + let { isDefaultHero, heroes, score, pLv, winStreakNum, refOppCnt, challengeCnt, challengeRefTime, receivedBox, hisScore, heroScores, isFirstEntry, seasonNum, seasonEndTime } = pvpDefense; if (isFirstEntry) { await PvpDefenseModel.updateInfo(roleId, {isFirstEntry:false}); } @@ -41,7 +41,7 @@ export class PvpHandler { let data = {warId, seasonNum, seasonEndTime, myRank, oppPlayers, heroes: heroes.map(cur => { let {actorId, dataId, order} = cur; return { actorId, dataId, order } - }), score, pLv, winStreakNum, refOppCnt, challengeCnt, challengeRefTime, receivedBox, hisScore, heroScores, isFirstEntry} + }), score, pLv, winStreakNum, refOppCnt, challengeCnt, challengeRefTime, receivedBox, hisScore, heroScores, isFirstEntry, isDefaultHero} return resResult(STATUS.SUCCESS, data); } @@ -239,7 +239,7 @@ export class PvpHandler { if (!!isDefaultHero) { let role = await RoleModel.findByRoleId(roleId); let { resHeroes } = await defaultHeroes(role); - return resResult(STATUS.SUCCESS, { heroes: resHeroes, challengeCnt, challengeRefTime} ); + return resResult(STATUS.SUCCESS, { heroes: resHeroes, challengeCnt, challengeRefTime, isDefaultHero} ); } else { for (let dataId = PVP_HERO_POS.START; dataId <= PVP_HERO_POS.END; dataId++) { let index = _.findIndex(heroes, {dataId}); @@ -266,8 +266,8 @@ export class PvpHandler { defHeros[defIndex].hero = hero._id; defCe += hero.ce; } - let { heroes: resHeroes } = await PvpDefenseModel.updateInfo(roleId, {defCe, heroes: defHeros, challengeCnt, challengeRefTime }); - return resResult(STATUS.SUCCESS, { heroes: resHeroes, challengeCnt, challengeRefTime }); + let { heroes: resHeroes } = await PvpDefenseModel.updateInfo(roleId, {defCe, heroes: defHeros, challengeCnt, challengeRefTime, isDefaultHero }); + return resResult(STATUS.SUCCESS, { heroes: resHeroes, challengeCnt, challengeRefTime, isDefaultHero }); } } diff --git a/game-server/app/servers/connector/handler/entryHandler.ts b/game-server/app/servers/connector/handler/entryHandler.ts index ca027ae38..d36e80502 100644 --- a/game-server/app/servers/connector/handler/entryHandler.ts +++ b/game-server/app/servers/connector/handler/entryHandler.ts @@ -12,7 +12,7 @@ import { getAp } from '../../../services/actionPointService'; import { ItemModel } from '../../../db/Item'; import { chackFunOpenWhenLogin } from '../../../services/funcSwitchService'; import { loginRefresh } from '../../../services/playerEventService'; -import { getRedis, setRedis } from '../../../services/redisService'; +import { getRedis, setRedis, delRedis } from '../../../services/redisService'; export default function (app: Application) { return new EntryHandler(app); } @@ -44,7 +44,7 @@ export class EntryHandler { let key = 'login_roleId_' + role.roleId; let connect = await getRedis(key); if (!!connect) { - self.app.rpc.connector.connectorRemote.remoteLogin.toServer(connect, role.roleId); + await self.app.rpc.connector.connectorRemote.remoteLogin.toServer(connect, role.roleId); } let serverName = this.app.getServerId(); setRedis(key, serverName); @@ -112,7 +112,8 @@ export class EntryHandler { let roleId = session.get('roleId'); let sid = session.get('sid'); let serverId = session.get('serverId'); - + let key = 'login_roleId_' + roleId; + delRedis(key); let channelService = this.app.get('channelService'); let channel = channelService.getChannel(roleId, true); channel.leave(roleId, sid); diff --git a/game-server/app/servers/connector/remote/connectorRemote.ts b/game-server/app/servers/connector/remote/connectorRemote.ts index ef4ecc012..0e2995ad8 100644 --- a/game-server/app/servers/connector/remote/connectorRemote.ts +++ b/game-server/app/servers/connector/remote/connectorRemote.ts @@ -1,6 +1,7 @@ import { Application, ChannelService, FrontendSession, RemoterClass } from 'pinus'; import { STATUS } from '../../../consts/statusCode'; import { resResult } from '../../../pubUtils/util'; +import { getRedis, setRedis, delRedis } from '../../../services/redisService'; export default function (app: Application) { return new ConnectorRemote(app); } @@ -26,4 +27,11 @@ export class ConnectorRemote { } await sessionService.akick(uid); } + + public async pushMessage(sid: string, uid: string, route: string, data:any) { + if (!!sid) { + let uids = [{uid, sid}]; + this.channelService.pushMessageByUids(route, data, uids); + } + } } diff --git a/game-server/app/services/playerEventService.ts b/game-server/app/services/playerEventService.ts index af1e78e42..30bd327d8 100644 --- a/game-server/app/services/playerEventService.ts +++ b/game-server/app/services/playerEventService.ts @@ -8,14 +8,14 @@ import { startEvent } from "./eventSercive"; export async function eventOnPlayerLvUp(roleId: string, lv: number, addFuncs: Array, dataFuncs: Array) { - if (!dataFuncs.includes(FUNCS_ID.PVP)) {//开启pvp + // if (!dataFuncs.includes(FUNCS_ID.PVP)) {//开启pvp let res = getFuncsSwitch(FUNCS_ID.PVP); - if (res && lv >= res.param) { + if (!res || lv >= res.param) { let role = await RoleModel.findByRoleId(roleId); await checkPvp(role); addFuncs.push(FUNCS_ID.PVP); } - } + // } if (!dataFuncs.includes(FUNCS_ID.EVENT)) {//开启奇遇 let res = getFuncsSwitch(FUNCS_ID.EVENT); diff --git a/game-server/app/services/pvpService.ts b/game-server/app/services/pvpService.ts index 4cb111a3b..694407130 100644 --- a/game-server/app/services/pvpService.ts +++ b/game-server/app/services/pvpService.ts @@ -241,37 +241,41 @@ export function getLvByScore(heroScores: HeroScores[]) { export async function defaultHeroes ( role:RoleType, challengeCnt?:number, challengeRefTime?:number,) { let { heroes } = await PvpDefenseModel.findByRoleId(role.roleId); heroes.sort(function(a, b) { - return a.ce + a.dataId - b.ce + b.dataId; + return b.ce - b.dataId - a.ce + a.dataId; }); role.topFive.sort(function(a, b) { - return a.ce - b.ce; + return b.ce - a.ce; }); let defCe = 0; - for (let i = 1; i < role.topFive.length; i++) { + let num = 0; + for (let i = 0; i < role.topFive.length; i++) { let item = role.topFive[i]; - if (!_.findWhere(heroes, {actorId: item.hid})) { - for (let j = 0; j < heroes.length; j++) { + let index = _.findIndex(heroes, {actorId: item.hid}); + if (index == -1) { + for (let j = num; j < heroes.length; j++) { let hero = heroes[j]; - if (heroes.length >= 5 && !hero.actorId) { + if (num >= 5) { + break; + } + if (!!_.findWhere(role.topFive, {hid: hero.actorId})) { continue; - } - let index = _.findIndex(role.topFive,{hid: hero.actorId}); - if (index == -1) { - hero.actorId = item.hid; - hero.hero = item.hero||''; - hero.ce = item.ce||0; - } else { - heroes[index].ce = item.ce||0; - } + } + hero.actorId = item.hid; + hero.hero = item.hero; + hero.ce = item.ce; + num = j; + break; } + } else { + heroes[index].ce = item.ce; } defCe += item.ce; } if (!!challengeCnt && !!challengeRefTime) { - let { heroes: resHeroes} = await PvpDefenseModel.updateInfo(role.roleId, {defCe, heroes, challengeCnt, challengeRefTime}); + let { heroes: resHeroes} = await PvpDefenseModel.updateInfo(role.roleId, {defCe, heroes, challengeCnt, challengeRefTime, isDefaultHero:true}); return { resHeroes}; } else { - let { heroes: resHeroes} = await PvpDefenseModel.updateInfo(role.roleId, {defCe, heroes}); + let { heroes: resHeroes} = await PvpDefenseModel.updateInfo(role.roleId, {defCe, heroes, isDefaultHero:true}); return { resHeroes}; } } @@ -280,9 +284,9 @@ export function refresh(challengeCnt: number, challengeRefTime: number, seasonEn if (challengeCnt >= PVP.PVP_CHALLENGE_COUNTS) { return {challengeCnt, challengeRefTime}; } - let period = PVP.PVP_CHALLENGE_NORMALTIMES; + let period = PVP.PVP_CHALLENGE_NORMALTIMES * 60; if (checkTodayTime(seasonEndTime)) { - period = PVP.PVP_CHALLENGE_FINALTIMES; + period = PVP.PVP_CHALLENGE_FINALTIMES * 60; } let time = nowSeconds(); let num = Math.floor(( time - challengeRefTime)/period); diff --git a/game-server/app/services/redisService.ts b/game-server/app/services/redisService.ts index 564abfc76..2d24e885f 100644 --- a/game-server/app/services/redisService.ts +++ b/game-server/app/services/redisService.ts @@ -234,4 +234,9 @@ export async function getRedis(key: string) { const str = await client.getAsync(key); return str; } + +export async function delRedis(key: string) { + const client: Redis.RedisClient = pinus.app.get('redis'); + await client.delAsync(key); +} /**************** 寻宝相关 end */ diff --git a/game-server/app/services/timeTaskService.ts b/game-server/app/services/timeTaskService.ts index f4674c9f8..e7ae979af 100644 --- a/game-server/app/services/timeTaskService.ts +++ b/game-server/app/services/timeTaskService.ts @@ -10,11 +10,12 @@ import { nowSeconds, getTodayZeroPoint } from '../pubUtils/timeUtil'; import { getPvpGkWarIds, getPvpRankRewards, getPvpHeroRewards } from '../pubUtils/data'; import { getRandomArr } from '../pubUtils/util'; import { getLvByScore } from './pvpService'; -import { getMyRank, setRank } from './redisService'; +import { getMyRank, setRank, getRedis } from './redisService'; import { REDIS_KEY } from '../consts'; import { RankParam } from '../pubUtils/interface'; import { RoleModel } from '../db/Role'; import { MailModel, MailType } from '../db/Mail'; +import { pinus } from 'pinus'; const _ = require('underscore'); const PER_SECOND = 1 * 1000; const PER_DAY = 24 * 60 * 60; @@ -54,6 +55,11 @@ export async function setPvpSeasonResult(obj:{ name:string }) { } } await MailModel.addMails(addMails); + // let key = 'login_roleId_' + pvpDefense.roleId; + // let sid = await getRedis(key); + // if (!!sid) { + // pinus.app.rpc.connector.connectorRemote.pushMessage.toServer(sid, pvpDefense.roleId, 'onMailsAdd', [mail]); + // } } } @@ -83,7 +89,7 @@ export async function checkResult(pvpDefense: PvpDefenseType, seasonNum: number, if(pvpRankReward) { goods = goods.concat(pvpRankReward.reward); } - let score = 0 + let score = 0; for (let i = 0; i < pvpDefense.heroScores.length; i++) { let heroScore = pvpDefense.heroScores[i]; let pvpHeroReward = getScore(pvpHeroRewards, heroScore.score); @@ -109,7 +115,12 @@ export async function setPvpDefResult(pvpDefense: PvpDefenseType, seasonNum: num setRank(REDIS_KEY.PVP_RANK, 0, pvpDefense.roleId, pvpDefense.score, pvpDefense.updatedAt.getTime(), params); //下发邮件 let sendTime = seasonEndTime - PVP.PVP_SEASON_DAYS * PER_DAY + SETTLE_DIFF; - await MailModel.addMail({ goods, sendName: '系统', mailId: 1, sendTime: sendTime}); + let mail = await MailModel.addMail({ goods, sendName: '系统', mailId: 1, sendTime: sendTime}); + let key = 'login_roleId_' + pvpDefense.roleId; + let sid = await getRedis(key); + if (!!sid) { + pinus.app.rpc.connector.connectorRemote.pushMessage.toServer(sid, pvpDefense.roleId, 'onMailsAdd', [mail]); + } return pvpDefense; } diff --git a/game-server/config/clientProtos.ts b/game-server/config/clientProtos.ts index 90cd9487c..36393e2b1 100644 --- a/game-server/config/clientProtos.ts +++ b/game-server/config/clientProtos.ts @@ -1,3 +1,175 @@ module.exports = { - + "chat.chatHandler.send": { + "required string content": 1, + "required string target": 2, + "required string rid": 3, + "required string from": 4, + }, + "chat.chatHandler.send2": { + "required string rid": 1, + "required string content": 2, + "required string from": 3, + "required string target": 4 + }, + "role.equipHandler.composeEquip": { + "required uInt32 gid": 1, + "repeated uInt32 originalEquip": 2 + }, + "role.equipHandler.decomposeEquip": { + "repeated uInt32 originalEquip": 1 + }, + "role.equipHandler.putOnOrOff": { + "required uInt32 eid": 1, + "required uInt32 hid": 2, + "required uInt32 type": 3 + }, + "role.equipHandler.strengthen": { + "required uInt32 hid": 1, + "required uInt32 ePlaceId": 2, + "required uInt32 type": 3 + }, + "role.equipHandler.strengthenAll": { + "required uInt32 hid": 1, + "required uInt32 lv": 2 + }, + "role.equipHandler.refine": { + "message Material":{ + "required uInt32 id": 1, + "required uInt32 count": 2 + }, + "required uInt32 hid": 1, + "required uInt32 ePlaceId": 2, + "repeated Material material": 3 + }, + "role.equipHandler.lockRandSe": { + "required uInt32 eid": 1, + "required uInt32 id": 2, + "required boolean lock": 3 + }, + "role.equipHandler.reStrengthen": { + "required uInt32 eid": 1 + }, + "role.equipHandler.digHole": { + "required uInt32 eid": 1, + "required uInt32 id": 2 + }, + "role.equipHandler.fillHole": { + "required uInt32 eid": 1, + "required uInt32 id": 2, + "required uInt32 jewel": 3 + }, + "role.equipHandler.composeJewel": { + "message Consumes":{ + "required uInt32 id": 1, + "required uInt32 count": 2 + }, + "required uInt32 jewel": 1, + "required uInt32 count": 2, + "required uInt32 type": 3, + "repeated Consumes consumes": 4 + }, + "role.equipHandler.putOffHole": { + "required uInt32 eid": 1, + "required uInt32 id": 2 + }, + "role.equipHandler.composeAndPurchaseJewel": { + "message Consumes":{ + "required uInt32 id": 1, + "required uInt32 count": 2 + }, + "required uInt32 jewel": 1, + "required uInt32 count": 2, + "repeated Consumes consumes": 3, + "repeated Consumes purchaseGoods": 4 + }, + "role.equipHandler.purchaseGoods": { + "message PurchaseGoods": { + "required uInt32 id": 1, + "required uInt32 count": 2 + }, + "repeated PurchaseGoods purchaseGoods": 1 + }, + "role.equipHandler.composeNextLevelJewel": { + "required uInt32 jewel": 1, + "required uInt32 count": 2, + "required uInt32 eid": 3, + "required uInt32 id": 4 + }, + + "role.heroHandler.compose": { + "required uInt32 hid": 1 + }, + "role.heroHandler.lvUp": { + "message Material": { + "required uInt32 id": 1, + "required uInt32 count": 2 + }, + "required uInt32 hid": 1, + "required uInt32 type": 2, + "repeated Material material": 3 + }, + "role.heroHandler.starUp": { + "required uInt32 hid": 1, + "required uInt32 star": 2, + "required uInt32 starStage": 3 + }, + "role.heroHandler.wakeUp": { + "required uInt32 hid": 1, + "required uInt32 colorStar": 2, + "required uInt32 colorStarStage": 3 + }, + "role.heroHandler.qualityUp": { + "required uInt32 hid": 1, + "required uInt32 quality": 2 + }, + "role.heroHandler.heroJobTrain": { + "required uInt32 hid": 1 + }, + "role.heroHandler.heroJobStageUp": { + "required uInt32 hid": 1 + }, + "role.heroHandler.heroConectionActivate": { + "required uInt32 shipId": 1 + }, + "role.heroHandler.heroGiveFavor": { + "message Item": { + "required uInt32 id": 1, + "required uInt32 count": 2 + }, + "required uInt32 hid": 1, + "repeated Item items": 2 + }, + "role.heroHandler.heroWearSkin": { + "required uInt32 id": 1 + }, + "role.heroHandler.changeSchoolHero": { + "required uInt32 schoolId": 1, + "required uInt32 positionId": 2, + "required uInt32 hid": 3 + }, + "role.heroHandler.unlockSchoolPosition": { + "required uInt32 schoolId": 1, + "required uInt32 positionId": 2 + }, + "role.heroHandler.activeHeroScroll": { + "required uInt32 hid": 1 + }, + "role.heroHandler.roleTeraphStrengthen": { + "required uInt32 id": 1, + "required uInt32 count": 2 + }, + "role.heroHandler.roleTeraphQualityUp": { + "required uInt32 id": 1 + }, + + "battle.normalBattleHandler.getBattleList": { + "required uInt32 type": 1 + }, + "battle.normalBattleHandler.checkBattle": { + "message Hero": { + "required uInt32 hid": 1 + }, + "required uInt32 battleId": 1, + "repeated Hero heroes": 2 + } } \ No newline at end of file