From 94fc48a59a8d8e3691a9748f9496596e34fb9e5a Mon Sep 17 00:00:00 2001 From: mamengke01 <794347210@qq.com> Date: Thu, 7 Jan 2021 12:25:19 +0800 Subject: [PATCH] =?UTF-8?q?pvp=E9=9A=8F=E6=9C=BA=E5=9C=B0=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game-server/app.ts | 11 +- .../app/servers/battle/handler/pvpHandler.ts | 18 ++-- .../app/services/playerEventService.ts | 2 +- .../app/services/pvpService.ts | 17 ++- game-server/app/services/timeTaskService.ts | 66 +++++++++++- game-server/config/adminServer.ts | 3 +- game-server/config/serverProtos.ts | 97 ++++++++++++++++- game-server/config/servers.ts | 3 + shared/consts/constModules/sysConst.ts | 2 +- shared/db/Item.ts | 102 +++++++++--------- shared/db/PvpDefense.ts | 18 +++- shared/db/SystemConfig.ts | 15 +++ shared/pubUtils/data.ts | 15 ++- shared/pubUtils/dicParam.ts | 7 ++ shared/pubUtils/dictionary/DicGkPvp.ts | 19 ++++ shared/pubUtils/timeUtil.ts | 15 +++ shared/pubUtils/util.ts | 1 - 17 files changed, 327 insertions(+), 84 deletions(-) rename shared/pubUtils/pvpUtil.ts => game-server/app/services/pvpService.ts (91%) create mode 100644 shared/pubUtils/dictionary/DicGkPvp.ts create mode 100644 shared/pubUtils/timeUtil.ts diff --git a/game-server/app.ts b/game-server/app.ts index d05e59bf4..7208e556c 100644 --- a/game-server/app.ts +++ b/game-server/app.ts @@ -14,7 +14,7 @@ import * as routeUtil from './app/util/routeUtil'; import { preload } from './preload'; var checkEventFilter = require('./app/servers/battle/filter/checkEventFilter'); import { connectRedis } from './config/redis'; - +import * as timeTaskService from './app/services/timeTaskService'; // TODO 需要整理。 import _pinus = require('pinus'); @@ -102,6 +102,15 @@ app.configure('production|development|alpha|dev', 'gate', function () { }); }); +app.configure('production|development|alpha|dev', 'systimer', function () { + app.set('connectorConfig', + { + connector: pinus.connectors.hybridconnector, + useProtobuf: true + }); + timeTaskService.init(); +}); + function errorHandler(err: Error, msg: any, resp: any, session: FrontendOrBackendSession, cb: HandlerCallback) { diff --git a/game-server/app/servers/battle/handler/pvpHandler.ts b/game-server/app/servers/battle/handler/pvpHandler.ts index 2d45e3735..0d3686d2d 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, initPvpInfo, refreshEnemies, getEnemies } from '../../../pubUtils/pvpUtil'; +import { checkPvp, initPvpInfo, refreshEnemies, getEnemies, } from '../../../services/pvpService'; import { RoleModel, RoleType } from '../../../db/Role'; import { STATUS } from '../../../consts/statusCode'; import { resResult } from '../../../pubUtils/util'; @@ -25,13 +25,15 @@ export class PvpHandler { async getData (msg: {}, session: BackendSession) { let roleId = session.get('roleId'); - let roleName = session.get('roleName'); - let sid = session.get('sid'); - let serverId = session.get('serverId'); - let result = await PvpDefenseModel.findByRoleIdIncludeAll(roleId); - let system = await SystemConfigModel.findSystemConfig(); - - return resResult(STATUS.SUCCESS, { data: result }); + 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 {warId, seasonNum, seasonEndTime} = await SystemConfigModel.findSystemConfig(); + if (playerSeaSonNum !== seasonNum) { + //TODO去结算 + } + 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 }); } diff --git a/game-server/app/services/playerEventService.ts b/game-server/app/services/playerEventService.ts index 4c4c4df8d..81450943d 100644 --- a/game-server/app/services/playerEventService.ts +++ b/game-server/app/services/playerEventService.ts @@ -2,7 +2,7 @@ * 体力系统 */ import { fromCallback } from 'bluebird'; -import { checkPvp } from '../pubUtils/pvpUtil' +import { checkPvp } from '../services/pvpService' import { getFuncsSwitch } from '../pubUtils/data'; import { FUNCS_ID, FUNC_OPT_TYPE } from '../consts/constModules/sysConst'; import { RoleModel } from '../db/Role' diff --git a/shared/pubUtils/pvpUtil.ts b/game-server/app/services/pvpService.ts similarity index 91% rename from shared/pubUtils/pvpUtil.ts rename to game-server/app/services/pvpService.ts index a7ea29540..edda4d19e 100644 --- a/shared/pubUtils/pvpUtil.ts +++ b/game-server/app/services/pvpService.ts @@ -1,14 +1,14 @@ /** * 体力系统 */ -import { PvpDefenseModel, Heroes, OppPlayers, Robot, PvpDefenseType } from '../db/pvpDefense'; -import { RoleType } from '../db/Role'; -import { PVP_PLAYER_POS, PVP_HERO_POS, ROBOT_NAME } from '../consts'; +import { PvpDefenseModel, Heroes, OppPlayers, Robot, PvpDefenseType } from '../../../shared/db/pvpDefense'; +import { RoleType } from '../../../shared/db/Role'; +import { PVP_HERO_POS, ROBOT_NAME } from '../../../shared/consts'; -import { dicPvpOpponent, DicPvpOpponent } from "../pubUtils/dictionary/DicPvpOpponent"; -import { getRandomIndexByLen, genCode, getRandomByLen } from '../pubUtils/util'; -import { oppPlayersInter } from '../pubUtils/interface'; -import { gameData } from "../pubUtils/data"; +import { dicPvpOpponent, DicPvpOpponent } from "../../../shared/pubUtils/dictionary/DicPvpOpponent"; +import { getRandomIndexByLen, genCode, getRandomByLen } from '../../../shared/pubUtils/util'; +import { oppPlayersInter } from '../../../shared/pubUtils/interface'; +import { gameData } from "../../../shared/pubUtils/data"; export async function initPvpInfo(role: RoleType) { @@ -26,9 +26,8 @@ export async function initPvpInfo(role: RoleType) { }); } } - //初始化对手人阵容TODO + //初始化对手人阵容 let oppPlayers: Array = await refreshEnemies(role, 0, 1); - let result = await PvpDefenseModel.createPvpDefense({ roleId: role.roleId, roleName: role.roleName, role: role._id, heroes, oppPlayers, defCe: role.topFiveCe }); //加入排行榜 TODO return result; diff --git a/game-server/app/services/timeTaskService.ts b/game-server/app/services/timeTaskService.ts index 046170310..d68c0be57 100644 --- a/game-server/app/services/timeTaskService.ts +++ b/game-server/app/services/timeTaskService.ts @@ -2,12 +2,70 @@ * 体力系统 */ -import { scheduleJob, cancelJob } from 'pinus-scheduler'; - +import { scheduleJob } from 'pinus-scheduler'; +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 { getRandomArr } from '../pubUtils/util'; +const _ = require('underscore'); +const PER_SECOND = 1 * 1000; +const PER_DAY = 24 * 60 * 60; +const SETTLE_DIFF = 29 * 60; +const LIMIT_NUM = 1000; export async function init() { - scheduleJob("0 31 23 * * *", setPvpSeasonResult, {name:'setPvpSeasonResult'}) + let seasonEndTime = 0; + let systemConfig = await SystemConfigModel.findSystemConfig(); + if (!systemConfig) { + let warIds = getPvpGkWarIds(); + let warId = warIds[0];//TODO随机地图 + seasonEndTime = PVP.PVP_SEASON_DAYS * PER_DAY + getTodayZeroPoint(); + await SystemConfigModel.createSystemConfig( seasonEndTime, warId ); + } else { + seasonEndTime = systemConfig.seasonEndTime; + if (systemConfig.seasonEndTime - SETTLE_DIFF <= nowSeconds()) { + await setPvpSeasonResult(); + seasonEndTime = PVP.PVP_SEASON_DAYS * PER_DAY + getTodayZeroPoint(); + systemConfig.seasonNum++; + await SystemConfigModel.updateSystemConfig({ seasonEndTime, seasonNum: systemConfig.seasonNum}); + } + } + let settleTime = seasonEndTime - SETTLE_DIFF - nowSeconds(); + // setTimeout(setPvpSeasonResult, settleTime * PER_SECOND); + scheduleJob("0 0 0 * * 1", resetPvpWarId) } export async function setPvpSeasonResult() { - + console.log('setPvpSeasonResult'); + let pvpDefenses = await PvpDefenseModel.getPvpDef(LIMIT_NUM); + for (let pvpDefense of pvpDefenses) { + await setPvpDefResult(pvpDefense); + } + await setNextPvpTime(); +} + +async function setPvpDefResult(pvpDefense: PvpDefenseType) { + await PvpDefenseModel.updateInfo(pvpDefense.roleId, {score:100, pLv: 1}); + +} + +export async function resetPvpWarId() { + console.log('resetPvpWarId'); + let systemConfig = await SystemConfigModel.findSystemConfig(); + let warIds = getPvpGkWarIds(); + let index = _.indexOf(warIds, systemConfig.warId); + if (index != -1) { + warIds.splice(index, 1); + } + let res = getRandomArr(warIds, 1); + let warId = res[0];//TODO随机地图 + await SystemConfigModel.updateSystemConfig({ warId }); +} + +async function setNextPvpTime() { + let seasonEndTime = PVP.PVP_SEASON_DAYS * PER_DAY + getTodayZeroPoint(); + await SystemConfigModel.updateSeason(seasonEndTime); + let settleTime = seasonEndTime - SETTLE_DIFF - nowSeconds(); + setTimeout(setPvpSeasonResult, settleTime * PER_SECOND); } diff --git a/game-server/config/adminServer.ts b/game-server/config/adminServer.ts index 00ea21c30..dee61d8aa 100644 --- a/game-server/config/adminServer.ts +++ b/game-server/config/adminServer.ts @@ -19,5 +19,4 @@ module.exports = [{ }, { 'type': 'systimer', 'token': 'agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn' -} -]; \ No newline at end of file +}]; \ No newline at end of file diff --git a/game-server/config/serverProtos.ts b/game-server/config/serverProtos.ts index f4d625303..9250d1230 100644 --- a/game-server/config/serverProtos.ts +++ b/game-server/config/serverProtos.ts @@ -1,3 +1,98 @@ module.exports = { - + 'onChat': { + 'required string msg': 1, + 'required string from': 2, + 'required string target': 3 + }, + 'onItemUpdate': { + 'message Data': { + "message Good": { + 'required uInt32 id': 1, + 'required uInt32 count': 2, + }, + 'repeated Good goods': 1, + }, + 'required string msg': 1, + 'required uInt32 code': 2, + 'required Data data': 3 + }, + 'onPlayerCeUpdate': { + 'message Data': { + "message Hero": { + 'required uInt32 hid': 1, + 'required uInt32 ce': 2, + }, + 'required uInt32 ce': 1, + 'repeated Hero heros': 2, + 'required uInt32 topFiveCe': 3 + }, + 'required string msg': 1, + 'required uInt32 code': 2, + 'required Data data': 3 + }, + 'onPlayerDataChange': { + 'message Data': { + 'optional uInt32 coin': 1, + 'optional uInt32 giftGold': 2, + 'optional uInt32 gold': 3, + 'optional uInt32 ap': 4 + }, + 'required string msg': 1, + 'required uInt32 code': 2, + 'required Data data': 3 + }, + 'onHeroSkinChange': { + 'message Data': { + "message SkinInfo": { + "message Skin": { + 'required uInt32 id': 1, + 'required boolean enable': 2 + }, + 'repeated Skin skins': 1, + }, + 'repeated SkinInfo skinInfos': 1 + }, + 'required string msg': 1, + 'required uInt32 code': 2, + 'required Data data': 3 + }, + 'onEquipAdd': { + 'message Data': { + "message EquipInfo": { + "message RandSe": { + 'required uInt32 id': 1, + 'required uInt32 seid': 2, + 'required int32 rand': 3, + 'required boolean locked': 4 + }, + "message Hole": { + 'required uInt32 id': 1, + 'required boolean isOpen': 2, + 'required uInt32 jewel': 3 + }, + 'repeated Hole holes': 1, + 'repeated RandSe randSe': 2, + 'required uInt32 seqId': 3, + 'required uInt32 id': 4, + 'required uInt32 hid': 6, + 'required uInt32 count': 7, + 'required uInt32 quality': 8, + 'required uInt32 ePlaceId': 9, + 'required uInt32 suitId': 11, + 'required int32 randRange': 12 + }, + 'repeated EquipInfo equipInfos': 1 + }, + 'required string msg': 1, + 'required uInt32 code': 2, + 'required Data data': 3 + }, + 'onEquipDel': { + 'message Data': { + 'repeated uInt32 equips': 1 + }, + 'required string msg': 1, + 'required uInt32 code': 2, + 'required Data data': 3 + } }; diff --git a/game-server/config/servers.ts b/game-server/config/servers.ts index b12d6222c..7f4e6463e 100644 --- a/game-server/config/servers.ts +++ b/game-server/config/servers.ts @@ -40,6 +40,9 @@ module.exports = { 'frontend': true, "args": " --inspect=9236" } + ], + 'systimer': [ + {'id': 'systimer-server-1', 'host': '127.0.0.1', 'port': 6056, "args": " --inspect=9233"} ] }, 'production': { diff --git a/shared/consts/constModules/sysConst.ts b/shared/consts/constModules/sysConst.ts index f2f9fd452..37a3143a1 100644 --- a/shared/consts/constModules/sysConst.ts +++ b/shared/consts/constModules/sysConst.ts @@ -292,7 +292,7 @@ export const FILENAME = { DIC_PVP_OPPONENT: 'dic_pvp_opponent', DIC_PVP_TEAM_LEVEL: 'dic_pvp_teamLevel', DIC_GK_PVP: 'dic_zyz_gk_pvp', - DIC_PVP_REFRESHCONSUME: 'dic_pvp_refreshConsume' + DIC_PVP_REFRESHCONSUME: 'dic_pvp_refreshConsume', } export const WAR_RELATE_TABLES = [ diff --git a/shared/db/Item.ts b/shared/db/Item.ts index dbed8c730..9612e18e6 100644 --- a/shared/db/Item.ts +++ b/shared/db/Item.ts @@ -1,7 +1,7 @@ import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose'; const _ = require('underscore'); - +const Transaction = require('mongoose-transactions'); @index({ roleId: 1, id: 1 }) @index({ seqId: 1 }) @modelOptions({ schemaOptions: { id: false } }) @@ -50,59 +50,59 @@ export default class Item extends BaseModel { return items; } - public static async decreaseItems(roleId: string, items: Array<{ id: number, count: number, ratio?: number }>, lean = true) { - let updateItems = new Array<{ id: number, count: number, ratio?: number }>(), hasError: boolean = false, result = new Array(); - for (let { id, count, ratio } of items) { - let rec: ItemType; - if (!ratio) { - rec = await ItemModel.findOneAndUpdate({ roleId, id, count: { $gte: count } }, { $inc: { count: -1 * count } }, { new: true }).lean(lean); - } else { - rec = await ItemModel.findOneAndUpdate({ roleId, id }, { $inc: { count: ratio * count } }, { new: true, upsert: true }).lean(lean); - } - if (!!rec) { - let index = _.findIndex(result,{id}) - if (!!result[index]) { - result[index] = { id: rec.id, count: rec.count } - } else { - result.push({ id: rec.id, count: rec.count }); - } - updateItems.push({ id, count, ratio }); - } else { - hasError = true; break; - } - } - if (hasError) { // 数量不足 - for (let { id, count, ratio } of updateItems) { - if (!ratio) ratio = -1; - await ItemModel.findOneAndUpdate({ roleId, id }, { $inc: { count: -ratio * count } }, { new: true }).lean(lean); - } - return { hasError: true } - } else { - return { hasError: false, result } - } - } - // public static async decreaseItems(roleId: string, items: Array<{ id: number, count: number, ratio?: number}>, lean = true) { - // const transaction = new Transaction(); - // let hasError: boolean = false, result = new Array(); - // try { - // for (let { id, count, ratio } of items) { - // if (ratio) ratio = -1; - // await transaction.update({ roleId, id, count: { $gte: count } }, { $inc: { count: ratio * count } }, { new: true}); - // //const rec: ItemType = await transaction.findOneAndUpdate({ roleId, id, count: { $gte: count } }, { $inc: { count: ratio * count } }, { new: true}).lean(lean); - // // if (!!rec) { - // // result.push({ id: rec.id, count: rec.count }); - // // } else { - // // hasError = true; break; - // // } + // public static async decreaseItems(roleId: string, items: Array<{ id: number, count: number, ratio?: number }>, lean = true) { + // let updateItems = new Array<{ id: number, count: number, ratio?: number }>(), hasError: boolean = false, result = new Array(); + // for (let { id, count, ratio } of items) { + // let rec: ItemType; + // if (!ratio) { + // rec = await ItemModel.findOneAndUpdate({ roleId, id, count: { $gte: count } }, { $inc: { count: -1 * count } }, { new: true }).lean(lean); + // } else { + // rec = await ItemModel.findOneAndUpdate({ roleId, id }, { $inc: { count: ratio * count } }, { new: true, upsert: true }).lean(lean); // } - // await transaction.run(); - // return {hasError, result}; - // } catch (error) { - // await transaction.rollback().catch(console.error); - // transaction.clean(); - // return {error}; + // if (!!rec) { + // let index = _.findIndex(result,{id}) + // if (!!result[index]) { + // result[index] = { id: rec.id, count: rec.count } + // } else { + // result.push({ id: rec.id, count: rec.count }); + // } + // updateItems.push({ id, count, ratio }); + // } else { + // hasError = true; break; + // } + // } + // if (hasError) { // 数量不足 + // for (let { id, count, ratio } of updateItems) { + // if (!ratio) ratio = -1; + // await ItemModel.findOneAndUpdate({ roleId, id }, { $inc: { count: -ratio * count } }, { new: true }).lean(lean); + // } + // return { hasError: true } + // } else { + // return { hasError: false, result } // } // } + public static async decreaseItems(roleId: string, items: Array<{ id: number, count: number, ratio?: number}>, lean = true) { + const transaction = new Transaction(); + let hasError: boolean = false, result = new Array(); + try { + for (let { id, count, ratio } of items) { + if (ratio) ratio = -1; + await transaction.update({ roleId, id, count: { $gte: count } }, { $inc: { count: ratio * count } }, { new: true}); + const rec: ItemType = await transaction.findOneAndUpdate({ roleId, id, count: { $gte: count } }, { $inc: { count: ratio * count } }, { new: true}).lean(lean); + if (!!rec) { + result.push({ id: rec.id, count: rec.count }); + } else { + hasError = true; break; + } + } + await transaction.run(); + return {hasError, result}; + } catch (error) { + await transaction.rollback().catch(console.error); + transaction.clean(); + return {error}; + } + } public static async deleteAccount(roleId: string) { let result = await ItemModel.deleteMany({ roleId }); diff --git a/shared/db/PvpDefense.ts b/shared/db/PvpDefense.ts index c27951cee..637899124 100644 --- a/shared/db/PvpDefense.ts +++ b/shared/db/PvpDefense.ts @@ -7,7 +7,9 @@ import { PVP_PLAYER_POS, PVP_HERO_POS } from '../consts'; interface pvpUpdateInter { _id?: string; - oppPlayers: OppPlayers[] + oppPlayers?: OppPlayers[]; + score?: number; + pLv?:number; } export class Heroes { @@ -123,7 +125,8 @@ export default class PvpDefense extends BaseModel { challengeRefTime: number; // 上一次刷新的时间 @prop({ required: true, default: [] }) receivedBox: Array; - + @prop({ required: true, default: 0 }) + seasonNum: number; public static async findByRoleId(roleId: string, lean = true) { const result: PvpDefenseType = await PvpDefenseModel.findOne({ roleId }).lean(lean); return result; @@ -170,7 +173,7 @@ export default class PvpDefense extends BaseModel { return result; } - public static async findByRoleIdIncludeAll(roleId: string, lean = true) { + public static async findByRoleIdIncludeAll(roleId: string) { const result: PvpDefenseType = await PvpDefenseModel.findOne({ roleId }) .populate('role', 'headHid sHid topFiveCe roleId roleName') .populate('heroes.hero') @@ -201,6 +204,15 @@ export default class PvpDefense extends BaseModel { }).lean(); return result; } + public static async updateInfo(roleId: string, update: pvpUpdateInter, lean = true) { + let result: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({roleId}, {$set:update}, {new: true}).lean(lean); + return result; + } + + public static async getPvpDef(limitNum: number, lean = true) { + let result: Array = await PvpDefenseModel.find().sort({ score: -1 }).limit(limitNum).lean(lean); + return result; + } } export const PvpDefenseModel = getModelForClass(PvpDefense); diff --git a/shared/db/SystemConfig.ts b/shared/db/SystemConfig.ts index 66c0eb881..dc2cd33ff 100644 --- a/shared/db/SystemConfig.ts +++ b/shared/db/SystemConfig.ts @@ -15,6 +15,21 @@ export default class SystemConfig extends BaseModel { const result: SystemConfigType = await SystemConfigModel.findOne({ id: 1 }).lean(lean); return result; } + + public static async createSystemConfig(seasonEndTime: number, warId: number, lean = true) { + const result: SystemConfigType = await SystemConfigModel.findOneAndUpdate({ id: 1}, { seasonEndTime, warId }, { upsert: true, new: true }).lean(lean); + return result; + } + + public static async updateSystemConfig(update: { seasonEndTime?: number, warId?: number, seasonNum?:number }, lean = true) { + const result: SystemConfigType = await SystemConfigModel.findOneAndUpdate({ id: 1}, update, { upsert: true, new: true }).lean(lean); + return result; + } + + public static async updateSeason( seasonEndTime: number, lean = true) { + const result: SystemConfigType = await SystemConfigModel.findOneAndUpdate({ id: 1}, { $seasonEndTime: seasonEndTime, $inc: { seasonNum:1 } }, { upsert: true, new: true }).lean(lean); + return result; + } } export const SystemConfigModel = getModelForClass(SystemConfig); diff --git a/shared/pubUtils/data.ts b/shared/pubUtils/data.ts index aec10b867..3ed56b07b 100644 --- a/shared/pubUtils/data.ts +++ b/shared/pubUtils/data.ts @@ -39,7 +39,7 @@ 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' export const gameData = { blurprtCompose: dicBlueprtCompose, blueprtPossibility: dicBlueprtPossibility, @@ -91,7 +91,9 @@ export const gameData = { pvpOpponent: dicPvpOpponent, pvpTeamLevel: dicPvpTeamLevel, pvpWar: dicWarPvp, - pvpRefreshConsume: dicPvpRefreshConsume + pvpRefreshConsume: dicPvpRefreshConsume, + pvpGk: dicGkPvp, + pvpGks: dicGkPvps, }; // 在此提供一些原先在gamedata中提供的方法,以便更方便获取gameData数据 @@ -267,4 +269,13 @@ export function getPLvByScore(score: number) { if(score < topFiveMax) break; } return lv; +} + +export function getPvpGkByWarId (warId: number) { + return gameData.pvpGk.get(warId); +} + +export function getPvpGkWarIds() { + let warIds = gameData.pvpGks; + return warIds; } \ No newline at end of file diff --git a/shared/pubUtils/dicParam.ts b/shared/pubUtils/dicParam.ts index 9a05cede8..76b782f41 100644 --- a/shared/pubUtils/dicParam.ts +++ b/shared/pubUtils/dicParam.ts @@ -27,3 +27,10 @@ export const SCHOOL = { export const SCROLL = { SCROLL_ACTIVE_FAVOUR: 50, // 首次激活增加的好感度 }; +export const PVP = { + PVP_CHALLENGE_COUNTS: 10, // pvp初始挑战次数 + PVP_CHALLENGE_NORMALTIMES: 120, // pvp日常挑战次数刷新时间(分钟) + PVP_CHALLENGE_FINALTIMES: 60, // PVP赛季最后一天挑战次数刷新时间(分钟) + PVP_SEASON_DAYS: 30, // PVP一个赛季的时间 + PVP_OPPONENT_FREEREFRESH: 3, // pvp挑战对手每日免费刷新次数 +}; diff --git a/shared/pubUtils/dictionary/DicGkPvp.ts b/shared/pubUtils/dictionary/DicGkPvp.ts new file mode 100644 index 000000000..57fc352e9 --- /dev/null +++ b/shared/pubUtils/dictionary/DicGkPvp.ts @@ -0,0 +1,19 @@ +import { readJsonFile } from '../util' +import { FILENAME } from '../../consts' + +export interface DicGkPvp { + readonly war_id: number; + readonly dispatchJsonId: number; + readonly bg_img_id: number; + readonly warType: number; +} + +const str = readJsonFile(FILENAME.DIC_GK_PVP); +let arr = JSON.parse(str); + +export const dicGkPvp = new Map(); +export const dicGkPvps = new Array(); +arr.forEach(o => { + dicGkPvp.set(o.war_id, o); + dicGkPvps.push(o.war_id); +}); diff --git a/shared/pubUtils/timeUtil.ts b/shared/pubUtils/timeUtil.ts new file mode 100644 index 000000000..7e15c1309 --- /dev/null +++ b/shared/pubUtils/timeUtil.ts @@ -0,0 +1,15 @@ + +const PER_SECOND = 1 * 1000; +const PER_DAY = 24 * 60 * 60; +export function nowSeconds() { + return Math.floor(Date.now() / PER_SECOND ); +} + +export function getTodayZeroPoint() { + var date = new Date(); + date.setHours(0); + date.setMinutes(0); + date.setSeconds(0); + var time = Math.floor(date.getTime() / PER_SECOND); + return time; +} \ No newline at end of file diff --git a/shared/pubUtils/util.ts b/shared/pubUtils/util.ts index e2551616f..4d5033430 100644 --- a/shared/pubUtils/util.ts +++ b/shared/pubUtils/util.ts @@ -6,7 +6,6 @@ import fs = require('fs'); import path = require('path'); import { DicRandomEffectPool } from './dictionary/DicRandomEffectPool'; import { HERO_CE_RATIO, ABI_STAGE } from '../consts'; -import { PvpDefenseType } from '../db/PvpDefense'; const _ = require('underscore');