优化:初始角色时,不初始pvpdefense

This commit is contained in:
luying
2021-09-06 20:09:56 +08:00
parent 62fb04a2ee
commit d1e97590fb
5 changed files with 21 additions and 12 deletions

View File

@@ -2,7 +2,7 @@
import { Application, BackendSession, pinus, HandlerService, } from 'pinus';
import { uniq, findWhere, findIndex } from 'underscore';
import { gameData, getPvpBoxs, getPLvByScore } from '../../../pubUtils/data';
import { refreshEnemies, getEnemies, getLvByScore, defaultHeroes, comsumeChallengeCnt, refresh, findPvpDefByRoleId, getRefOppCnt, findPvpDefAllByRoleId, generPVPOppRecInfo, generMyRecInfo } from '../../../services/pvpService';
import { refreshEnemies, getEnemies, getLvByScore, defaultHeroes, comsumeChallengeCnt, refresh, findPvpDefByRoleId, getRefOppCnt, findPvpDefAllByRoleId, generPVPOppRecInfo, generMyRecInfo, initPvpInfo } from '../../../services/pvpService';
import { RoleModel, RoleType } from '../../../db/Role';
import { STATUS } from '../../../consts/statusCode';
import { resResult, genCode, checkRoleIsRobot, robotIdComBack } from '../../../pubUtils/util';
@@ -105,6 +105,10 @@ export class PvpHandler {
async getData(msg: {}, session: BackendSession) {
let roleId = session.get('roleId');
let { pvpDefense, warId, seasonEndTime } = await findPvpDefAllByRoleId(roleId);
if(!pvpDefense) {
let role = await RoleModel.findByRoleId(roleId);
pvpDefense = await initPvpInfo(role);
}
let oppPlayers = await getEnemies(pvpDefense.oppPlayers, pvpDefense.winStreakNum);
let { isDefaultHero, heroes, score, pLv, winStreakNum, refOppCnt, challengeCnt, challengeRefTime, receivedBox, hisScore, heroScores, isFirstEntry, seasonNum } = pvpDefense;
if (isFirstEntry) {

View File

@@ -19,7 +19,6 @@ import { updateUserInfo } from '../../../services/redisService';
import { checkTaskWithHero, checkTask, checkTaskWithArgs, checkActivityTask } from '../../../services/taskService';
import { getGoldObject, getCoinObject } from '../../../pubUtils/itemUtils';
import { RScriptRecordModel } from '../../../db/RScriptRecord';
import { checkPvp } from '../../../services/pvpService';
import { SkinModel, SkinUpdate } from '../../../db/Skin';
import { CreateHeroes } from '../../../pubUtils/roleUtil';
import { Figure } from '../../../domain/dbGeneral';
@@ -73,8 +72,6 @@ export class RoleHandler {
let warInfo = gameData.war.get(battleId);
await RScriptRecordModel.setScript(roleId, battleId, warInfo.warType, 2, SCRIPT.SCRIPT_NAME);
await checkPvp(role);
console.log('******** initRole end', Date.now());
return resResult(STATUS.SUCCESS, {
roleId, roleName, heroes

View File

@@ -1,5 +1,5 @@
import { checkPvp, findPvpDefByRoleId } from '../services/pvpService'
import { findPvpDefByRoleId } from '../services/pvpService'
import { getFuncsSwitch, gameData } from '../pubUtils/data';
import { FUNCS_ID, FUNC_OPT_TYPE } from '../consts/constModules/sysConst';
import { RoleModel } from '../db/Role';
@@ -19,10 +19,6 @@ export async function eventOnPlayerLvUp(roleId: string, lv: number, addFuncs: Ar
if (dicFunSwitch && lv >= dicFunSwitch.param) {
addFuncs.push(id);
if(id == FUNCS_ID.PVP) {
let role = await RoleModel.findByRoleId(roleId, null, true);
await checkPvp(role);
}
}
}

View File

@@ -46,7 +46,7 @@ export async function initPvpInfo(role: RoleType) {
let oppPlayers: Array<OppPlayers> = await refreshEnemies(role, 0, 1);
let { seasonNum } = await PVPConfigModel.findCurPVPConfig();
let challengeCnt = PVP.PVP_CHALLENGE_COUNTS;
let result = await PvpDefenseModel.createPvpDefense({ roleId: role.roleId, roleName: role.roleName, role: role._id, heroes, oppPlayers, defCe, seasonNum, challengeCnt });
let result = await PvpDefenseModel.createPvpDefenseAndPopulate({ roleId: role.roleId, roleName: role.roleName, role: role._id, heroes, oppPlayers, defCe, seasonNum, challengeCnt });
//加入排行榜
let r = new Rank(REDIS_KEY.PVP_RANK, {});
@@ -428,6 +428,7 @@ export function comsumeChallengeCnt(challengeCnt: number, challengeRefTime: numb
export async function findPvpDefByRoleId(roleId: string) {
let pvpDefense = await PvpDefenseModel.findByRoleIdIncludeAll(roleId);
let { warId, seasonNum, seasonEndTime } = await PVPConfigModel.findCurPVPConfig();
if(!pvpDefense) return { pvpDefense, warId }
let oldSeasonNum = await CounterModel.getCounter(COUNTER.PVP_SEASON_NUM);
let { seasonEndTime: oldSeasonEndTime } = await PVPConfigModel.findPVPConfig(oldSeasonNum);
if (pvpDefense.seasonNum !== seasonNum && oldSeasonEndTime < nowSeconds()) {
@@ -467,6 +468,7 @@ export function getRefOppCnt(refOppCnt: number, refOppTime: Date) {
export async function findPvpDefAllByRoleId(roleId: string) {
let pvpDefense = await PvpDefenseModel.findByRoleIdIncludeAll(roleId);
let { warId, seasonNum, seasonEndTime } = await PVPConfigModel.findCurPVPConfig();
if(!pvpDefense) return { pvpDefense, warId }
let oldSeasonNum = await CounterModel.getCounter(COUNTER.PVP_SEASON_NUM);
let { seasonEndTime: oldSeasonEndTime } = await PVPConfigModel.findPVPConfig(oldSeasonNum);

View File

@@ -113,10 +113,20 @@ export default class PvpDefense extends BaseModel {
return result;
}
public static async createPvpDefense(params: { roleId: string, roleName: string, role: string, heroes: Array<Heroes>, oppPlayers: Array<OppPlayers>, defCe: number, seasonNum: number,challengeCnt: number }, lean = true) {
public static async createPvpDefense(params: pvpUpdateInter) {
const doc = new PvpDefenseModel();
const update = Object.assign(doc.toJSON(), params);
const defense: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({ roleId: params.roleId }, update, { upsert: true, new: true }).lean(lean);
const defense: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({ roleId: params.roleId }, update, { upsert: true, new: true }).lean();
return defense;
}
public static async createPvpDefenseAndPopulate(params: pvpUpdateInter) {
const doc = new PvpDefenseModel();
const update = Object.assign(doc.toJSON(), params);
const defense: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({ roleId: params.roleId }, update, { upsert: true, new: true })
.populate('oppPlayers.oppDef', 'oppRoleId pos roleName head frame spine rankLv pLv title lv defCe heroes')
.lean();
return defense;
}