pvp最强五人和刷新挑战次数

This commit is contained in:
mamengke01
2021-01-11 15:49:56 +08:00
parent 06a0c38fbd
commit 17a6ddb04b
8 changed files with 235 additions and 34 deletions
@@ -32,7 +32,7 @@ export class PvpHandler {
let roleId = session.get('roleId'); let roleId = session.get('roleId');
let {pvpDefense, warId} = await findPvpDefAllByRoleId(roleId); let {pvpDefense, warId} = await findPvpDefAllByRoleId(roleId);
let oppPlayers = await getEnemies(pvpDefense.oppPlayers, pvpDefense.winStreakNum); 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) { if (isFirstEntry) {
await PvpDefenseModel.updateInfo(roleId, {isFirstEntry:false}); 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 data = {warId, seasonNum, seasonEndTime, myRank, oppPlayers, heroes: heroes.map(cur => {
let {actorId, dataId, order} = cur; let {actorId, dataId, order} = cur;
return { actorId, dataId, order } 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); return resResult(STATUS.SUCCESS, data);
} }
@@ -239,7 +239,7 @@ export class PvpHandler {
if (!!isDefaultHero) { if (!!isDefaultHero) {
let role = await RoleModel.findByRoleId(roleId); let role = await RoleModel.findByRoleId(roleId);
let { resHeroes } = await defaultHeroes(role); let { resHeroes } = await defaultHeroes(role);
return resResult(STATUS.SUCCESS, { heroes: resHeroes, challengeCnt, challengeRefTime} ); return resResult(STATUS.SUCCESS, { heroes: resHeroes, challengeCnt, challengeRefTime, isDefaultHero} );
} else { } else {
for (let dataId = PVP_HERO_POS.START; dataId <= PVP_HERO_POS.END; dataId++) { for (let dataId = PVP_HERO_POS.START; dataId <= PVP_HERO_POS.END; dataId++) {
let index = _.findIndex(heroes, {dataId}); let index = _.findIndex(heroes, {dataId});
@@ -266,8 +266,8 @@ export class PvpHandler {
defHeros[defIndex].hero = hero._id; defHeros[defIndex].hero = hero._id;
defCe += hero.ce; defCe += hero.ce;
} }
let { heroes: resHeroes } = await PvpDefenseModel.updateInfo(roleId, {defCe, heroes: defHeros, challengeCnt, challengeRefTime }); let { heroes: resHeroes } = await PvpDefenseModel.updateInfo(roleId, {defCe, heroes: defHeros, challengeCnt, challengeRefTime, isDefaultHero });
return resResult(STATUS.SUCCESS, { heroes: resHeroes, challengeCnt, challengeRefTime }); return resResult(STATUS.SUCCESS, { heroes: resHeroes, challengeCnt, challengeRefTime, isDefaultHero });
} }
} }
@@ -12,7 +12,7 @@ import { getAp } from '../../../services/actionPointService';
import { ItemModel } from '../../../db/Item'; import { ItemModel } from '../../../db/Item';
import { chackFunOpenWhenLogin } from '../../../services/funcSwitchService'; import { chackFunOpenWhenLogin } from '../../../services/funcSwitchService';
import { loginRefresh } from '../../../services/playerEventService'; import { loginRefresh } from '../../../services/playerEventService';
import { getRedis, setRedis } from '../../../services/redisService'; import { getRedis, setRedis, delRedis } from '../../../services/redisService';
export default function (app: Application) { export default function (app: Application) {
return new EntryHandler(app); return new EntryHandler(app);
} }
@@ -44,7 +44,7 @@ export class EntryHandler {
let key = 'login_roleId_' + role.roleId; let key = 'login_roleId_' + role.roleId;
let connect = await getRedis(key); let connect = await getRedis(key);
if (!!connect) { 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(); let serverName = this.app.getServerId();
setRedis(key, serverName); setRedis(key, serverName);
@@ -112,7 +112,8 @@ export class EntryHandler {
let roleId = session.get('roleId'); let roleId = session.get('roleId');
let sid = session.get('sid'); let sid = session.get('sid');
let serverId = session.get('serverId'); let serverId = session.get('serverId');
let key = 'login_roleId_' + roleId;
delRedis(key);
let channelService = this.app.get('channelService'); let channelService = this.app.get('channelService');
let channel = channelService.getChannel(roleId, true); let channel = channelService.getChannel(roleId, true);
channel.leave(roleId, sid); channel.leave(roleId, sid);
@@ -1,6 +1,7 @@
import { Application, ChannelService, FrontendSession, RemoterClass } from 'pinus'; import { Application, ChannelService, FrontendSession, RemoterClass } from 'pinus';
import { STATUS } from '../../../consts/statusCode'; import { STATUS } from '../../../consts/statusCode';
import { resResult } from '../../../pubUtils/util'; import { resResult } from '../../../pubUtils/util';
import { getRedis, setRedis, delRedis } from '../../../services/redisService';
export default function (app: Application) { export default function (app: Application) {
return new ConnectorRemote(app); return new ConnectorRemote(app);
} }
@@ -26,4 +27,11 @@ export class ConnectorRemote {
} }
await sessionService.akick(uid); 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);
}
}
} }
@@ -8,14 +8,14 @@ import { startEvent } from "./eventSercive";
export async function eventOnPlayerLvUp(roleId: string, lv: number, addFuncs: Array<number>, dataFuncs: Array<number>) { export async function eventOnPlayerLvUp(roleId: string, lv: number, addFuncs: Array<number>, dataFuncs: Array<number>) {
if (!dataFuncs.includes(FUNCS_ID.PVP)) {//开启pvp // if (!dataFuncs.includes(FUNCS_ID.PVP)) {//开启pvp
let res = getFuncsSwitch(FUNCS_ID.PVP); let res = getFuncsSwitch(FUNCS_ID.PVP);
if (res && lv >= res.param) { if (!res || lv >= res.param) {
let role = await RoleModel.findByRoleId(roleId); let role = await RoleModel.findByRoleId(roleId);
await checkPvp(role); await checkPvp(role);
addFuncs.push(FUNCS_ID.PVP); addFuncs.push(FUNCS_ID.PVP);
} }
} // }
if (!dataFuncs.includes(FUNCS_ID.EVENT)) {//开启奇遇 if (!dataFuncs.includes(FUNCS_ID.EVENT)) {//开启奇遇
let res = getFuncsSwitch(FUNCS_ID.EVENT); let res = getFuncsSwitch(FUNCS_ID.EVENT);
+22 -18
View File
@@ -241,37 +241,41 @@ export function getLvByScore(heroScores: HeroScores[]) {
export async function defaultHeroes ( role:RoleType, challengeCnt?:number, challengeRefTime?:number,) { export async function defaultHeroes ( role:RoleType, challengeCnt?:number, challengeRefTime?:number,) {
let { heroes } = await PvpDefenseModel.findByRoleId(role.roleId); let { heroes } = await PvpDefenseModel.findByRoleId(role.roleId);
heroes.sort(function(a, b) { 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) { role.topFive.sort(function(a, b) {
return a.ce - b.ce; return b.ce - a.ce;
}); });
let defCe = 0; 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]; let item = role.topFive[i];
if (!_.findWhere(heroes, {actorId: item.hid})) { let index = _.findIndex(heroes, {actorId: item.hid});
for (let j = 0; j < heroes.length; j++) { if (index == -1) {
for (let j = num; j < heroes.length; j++) {
let hero = heroes[j]; let hero = heroes[j];
if (heroes.length >= 5 && !hero.actorId) { if (num >= 5) {
break;
}
if (!!_.findWhere(role.topFive, {hid: hero.actorId})) {
continue; continue;
} }
let index = _.findIndex(role.topFive,{hid: hero.actorId}); hero.actorId = item.hid;
if (index == -1) { hero.hero = item.hero;
hero.actorId = item.hid; hero.ce = item.ce;
hero.hero = item.hero||''; num = j;
hero.ce = item.ce||0; break;
} else {
heroes[index].ce = item.ce||0;
}
} }
} else {
heroes[index].ce = item.ce;
} }
defCe += item.ce; defCe += item.ce;
} }
if (!!challengeCnt && !!challengeRefTime) { 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}; return { resHeroes};
} else { } 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}; return { resHeroes};
} }
} }
@@ -280,9 +284,9 @@ export function refresh(challengeCnt: number, challengeRefTime: number, seasonEn
if (challengeCnt >= PVP.PVP_CHALLENGE_COUNTS) { if (challengeCnt >= PVP.PVP_CHALLENGE_COUNTS) {
return {challengeCnt, challengeRefTime}; return {challengeCnt, challengeRefTime};
} }
let period = PVP.PVP_CHALLENGE_NORMALTIMES; let period = PVP.PVP_CHALLENGE_NORMALTIMES * 60;
if (checkTodayTime(seasonEndTime)) { if (checkTodayTime(seasonEndTime)) {
period = PVP.PVP_CHALLENGE_FINALTIMES; period = PVP.PVP_CHALLENGE_FINALTIMES * 60;
} }
let time = nowSeconds(); let time = nowSeconds();
let num = Math.floor(( time - challengeRefTime)/period); let num = Math.floor(( time - challengeRefTime)/period);
+5
View File
@@ -234,4 +234,9 @@ export async function getRedis(key: string) {
const str = await client.getAsync(key); const str = await client.getAsync(key);
return str; return str;
} }
export async function delRedis(key: string) {
const client: Redis.RedisClient = pinus.app.get('redis');
await client.delAsync(key);
}
/**************** 寻宝相关 end */ /**************** 寻宝相关 end */
+14 -3
View File
@@ -10,11 +10,12 @@ import { nowSeconds, getTodayZeroPoint } from '../pubUtils/timeUtil';
import { getPvpGkWarIds, getPvpRankRewards, getPvpHeroRewards } from '../pubUtils/data'; import { getPvpGkWarIds, getPvpRankRewards, getPvpHeroRewards } from '../pubUtils/data';
import { getRandomArr } from '../pubUtils/util'; import { getRandomArr } from '../pubUtils/util';
import { getLvByScore } from './pvpService'; import { getLvByScore } from './pvpService';
import { getMyRank, setRank } from './redisService'; import { getMyRank, setRank, getRedis } from './redisService';
import { REDIS_KEY } from '../consts'; import { REDIS_KEY } from '../consts';
import { RankParam } from '../pubUtils/interface'; import { RankParam } from '../pubUtils/interface';
import { RoleModel } from '../db/Role'; import { RoleModel } from '../db/Role';
import { MailModel, MailType } from '../db/Mail'; import { MailModel, MailType } from '../db/Mail';
import { pinus } from 'pinus';
const _ = require('underscore'); const _ = require('underscore');
const PER_SECOND = 1 * 1000; const PER_SECOND = 1 * 1000;
const PER_DAY = 24 * 60 * 60; const PER_DAY = 24 * 60 * 60;
@@ -54,6 +55,11 @@ export async function setPvpSeasonResult(obj:{ name:string }) {
} }
} }
await MailModel.addMails(addMails); 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) { if(pvpRankReward) {
goods = goods.concat(pvpRankReward.reward); goods = goods.concat(pvpRankReward.reward);
} }
let score = 0 let score = 0;
for (let i = 0; i < pvpDefense.heroScores.length; i++) { for (let i = 0; i < pvpDefense.heroScores.length; i++) {
let heroScore = pvpDefense.heroScores[i]; let heroScore = pvpDefense.heroScores[i];
let pvpHeroReward = getScore(pvpHeroRewards, heroScore.score); 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); 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; 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; return pvpDefense;
} }
+172
View File
@@ -1,3 +1,175 @@
module.exports = { 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
}
} }