diff --git a/game-server/app/services/friendService.ts b/game-server/app/services/friendService.ts index 36428b4e3..042c0a71d 100644 --- a/game-server/app/services/friendService.ts +++ b/game-server/app/services/friendService.ts @@ -1,4 +1,4 @@ -import { gameData } from "../pubUtils/data"; +import { gameData, getDicFriendByLv } from "../pubUtils/data"; import { RoleType, RoleModel } from "../db/Role"; import { FriendRelationType, Relation } from "../db/FriendRelation"; import { getResStr } from "../pubUtils/util"; @@ -16,8 +16,7 @@ import { isRoleOnline } from "./redisService"; export async function increaseFrdCnt(role1: RoleType, role2: RoleType, originalFriendCnt: number) { let { roleId, lv, friendCnt } = role1; - let dicFriend = gameData.roleFriend.get(lv); - + let dicFriend = getDicFriendByLv(lv); if(friendCnt >= dicFriend.frdCnt) return getResStr(STATUS.FRIEND_MY_CNT_MAX); let { roleId: _roleId, lv: _lv, friendCnt: _friendCnt } = role2; diff --git a/game-server/test/comBattle.test.ts b/game-server/test/comBattle.test.ts index 9d8d56fb7..6efd81dcb 100644 --- a/game-server/test/comBattle.test.ts +++ b/game-server/test/comBattle.test.ts @@ -265,7 +265,7 @@ describe('寻宝创建队伍', function() { expect(res.data.teamCode).to.be.a('string'); expect(res.data.roleStatus).to.be.an('array'); res.data.roleStatus.forEach(roleSt => { - expect(roleSt).to.have.all.keys('roleId', 'roleName', 'isCap', 'isFrd', 'headHid', 'sHid', 'topLineupCe', 'lv', 'isRobot', 'heroes', 'killed', 'totalDmg', 'frdRatio'); + expect(roleSt).to.have.all.keys('roleId', 'roleName', 'isCap', 'isFrd', 'head', 'frame', 'spine', 'topLineupCe', 'lv', 'isRobot', 'heroes', 'killed', 'totalDmg', 'frdRatio'); }); const roleIds = res.data.roleStatus.map(roleSt => { return roleSt.roleId }); if (roleIds.indexOf(roleInfoT.roleId) === -1) { diff --git a/game-server/test/friend.test.ts b/game-server/test/friend.test.ts new file mode 100644 index 000000000..3e3ab190a --- /dev/null +++ b/game-server/test/friend.test.ts @@ -0,0 +1,244 @@ +import { Client } from './Client'; +import 'mocha'; +import { PinusWSClient } from 'pinus-robot-plugin'; +import { expect } from 'chai'; +import { checkSuccessResponse } from './CheckPatten'; +import { BLOCK_OPEATE } from '../app/consts'; + +describe('pvp测试', function() { + + let pinusClient: PinusWSClient; + let pinusClientT: PinusWSClient; // 用做测试队友 + let roleInfo; + let roleInfoT; + let applyCode; + + beforeEach(function(done) { + const c = new Client(); + const cT = new Client('13121622738'); + const timer = setInterval(() => { + if (c.client && cT.client) { + pinusClient = c.client; + roleInfo = c.roleInfo; + pinusClientT = cT.client; + roleInfoT = cT.roleInfo; + clearInterval(timer); + done(); + } + }, 500); + }); + + afterEach(function(done) { + pinusClient.disconnect(); + pinusClientT.disconnect(); + // disconnect 后等待 500ms,供服务器清理环境、退出频道等 + setTimeout(() => { + done(); + }, 500); + }); + + it('获取推荐列表', function(done) { + pinusClient.request('role.friendHandler.getRecommend', {} , (res) => { + checkSuccessResponse(res); + expect(res.data.list).to.be.a('array'); + res.data.list.forEach(cur => { + checkFriendRecommendParams(cur); + }) + done(); + }); + }); + + it('查询好友', function(done) { + pinusClient.request('role.friendHandler.searchUser', { value: roleInfoT.roleId } , (res) => { + checkSuccessResponse(res); + expect(res.data.list).to.be.a('array'); + res.data.list.forEach(cur => { + checkFriendRecommendParams(cur); + }) + done(); + }); + }); + + it('申请好友', function(done) { + pinusClient.request('role.friendHandler.applyFriend', { roleIds: [roleInfoT.roleId] } , (res) => { + checkSuccessResponse(res); + expect(res.data.isSuccess).to.be.a('boolean'); + expect(res.data.msg).to.be.a('string'); + expect(res.data.roleIds).to.be.a('array'); + res.data.roleIds.forEach(cur => { + expect(cur).to.be.a('string'); + }) + done(); + }); + }); + + it('获取申请列表', function(done) { + pinusClientT.request('role.friendHandler.getApplyList', {} , (res) => { + + checkSuccessResponse(res); + expect(res.data.list).to.be.a('array'); + res.data.list.forEach(cur => { + checkFriendApplyParams(cur); + }); + + let apply = res.data.list.find(cur => cur.roleId == roleInfo.roleId); + applyCode = apply.applyCode; + done(); + }); + }); + + it('同意申请', function(done) { + pinusClientT.request('role.friendHandler.handleApply', { applyCodeList: [applyCode], isPass: true } , (res) => { + checkSuccessResponse(res); + expect(res.data.isSuccess).to.be.a('boolean'); + expect(res.data.msg).to.be.a('string'); + expect(res.data.applyCodeList).to.be.a('array'); + res.data.applyCodeList.forEach(cur => { + expect(cur).to.be.a('string'); + }) + + expect(res.data.list).to.be.a('array'); + res.data.list.forEach(cur => { + checkFriendListParam(cur); + }); + + expect(res.data.friendCnt).to.be.a('number'); + done(); + }); + }); + + it('获取好友列表', function(done) { + pinusClient.request('role.friendHandler.getFriendList', {} , (res) => { + checkSuccessResponse(res); + + expect(res.data.list).to.be.a('array'); + res.data.list.forEach(cur => { + checkFriendListParam(cur); + }); + + expect(res.data.todayReceiveCnt).to.be.a('number'); + expect(res.data.todaySendCnt).to.be.a('number'); + expect(res.data.friendCnt).to.be.a('number'); + expect(res.data.blockCnt).to.be.a('number'); + done(); + }); + }); + + it('拉黑', function(done) { + pinusClient.request('role.friendHandler.setBlackList', { roleId: roleInfoT.roleId, type: BLOCK_OPEATE.ADD } , (res) => { + expect(res.data.frdRoleIds).to.be.a('array'); + res.data.frdRoleIds.forEach(cur => { + expect(cur).to.be.a('string'); + }); + expect(res.data.blackRoleIds).to.be.a('array'); + res.data.blackRoleIds.forEach(cur => { + expect(cur).to.be.a('string'); + }) + + expect(res.data.list).to.be.a('array'); + res.data.list.forEach(cur => { + checkBlackListParam(cur); + }); + + expect(res.data.isSuccess).to.be.a('boolean'); + expect(res.data.msg).to.be.a('string'); + expect(res.data.friendCnt).to.be.a('number'); + expect(res.data.blockCnt).to.be.a('number'); + + done(); + }); + }); + + it('获取黑名单', function(done) { + pinusClient.request('role.friendHandler.getBlackList', {} , (res) => { + + expect(res.data.list).to.be.a('array'); + res.data.list.forEach(cur => { + checkBlackListParam(cur); + }); + expect(res.data.friendCnt).to.be.a('number'); + expect(res.data.blockCnt).to.be.a('number'); + + done(); + }); + }); + + it('获得玩家详细信息', function(done) { + pinusClient.request('role.friendHandler.getPlayerDetail', { roleId: roleInfoT.roleId } , (res) => { + + // 从黑名单移除 + pinusClient.request('role.friendHandler.setBlackList', { roleId: roleInfoT.roleId, type: BLOCK_OPEATE.REMOVE_BLACK } , (res) => { + done(); + }); + }); + }); +}); + +function checkFriendRecommendParams(data) { + expect(data.roleId).to.be.a('string'); + expect(data.roleName).to.be.a('string'); + expect(data.lv).to.be.a('number'); + expect(data.head).to.be.a('number'); + expect(data.spine).to.be.a('number'); + expect(data.frame).to.be.a('number'); + expect(data.ce).to.be.a('number'); + expect(data.title).to.be.a('number'); + expect(data.recFrdApplyCnt).to.be.a('number'); + expect(data.type).to.be.a('number'); + expect(data.serverId).to.be.a('number'); + expect(data.serverName).to.be.a('string'); +} + +function checkFriendApplyParams(data) { + expect(data.applyCode).to.be.a('string'); + expect(data.roleId).to.be.a('string'); + expect(data.roleName).to.be.a('string'); + expect(data.lv).to.be.a('number'); + expect(data.head).to.be.a('number'); + expect(data.spine).to.be.a('number'); + expect(data.frame).to.be.a('number'); + expect(data.ce).to.be.a('number'); + expect(data.title).to.be.a('number'); + expect(data.friendCnt).to.be.a('number'); + expect(data.type).to.be.a('number'); + expect(data.serverId).to.be.a('number'); + expect(data.serverName).to.be.a('string'); +} + +function checkFriendListParam(data) { + expect(data.roleId).to.be.a('string'); + expect(data.roleName).to.be.a('string'); + expect(data.lv).to.be.a('number'); + expect(data.head).to.be.a('number'); + expect(data.spine).to.be.a('number'); + expect(data.frame).to.be.a('number'); + expect(data.ce).to.be.a('number'); + expect(data.title).to.be.a('number'); + expect(data.guildName).to.be.a('string'); + expect(data.isOnline).to.be.a('boolean'); + expect(data.quitTime).to.be.a('number'); + expect(data.friendValue).to.be.a('number'); + expect(data.friendLv).to.be.a('number'); + expect(data.canReceive).to.be.a('boolean'); + expect(data.canSend).to.be.a('boolean'); + expect(data.type).to.be.a('number'); + expect(data.serverId).to.be.a('number'); + expect(data.serverName).to.be.a('string'); +} + +function checkBlackListParam(data) { + expect(data.roleId).to.be.a('string'); + expect(data.roleName).to.be.a('string'); + expect(data.lv).to.be.a('number'); + expect(data.head).to.be.a('number'); + expect(data.spine).to.be.a('number'); + expect(data.frame).to.be.a('number'); + expect(data.ce).to.be.a('number'); + expect(data.title).to.be.a('number'); + expect(data.guildName).to.be.a('string'); + expect(data.isOnline).to.be.a('boolean'); + expect(data.quitTime).to.be.a('number'); + expect(data.type).to.be.a('number'); + expect(data.serverId).to.be.a('number'); + expect(data.serverName).to.be.a('string'); +} \ No newline at end of file diff --git a/game-server/test/guild.test.ts b/game-server/test/guild.test.ts index 2a9e90129..03019429a 100644 --- a/game-server/test/guild.test.ts +++ b/game-server/test/guild.test.ts @@ -70,6 +70,7 @@ describe('军团测试', function() { expect(res.data).to.have.deep.property('leader').that.is.an('object'); expect(res.data.leader).to.have.deep.property('roleName').that.is.an('string'); expect(res.data.leader).to.have.deep.property('frame').that.is.an('number'); + expect(res.data.leader).to.have.deep.property('spine').that.is.an('number'); expect(res.data.leader).to.have.deep.property('head').that.is.an('number'); expect(res.data.leader).to.have.deep.property('lv').that.is.an('number'); expect(res.data.leader).to.have.deep.property('ce').that.is.an('number'); @@ -101,6 +102,7 @@ describe('军团测试', function() { expect(list).to.have.deep.property('roleName').that.is.a('string'); expect(list).to.have.deep.property('ce').that.is.a('number'); expect(list).to.have.deep.property('head').that.is.a('number'); + expect(list).to.have.deep.property('spine').that.is.a('number'); expect(list).to.have.deep.property('frame').that.is.a('number'); expect(list).to.have.deep.property('lv').that.is.a('number'); expect(list).to.have.deep.property('title').that.is.a('number'); @@ -120,6 +122,7 @@ describe('军团测试', function() { expect(list).to.have.deep.property('roleName').that.is.a('string'); expect(list).to.have.deep.property('ce').that.is.a('number'); expect(list).to.have.deep.property('head').that.is.a('number'); + expect(list).to.have.deep.property('spine').that.is.a('number'); expect(list).to.have.deep.property('frame').that.is.a('number'); expect(list).to.have.deep.property('lv').that.is.a('number'); expect(list).to.have.deep.property('title').that.is.a('number'); @@ -143,6 +146,7 @@ describe('军团测试', function() { expect(list).to.have.deep.property('roleName').that.is.a('string'); expect(list).to.have.deep.property('ce').that.is.a('number'); expect(list).to.have.deep.property('head').that.is.a('number'); + expect(list).to.have.deep.property('spine').that.is.a('number'); expect(list).to.have.deep.property('frame').that.is.a('number'); expect(list).to.have.deep.property('lv').that.is.a('number'); expect(list).to.have.deep.property('title').that.is.a('number'); diff --git a/game-server/test/pvp.test.ts b/game-server/test/pvp.test.ts new file mode 100644 index 000000000..9a80ea438 --- /dev/null +++ b/game-server/test/pvp.test.ts @@ -0,0 +1,161 @@ +import { Client } from './Client'; +import 'mocha'; +import { PinusWSClient } from 'pinus-robot-plugin'; +import { expect } from 'chai'; +import { checkSuccessResponse } from './CheckPatten'; + +describe('pvp测试', function() { + let pinusClient: PinusWSClient; + let detailRoleId; + + beforeEach(function(done) { + const c = new Client(); + const timer = setInterval(() => { + if (c.client) { + pinusClient = c.client; + clearInterval(timer); + done(); + } + }, 500); + }); + + afterEach(function(done) { + pinusClient.disconnect(); + // disconnect 后等待 500ms,供服务器清理环境、退出频道等 + setTimeout(() => { + done(); + }, 500); + }); + + it('获得主界面信息', function(done) { + getData(pinusClient, false, function(data) { + detailRoleId = data.oppPlayers[0].roleId; + done(); + }); // 先不结算赛季 + }); + + it('获取对手详细信息', function(done) { + pinusClient.request('battle.pvpHandler.getPlayerDetail', { roleId: detailRoleId }, (res) => { + checkSuccessResponse(res); + expect(res.data.roleId).to.be.a('string'); + expect(res.data.roleName).to.be.a('string'); + expect(res.data.lv).to.be.a('number'); + expect(res.data.title).to.be.a('number'); + expect(res.data.head).to.be.a('number'); + expect(res.data.frame).to.be.a('number'); + expect(res.data.spine).to.be.a('number'); + expect(res.data.defCe).to.be.a('number'); + expect(res.data.score).to.be.a('number'); + expect(res.data.rank).to.be.a('number'); + expect(res.data.pLv).to.be.a('number'); + expect(res.data.heroes).to.be.a('array'); + res.data.heroes.forEach(hero => { + expect(hero.actorId).to.be.a('number'); + expect(hero.lv).to.be.a('number'); + expect(hero.star).to.be.a('number'); + expect(hero.colorStar).to.be.a('number'); + expect(hero.quality).to.be.a('number'); + expect(hero.score).to.be.a('number'); + }); + done(); + }); + }); + + it('刷新对手', function(done) { + pinusClient.request('battle.pvpHandler.refreshOppPlayer', { }, (res) => { + checkSuccessResponse(res); + checkOppPlayers(res.data.oppPlayers); + expect(res.data.refOppCnt).to.be.a('number'); + done(); + }); + }); + + it('获得排行榜', function(done) { + pinusClient.request('battle.pvpHandler.getRank', { }, (res) => { + checkSuccessResponse(res); + expect(res.data.ranks).to.be.a('array'); + res.data.ranks.forEach(rank => { + checkRank(rank); + }); + checkRank(res.data.myRank); + done(); + }); + }); + +}); + +function checkRank(rank) { + expect(rank.rank).to.be.a('number'); + expect(rank.roleId).to.be.a('string'); + expect(rank.roleName).to.be.a('string'); + expect(rank.head).to.be.a('number'); + expect(rank.frame).to.be.a('number'); + expect(rank.spine).to.be.a('number'); + expect(rank.num).to.be.a('number'); + expect(rank.title).to.be.a('number'); + expect(rank.lv).to.be.a('number'); +} + +function getData(pinusClient, seasonEnd: boolean, cb) { + + pinusClient.request('battle.pvpHandler.getData', {}, (res) => { + checkSuccessResponse(res); + expect(res.data.warId).to.be.a('number'); + expect(res.data.seasonNum).to.be.a('number'); + expect(res.data.seasonEndTime).to.be.a('number'); + expect(res.data.myRank).to.be.a('number'); + checkOppPlayers(res.data.oppPlayers); + expect(res.data.heroes).to.be.a('array'); + res.data.heroes.forEach(hero => { + expect(hero.actorId).to.be.a('number'); + expect(hero.dataId).to.be.a('number'); + expect(hero.order).to.be.a('number'); + }); + expect(res.data.score).to.be.a('number'); + expect(res.data.pLv).to.be.a('number'); + expect(res.data.winStreakNum).to.be.a('number'); + expect(res.data.challengeCnt).to.be.a('number'); + expect(res.data.challengeRefTime).to.be.a('number'); + expect(res.data.receivedBox).to.be.a('array'); + res.data.receivedBox.forEach(box => { + expect(box).to.be.a('number'); + }); + expect(res.data.hisScore).to.be.a('number'); + expect(res.data.heroScores).to.be.a('array'); + res.data.heroScores.forEach(heroScore => { + expect(heroScore.hid).to.be.a('number'); + expect(heroScore.score).to.be.a('number'); + }); + expect(res.data.isFirstEntry).to.be.a('boolean'); + expect(res.data.isDefaultHero).to.be.a('boolean'); + expect(res.data.refOppCnt).to.be.a('number'); + if(seasonEnd) { + checkSeasonResult(res.data.seasonResult); + } + cb(res.data); + }); +} + +function checkOppPlayers(oppPlayers) { + expect(oppPlayers).to.be.a('array'); + oppPlayers.forEach(player => { + expect(player.pos).to.be.a('number'); + expect(player.defCe).to.be.a('number'); + expect(player.frame).to.be.a('number'); + expect(player.head).to.be.a('number'); + expect(player.lv).to.be.a('number'); + expect(player.oppRoleId).to.be.a('string'); + expect(player.pLv).to.be.a('number'); + expect(player.rankLv).to.be.a('number'); + expect(player.roleName).to.be.a('string'); + expect(player.spine).to.be.a('number'); + expect(player.title).to.be.a('number'); + expect(player.roleId).to.be.a('string'); + expect(player.addScore).to.be.a('number'); + expect(player.plusScore).to.be.a('number'); + }); +} + +function checkSeasonResult(resultRecord) { + expect(resultRecord).to.be.a('object'); +} \ No newline at end of file diff --git a/shared/pubUtils/data.ts b/shared/pubUtils/data.ts index 170d99097..ec55090e5 100644 --- a/shared/pubUtils/data.ts +++ b/shared/pubUtils/data.ts @@ -55,7 +55,7 @@ import { RewardInter } from "./interface"; import { dicArmyDevelopConsume } from '../pubUtils/dictionary/DicArmyDevelopConsume'; import { dicArmyBossRank } from '../pubUtils/dictionary/DicArmyBossRank'; import { dicArmyDonate } from '../pubUtils/dictionary/DicArmyDonateBoxReward'; -import { dicRoleFriend } from "./dictionary/DicRoleFriend"; +import { dicRoleFriend, DicRoleFriend } from "./dictionary/DicRoleFriend"; import { dicRoleFriendLv } from "./dictionary/DicRoleFriendLv"; import { Attribute } from "../domain/roleField/attribute"; @@ -419,4 +419,19 @@ export function getFriendLvByExp(exp: number) { if(exp < sum) break; } return resultLv; +} + +/** + * 根据主公当前经验获得当前等级 + * @param exp 累积经验 + */ +export function getDicFriendByLv(lv: number) { + let dicFriend: DicRoleFriend; + let entries = gameData.roleFriend.entries(); + for (let [dicLv, dic ] of entries) { + dicFriend = dic; + if(lv > dicLv) break; + } + + return dicFriend; } \ No newline at end of file