From 524cdc11c74b1986f1d1ff648468098728ea7b44 Mon Sep 17 00:00:00 2001 From: luying Date: Wed, 6 Jan 2021 17:48:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E5=88=B7=E6=96=B0=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=85=A5=E5=88=9D=E5=A7=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/servers/battle/handler/pvpHandler.ts | 9 +- game-server/app/services/pvpService.ts | 50 ----------- shared/consts/constModules/battleConst.ts | 4 + shared/db/PvpDefense.ts | 13 ++- shared/pubUtils/pvpUtil.ts | 84 ++++++++++++++++++- shared/pubUtils/util.ts | 1 + 6 files changed, 104 insertions(+), 57 deletions(-) delete mode 100644 game-server/app/services/pvpService.ts diff --git a/game-server/app/servers/battle/handler/pvpHandler.ts b/game-server/app/servers/battle/handler/pvpHandler.ts index c1f7b3569..295cc746b 100644 --- a/game-server/app/servers/battle/handler/pvpHandler.ts +++ b/game-server/app/servers/battle/handler/pvpHandler.ts @@ -1,7 +1,7 @@ import {Application, BackendSession} from 'pinus'; const _ = require('underscore'); import { gameData } from '../../../pubUtils/data'; -import { checkPvp } from '../../../pubUtils/pvpUtil'; +import { checkPvp, initPvpInfo } from '../../../pubUtils/pvpUtil'; import { RoleModel } from '../../../db/Role'; import { STATUS } from '../../../consts/statusCode'; import { resResult } from '../../../pubUtils/util'; @@ -16,6 +16,13 @@ export class PvpHandler { constructor(private app: Application) { } + async test(msg: {}, session: BackendSession) { + let roleId = session.get('roleId'); + let role = await RoleModel.findByRoleId(roleId); + const result = await initPvpInfo(role); + return resResult(STATUS.SUCCESS, {result}); + } + async getData (msg: {}, session: BackendSession) { let roleId = session.get('roleId'); let roleName = session.get('roleName'); diff --git a/game-server/app/services/pvpService.ts b/game-server/app/services/pvpService.ts deleted file mode 100644 index 4dd2b6c77..000000000 --- a/game-server/app/services/pvpService.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { dicPvpOpponent } from "../pubUtils/dictionary/DicPvpOpponent"; -import { OppPlayers, PvpDefenseModel } from "../db/PvpDefense"; -import { getRandomIndexByLen } from '../pubUtils/util'; -import { RoleType } from "../db/Role"; - -export async function refreshEnemies(role: RoleType, score: number, pLv: number) { - let { roleId, topFiveCe } = role; - let oppPlayers = new Array(); - let opp = dicPvpOpponent.values() - for(let { id, maxLv, minLv, ratio } of opp) { - let flag = false; // 是否筛选成功 - if(score > 3000) { - flag = await matchPlayer(oppPlayers,roleId, id, pLv + minLv, pLv + maxLv); - // TODO 当前后分数段没有时,返回前一名的玩家 - if(!flag) flag = matchRobot(oppPlayers, topFiveCe, ratio); - } else { - flag = matchRobot(oppPlayers, topFiveCe, ratio); - } - return flag; - } - - return oppPlayers; -} - -async function matchPlayer(oppPlayers: OppPlayers[], roleId: string, pos: number, minLv: number, maxLv: number ) { - let range = await PvpDefenseModel.findByTeamLv(minLv, maxLv); - if(range.length <= 0) return false; - - let index = getRandomIndexByLen(range.length); - let result = range[index]; - if(!result) return false; - if(result.roleId == roleId) { - range.splice(index, 1); - if(range.length <= 0) return false; - index = getRandomIndexByLen(range.length); - result = range[range.length]; - } - - oppPlayers.push({ - oppDef: result._id, - pos, - isRobot: false, - robot: null - }); - return true; -} - -function matchRobot(oppPlayers: OppPlayers[], ce: number, ratio: number) { - return true -} \ No newline at end of file diff --git a/shared/consts/constModules/battleConst.ts b/shared/consts/constModules/battleConst.ts index 48e8b2af1..413fa0307 100644 --- a/shared/consts/constModules/battleConst.ts +++ b/shared/consts/constModules/battleConst.ts @@ -148,3 +148,7 @@ export const COM_BATTLE_ROBOT_ID_NAME = [ {robotRoleId: 'l6wopj9p', robotRoleName: '颜校'}, {robotRoleId: '6wdqcumj', robotRoleName: '吉辉娇'} ]; + +export const ROBOT_NAME = [ + '徐埋农', '简普瞳', '邛瑛', '嵇晁伊', '颜校', '吉辉娇' +]; diff --git a/shared/db/PvpDefense.ts b/shared/db/PvpDefense.ts index 03ad014fa..ed15b60d1 100644 --- a/shared/db/PvpDefense.ts +++ b/shared/db/PvpDefense.ts @@ -41,19 +41,26 @@ function getInitialOppHeros() { return heros; } -class Robot { +export class Robot { @prop({ required: true }) roleId: string; // 角色 id @prop({ required: true }) roleName: string; // 角色名称 - @prop({ required: true }) + @prop({ required: true, default: 19 }) headHid: number; - @prop({ required: true }) + @prop({ required: true, default: 19 }) sHid: number; @prop({ required: true }) defCe: number; @prop({ required: true }) warId: number; // 模板的warId + + constructor(roleId: string, roleName: string, defCe: number, warId: number) { + this.roleId = roleId; + this.roleName = roleName; + this.defCe = defCe; + this.warId = warId; + } } export class OppPlayers { diff --git a/shared/pubUtils/pvpUtil.ts b/shared/pubUtils/pvpUtil.ts index 256e4ec7d..4ebee6963 100644 --- a/shared/pubUtils/pvpUtil.ts +++ b/shared/pubUtils/pvpUtil.ts @@ -1,9 +1,14 @@ /** * 体力系统 */ -import { PvpDefenseModel, Heroes, OppPlayers } from '../db/pvpDefense'; +import { PvpDefenseModel, Heroes, OppPlayers, Robot } from '../db/pvpDefense'; import { RoleType } from '../db/Role'; -import { PVP_PLAYER_POS, PVP_HERO_POS } from '../consts'; +import { PVP_PLAYER_POS, PVP_HERO_POS, ROBOT_NAME } from '../consts'; + +import { dicPvpOpponent } from "../pubUtils/dictionary/DicPvpOpponent"; +import { getRandomIndexByLen, genCode, getRandomByLen } from '../pubUtils/util'; +import { gameData } from "../pubUtils/data"; + export async function initPvpInfo(role: RoleType) { let heroes: Array = []; @@ -21,7 +26,7 @@ export async function initPvpInfo(role: RoleType) { } } //初始化对手人阵容TODO - let oppPlayers: Array = []; + let oppPlayers: Array = await refreshEnemies(role, 0, 1); let result = await PvpDefenseModel.createPvpDefense({ roleId: role.roleId, roleName: role.roleName, heroes, oppPlayers, defCe: role.topFiveCe }); //加入排行榜 TODO @@ -35,3 +40,76 @@ export async function checkPvp(role: RoleType) { result = await initPvpInfo(role); return result; } + + + +// 刷新对手 +export async function refreshEnemies(role: RoleType, score: number, pLv: number) { + let { roleId, topFiveCe } = role; + let oppPlayers = new Array(); + let opp = dicPvpOpponent.values() + for(let { id, maxLv, minLv, ratio } of opp) { + let flag = false; // 是否筛选成功 + if(score > 3000) { // TODO 将这个放到const + flag = await matchPlayer(oppPlayers, id, roleId, pLv + minLv, pLv + maxLv); + // TODO 当前后分数段没有时,返回前一名的玩家 + if(!flag) flag = matchRobot(oppPlayers, id, topFiveCe, ratio); + } else { + flag = matchRobot(oppPlayers, id, topFiveCe, ratio); + } + if(!flag) continue; + } + + return oppPlayers; +} + +async function matchPlayer(oppPlayers: OppPlayers[], pos: number, roleId: string, minLv: number, maxLv: number ) { + let range = await PvpDefenseModel.findByTeamLv(minLv, maxLv); + if(range.length <= 0) return false; + + let index = getRandomIndexByLen(range.length); + let result = range[index]; + if(!result) return false; + if(result.roleId == roleId) { + range.splice(index, 1); + if(range.length <= 0) return false; + index = getRandomIndexByLen(range.length); + result = range[range.length]; + } + + oppPlayers.push({ + oppDef: result._id, + pos, + isRobot: false, + robot: null + }); + return true; +} + +function matchRobot(oppPlayers: OppPlayers[], pos: number, myCe: number, ratio: number) { + let range = gameData.pvpWar; + if(range.length <= 0) return false; + + let index = getRandomIndexByLen(range.length); + let result = range[index]; + if(!result) return false; + + let roleId = generateRobotRoleId(); + let roleName = getRandomByLen(ROBOT_NAME); + let robot = new Robot(roleId, roleName, Math.floor(myCe * ratio), result.war_id) + oppPlayers.push({ + oppDef: null, + pos, + isRobot: true, + robot + }); + return true +} + +function generateRobotRoleId() { + return `${genCode(10)}_r`; +} + +export function checkRoleIsRobot(roleId: string) { + return !!roleId.match(/_r/); +} \ No newline at end of file diff --git a/shared/pubUtils/util.ts b/shared/pubUtils/util.ts index 448797c1c..e2551616f 100644 --- a/shared/pubUtils/util.ts +++ b/shared/pubUtils/util.ts @@ -168,6 +168,7 @@ export async function calculateSumCE(roleId: string, type: number, param: { num? } export function getRandomByLen(arr: Array): number +export function getRandomByLen(arr: Array): string export function getRandomByLen(arr: Array): DicRandomEffectPool export function getRandomByLen(arr: Array): any { let len = arr.length;