pvp保存阵容
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
import {Application, BackendSession} from 'pinus';
|
import {Application, BackendSession} from 'pinus';
|
||||||
const _ = require('underscore');
|
const _ = require('underscore');
|
||||||
import { gameData } from '../../../pubUtils/data';
|
import { gameData } from '../../../pubUtils/data';
|
||||||
import { checkPvp, initPvpInfo, refreshEnemies, getEnemies, getPlusScore, getLvByScore, } from '../../../services/pvpService';
|
import { checkPvp, initPvpInfo, refreshEnemies, getEnemies, getPlusScore, getLvByScore, defaultHeroes} from '../../../services/pvpService';
|
||||||
import { RoleModel, RoleType } from '../../../db/Role';
|
import { RoleModel, RoleType } from '../../../db/Role';
|
||||||
import { STATUS } from '../../../consts/statusCode';
|
import { STATUS } from '../../../consts/statusCode';
|
||||||
import { resResult, reduceCe, genCode } from '../../../pubUtils/util';
|
import { resResult, reduceCe, genCode } from '../../../pubUtils/util';
|
||||||
@@ -9,10 +9,12 @@ import { SystemConfigModel } from '../../../db/SystemConfig'
|
|||||||
|
|
||||||
import { PvpDefenseModel, PvpDefenseType, OppPlayers } from '../../../db/PvpDefense';
|
import { PvpDefenseModel, PvpDefenseType, OppPlayers } from '../../../db/PvpDefense';
|
||||||
import { oppHeroesDefenseInter, pvpEndParamInter } from '../../../pubUtils/interface';
|
import { oppHeroesDefenseInter, pvpEndParamInter } from '../../../pubUtils/interface';
|
||||||
import { HeroType } from '../../../db/Hero';
|
|
||||||
import { CeAttrNumber } from '../../../db/generalField';
|
import { CeAttrNumber } from '../../../db/generalField';
|
||||||
import { checkBattleHeroesByHid } from '../../../services/normalBattleService';
|
import { checkBattleHeroesByHid } from '../../../services/normalBattleService';
|
||||||
import { BattleRecordModel } from '../../../db/BattleRecord';
|
import { BattleRecordModel } from '../../../db/BattleRecord';
|
||||||
|
import { HeroModel, HeroType } from '../../../db/Hero';
|
||||||
|
import { PVP_HERO_POS, ROBOT_NAME } from '../../../consts';
|
||||||
|
|
||||||
export default function(app: Application) {
|
export default function(app: Application) {
|
||||||
return new PvpHandler(app);
|
return new PvpHandler(app);
|
||||||
}
|
}
|
||||||
@@ -242,4 +244,50 @@ export class PvpHandler {
|
|||||||
oppPlayers: result
|
oppPlayers: result
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async saveDefense(msg: { heroes: Array<{actorId: number, dataId: number, order: number}>, isDefaultHero:boolean }, session: BackendSession) {
|
||||||
|
let {heroes, isDefaultHero} = msg;
|
||||||
|
let roleId = session.get('roleId');
|
||||||
|
if (heroes.length > 5) {
|
||||||
|
return resResult(STATUS.WRONG_PARMS);
|
||||||
|
}
|
||||||
|
heroes = _.uniq(heroes, function(item) {
|
||||||
|
return item.order;
|
||||||
|
});
|
||||||
|
let { heroes: defHeros } = await PvpDefenseModel.findByRoleId(roleId);
|
||||||
|
let defCe = 0;
|
||||||
|
if (!!isDefaultHero) {
|
||||||
|
let role = await RoleModel.findByRoleId(roleId);
|
||||||
|
let { resHeroes } = await defaultHeroes(role);
|
||||||
|
return resResult(STATUS.SUCCESS, { data: { heroes: resHeroes } });
|
||||||
|
} else {
|
||||||
|
for (let dataId = PVP_HERO_POS.START; dataId <= PVP_HERO_POS.END; dataId++) {
|
||||||
|
let index = _.findIndex(heroes, {dataId});
|
||||||
|
let defIndex = _.findIndex(defHeros, {dataId});
|
||||||
|
if (defIndex == -1) {
|
||||||
|
defIndex = defHeros.length;
|
||||||
|
defHeros.push({actorId:0, order:0,ce:0, hero:null,dataId});
|
||||||
|
}
|
||||||
|
if (index == -1) {
|
||||||
|
defHeros[defIndex].actorId = 0;
|
||||||
|
defHeros[defIndex].order = 0;
|
||||||
|
defHeros[defIndex].ce = 0;
|
||||||
|
defHeros[defIndex].hero = null;
|
||||||
|
defHeros[defIndex].dataId = dataId;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let hero = await HeroModel.findByHidAndRole(heroes[index].actorId, roleId);
|
||||||
|
if (!hero) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
defHeros[defIndex].actorId = heroes[index].actorId;
|
||||||
|
defHeros[defIndex].order = heroes[index].order;
|
||||||
|
defHeros[defIndex].ce = hero.ce;
|
||||||
|
defHeros[defIndex].hero = hero._id;
|
||||||
|
defCe += hero.ce;
|
||||||
|
}
|
||||||
|
let { heroes: resHeroes } = await PvpDefenseModel.updateInfo(roleId, {defCe, heroes: defHeros});
|
||||||
|
return resResult(STATUS.SUCCESS, { data: { heroes: resHeroes } });
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import { resResult, reduceCe } from '../pubUtils/util';
|
|||||||
import { calPlayerCeAndSave as pubCalPlayerCeAndSave, reCalAllHeroCe } from '../pubUtils/playerCe';
|
import { calPlayerCeAndSave as pubCalPlayerCeAndSave, reCalAllHeroCe } from '../pubUtils/playerCe';
|
||||||
import { HeroType } from '../db/Hero';
|
import { HeroType } from '../db/Hero';
|
||||||
const _ = require('underscore');
|
const _ = require('underscore');
|
||||||
|
import { defaultHeroes } from './pvpService';
|
||||||
|
|
||||||
//修改并下发战力
|
//修改并下发战力
|
||||||
export async function calPlayerCeAndSave(sid: string, roleId: string, heros: Array<HeroType>, type?: number, args?: Array<number>) {
|
export async function calPlayerCeAndSave(sid: string, roleId: string, heros: Array<HeroType>, type?: number, args?: Array<number>) {
|
||||||
@@ -17,6 +17,7 @@ export async function calPlayerCeAndSave(sid: string, roleId: string, heros: Arr
|
|||||||
//下发战力
|
//下发战力
|
||||||
let uids = [{ uid: roleId, sid }];
|
let uids = [{ uid: roleId, sid }];
|
||||||
pinus.app.get('channelService').pushMessageByUids('onPlayerCeUpdate', resResult(STATUS.SUCCESS, { ce: reduceCe(role.ce) , heros: pushHeros, topFiveCe: reduceCe(topFiveCe) }), uids);
|
pinus.app.get('channelService').pushMessageByUids('onPlayerCeUpdate', resResult(STATUS.SUCCESS, { ce: reduceCe(role.ce) , heros: pushHeros, topFiveCe: reduceCe(topFiveCe) }), uids);
|
||||||
|
defaultHeroes(role);
|
||||||
return heros;
|
return heros;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,21 +10,22 @@ import { getRandomIndexByLen, genCode, getRandomByLen } from '../pubUtils/util';
|
|||||||
import { oppPlayersInter } from '../pubUtils/interface';
|
import { oppPlayersInter } from '../pubUtils/interface';
|
||||||
import { gameData, getPLvByScore } from "../pubUtils/data";
|
import { gameData, getPLvByScore } from "../pubUtils/data";
|
||||||
import { PVP } from '../pubUtils/dicParam';
|
import { PVP } from '../pubUtils/dicParam';
|
||||||
|
const _ = require('underscore');
|
||||||
|
|
||||||
|
|
||||||
export async function initPvpInfo(role: RoleType) {
|
export async function initPvpInfo(role: RoleType) {
|
||||||
let heroes: Array<Heroes> = [];
|
let heroes: Array<Heroes> = [];
|
||||||
//初始化最强5人阵容
|
//初始化最强5人阵容
|
||||||
for (let i = 0; i < role.topFive.length; i++) {
|
for (let i = PVP_HERO_POS.START; i <= PVP_HERO_POS.END; i++) {
|
||||||
let item = role.topFive[i];
|
let index = i - PVP_HERO_POS.START;
|
||||||
if (item.hid) {
|
let item = role.topFive[index];
|
||||||
heroes.push({
|
heroes.push({
|
||||||
actorId: item.hid,
|
actorId: item?.hid||0,
|
||||||
hero: item.hero,
|
hero: item?.hero||null,
|
||||||
ce: item.ce,
|
ce: item?.ce||0,
|
||||||
dataId: PVP_HERO_POS.START + i,
|
dataId: i,
|
||||||
order: i + 1,
|
order: index + 1,
|
||||||
});
|
});
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//初始化对手人阵容
|
//初始化对手人阵容
|
||||||
let oppPlayers: Array<OppPlayers> = await refreshEnemies(role, 0, 1);
|
let oppPlayers: Array<OppPlayers> = await refreshEnemies(role, 0, 1);
|
||||||
@@ -170,4 +171,37 @@ export function getLvByScore(heroScores: HeroScores[]) {
|
|||||||
score += heroScores[i].score;
|
score += heroScores[i].score;
|
||||||
}
|
}
|
||||||
return getPLvByScore(score);
|
return getPLvByScore(score);
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function defaultHeroes ( role:RoleType) {
|
||||||
|
let { heroes } = await PvpDefenseModel.findByRoleId(role.roleId);
|
||||||
|
heroes.sort(function(a, b) {
|
||||||
|
return a.ce + a.dataId - b.ce + b.dataId;
|
||||||
|
});
|
||||||
|
role.topFive.sort(function(a, b) {
|
||||||
|
return a.ce - b.ce;
|
||||||
|
});
|
||||||
|
let defCe = 0;
|
||||||
|
for (let i = 1; i < role.topFive.length; i++) {
|
||||||
|
let item = role.topFive[i];
|
||||||
|
if (!_.findWhere(heroes, {actorId: item.hid})) {
|
||||||
|
for (let j = 0; j < heroes.length; j++) {
|
||||||
|
let hero = heroes[j];
|
||||||
|
if (heroes.length >= 5 && !hero.actorId) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let index = _.findIndex(role.topFive,{hid: hero.actorId});
|
||||||
|
if (index == -1) {
|
||||||
|
hero.actorId = item.hid;
|
||||||
|
hero.hero = item.hero||'';
|
||||||
|
hero.ce = item.ce||0;
|
||||||
|
} else {
|
||||||
|
heroes[index].ce = item.ce||0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
defCe += item.ce;
|
||||||
|
}
|
||||||
|
let { heroes: resHeroes} = await PvpDefenseModel.updateInfo(role.roleId, {defCe, heroes});
|
||||||
|
return { resHeroes};
|
||||||
}
|
}
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
* 体力系统
|
* 体力系统
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { scheduleJob } from 'pinus-scheduler';
|
import { scheduleJob } from 'node-schedule';
|
||||||
import { SystemConfigModel } from '../db/SystemConfig';
|
import { SystemConfigModel } from '../db/SystemConfig';
|
||||||
import PvpDefenseType,{ PvpDefenseModel } from '../db/PvpDefense';
|
import PvpDefenseType,{ PvpDefenseModel } from '../db/PvpDefense';
|
||||||
import { PVP } from '../pubUtils/dicParam';
|
import { PVP } from '../pubUtils/dicParam';
|
||||||
@@ -21,23 +21,23 @@ export async function init() {
|
|||||||
let warIds = getPvpGkWarIds();
|
let warIds = getPvpGkWarIds();
|
||||||
let warId = warIds[0];//TODO随机地图
|
let warId = warIds[0];//TODO随机地图
|
||||||
seasonEndTime = PVP.PVP_SEASON_DAYS * PER_DAY + getTodayZeroPoint();
|
seasonEndTime = PVP.PVP_SEASON_DAYS * PER_DAY + getTodayZeroPoint();
|
||||||
await SystemConfigModel.createSystemConfig( seasonEndTime, warId );
|
systemConfig = await SystemConfigModel.createSystemConfig( seasonEndTime, warId );
|
||||||
} else {
|
} else {
|
||||||
seasonEndTime = systemConfig.seasonEndTime;
|
seasonEndTime = systemConfig.seasonEndTime;
|
||||||
if (systemConfig.seasonEndTime - SETTLE_DIFF <= nowSeconds()) {
|
if (systemConfig.seasonEndTime - SETTLE_DIFF <= nowSeconds()) {
|
||||||
await setPvpSeasonResult();
|
await setPvpSeasonResult({name: 'simpleJobExample' + systemConfig.seasonNum});
|
||||||
seasonEndTime = PVP.PVP_SEASON_DAYS * PER_DAY + getTodayZeroPoint();
|
seasonEndTime = PVP.PVP_SEASON_DAYS * PER_DAY + getTodayZeroPoint();
|
||||||
systemConfig.seasonNum++;
|
systemConfig.seasonNum++;
|
||||||
await SystemConfigModel.updateSystemConfig({ seasonEndTime, seasonNum: systemConfig.seasonNum});
|
await SystemConfigModel.updateSystemConfig({ seasonEndTime, seasonNum: systemConfig.seasonNum});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let settleTime = seasonEndTime - SETTLE_DIFF - nowSeconds();
|
let settleTime = (seasonEndTime - SETTLE_DIFF)* PER_SECOND;
|
||||||
// setTimeout(setPvpSeasonResult, settleTime * PER_SECOND);
|
scheduleJob(settleTime, setPvpSeasonResult)
|
||||||
scheduleJob("0 0 0 * * 1", resetPvpWarId)
|
scheduleJob("0 0 0 * * 1", resetPvpWarId)
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function setPvpSeasonResult() {
|
export async function setPvpSeasonResult(obj:{ name:string }) {
|
||||||
console.log('setPvpSeasonResult');
|
console.log('exce setPvpSeasonResult'+ obj.name);
|
||||||
let pvpDefenses = await PvpDefenseModel.getPvpDef(LIMIT_NUM);
|
let pvpDefenses = await PvpDefenseModel.getPvpDef(LIMIT_NUM);
|
||||||
for (let pvpDefense of pvpDefenses) {
|
for (let pvpDefense of pvpDefenses) {
|
||||||
await setPvpDefResult(pvpDefense);
|
await setPvpDefResult(pvpDefense);
|
||||||
@@ -47,7 +47,6 @@ export async function setPvpSeasonResult() {
|
|||||||
|
|
||||||
async function setPvpDefResult(pvpDefense: PvpDefenseType) {
|
async function setPvpDefResult(pvpDefense: PvpDefenseType) {
|
||||||
await PvpDefenseModel.updateInfo(pvpDefense.roleId, {score:100, pLv: 1});
|
await PvpDefenseModel.updateInfo(pvpDefense.roleId, {score:100, pLv: 1});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function resetPvpWarId() {
|
export async function resetPvpWarId() {
|
||||||
@@ -65,7 +64,7 @@ export async function resetPvpWarId() {
|
|||||||
|
|
||||||
async function setNextPvpTime() {
|
async function setNextPvpTime() {
|
||||||
let seasonEndTime = PVP.PVP_SEASON_DAYS * PER_DAY + getTodayZeroPoint();
|
let seasonEndTime = PVP.PVP_SEASON_DAYS * PER_DAY + getTodayZeroPoint();
|
||||||
await SystemConfigModel.updateSeason(seasonEndTime);
|
let systemConfig = await SystemConfigModel.updateSeason(seasonEndTime);
|
||||||
let settleTime = seasonEndTime - SETTLE_DIFF - nowSeconds();
|
let settleTime = (seasonEndTime - SETTLE_DIFF)* PER_SECOND;
|
||||||
setTimeout(setPvpSeasonResult, settleTime * PER_SECOND);
|
scheduleJob(settleTime, setPvpSeasonResult);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ interface pvpUpdateInter {
|
|||||||
pLv?:number;
|
pLv?:number;
|
||||||
heroScores?: HeroScores[];
|
heroScores?: HeroScores[];
|
||||||
winStreakNum?: number;
|
winStreakNum?: number;
|
||||||
|
defCe?:number;
|
||||||
|
heroes?: Array<Heroes>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class Heroes {
|
export class Heroes {
|
||||||
@@ -167,7 +169,7 @@ export default class PvpDefense extends BaseModel {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async updateCe(roleId: string, hid: number, defCe: number, lean = true) {
|
public static async updateCe(roleId: string, hid: number, defCe: number, lean = true) {
|
||||||
const rec: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({ roleId, 'heroes.actorId': hid }, { $set: { defCe } }).lean(lean);
|
const rec: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({ roleId, 'heroes.actorId': hid }, { $set: { defCe } }).lean(lean);
|
||||||
return rec
|
return rec
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ export default class SystemConfig extends BaseModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static async createSystemConfig(seasonEndTime: number, warId: number, lean = true) {
|
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);
|
const result: SystemConfigType = await SystemConfigModel.findOneAndUpdate({ id: 1}, { seasonEndTime, warId, seasonNum: 1 }, { upsert: true, new: true }).lean(lean);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -27,7 +27,7 @@ export default class SystemConfig extends BaseModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static async updateSeason( seasonEndTime: number, lean = true) {
|
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);
|
const result: SystemConfigType = await SystemConfigModel.findOneAndUpdate({ id: 1}, { seasonEndTime, $inc: { seasonNum: 1 } }, { upsert: true, new: true }).lean(lean);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import { DicRandomEffectPool } from './dictionary/DicRandomEffectPool';
|
|||||||
import { getGoodById } from './gamedata';
|
import { getGoodById } from './gamedata';
|
||||||
import { SchoolModel } from '../db/School';
|
import { SchoolModel } from '../db/School';
|
||||||
import { getTeraphAttr, HEROTARIN } from '../consts/constModules/abilityConst'
|
import { getTeraphAttr, HEROTARIN } from '../consts/constModules/abilityConst'
|
||||||
import { PvpDefenseModel } from '../db/PvpDefense';
|
// import { PvpDefenseModel } from '../db/PvpDefense';
|
||||||
const HERO_CE_RATIO = 100;
|
const HERO_CE_RATIO = 100;
|
||||||
const _ = require('underscore');
|
const _ = require('underscore');
|
||||||
//战力计算TODO
|
//战力计算TODO
|
||||||
@@ -108,7 +108,7 @@ export async function calPlayerCeAndSave(roleId: string, heros: Array<HeroType>,
|
|||||||
incPlayerCe += incHeroCe;
|
incPlayerCe += incHeroCe;
|
||||||
await calculateTopFive(role, hero.hid, hero.ce, hero._id); // 计算更新最强五人战力
|
await calculateTopFive(role, hero.hid, hero.ce, hero._id); // 计算更新最强五人战力
|
||||||
await HeroModel.updateHeroInfo(roleId, hero.hid, hero);
|
await HeroModel.updateHeroInfo(roleId, hero.hid, hero);
|
||||||
await PvpDefenseModel.updateCe(roleId, hero.hid, hero.ce); // 更新pvp防守阵最强五人战力
|
//await PvpDefenseModel.updateCe(roleId, hero.hid, hero.ce); // 更新pvp防守阵最强五人战力
|
||||||
pushHeros.push({
|
pushHeros.push({
|
||||||
hid: hero.hid,
|
hid: hero.hid,
|
||||||
ce: reduceCe(hero.ce),
|
ce: reduceCe(hero.ce),
|
||||||
@@ -152,7 +152,6 @@ async function calculateTopFive(role: RoleType, hid: number, ce: number, heroId:
|
|||||||
|
|
||||||
role.topFive = topFive;
|
role.topFive = topFive;
|
||||||
role.topFiveCe = topFiveCe;
|
role.topFiveCe = topFiveCe;
|
||||||
|
|
||||||
return role;
|
return role;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -496,7 +496,7 @@ export function reduceCe(ce: number = 0) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function getRandNum(min, max) {
|
export function getRandNum(min, max) {
|
||||||
let randNum = min + Math.floor(Math.random()*(max - min + 1));
|
let randNum = min + Math.floor(Math.random() * (max - min + 1));
|
||||||
return randNum;
|
return randNum;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -516,10 +516,10 @@ export function getRandomArr(allarr, ranNum) {
|
|||||||
|
|
||||||
|
|
||||||
// 获取全部属性
|
// 获取全部属性
|
||||||
export function getAllAttrStage () {
|
export function getAllAttrStage() {
|
||||||
let attrs = new Array<number>(); // 有升级的属性 1-hp 2-atk 3-def 4-mdef 5-agi 6-luk
|
let attrs = new Array<number>(); // 有升级的属性 1-hp 2-atk 3-def 4-mdef 5-agi 6-luk
|
||||||
for(let stage = ABI_STAGE.START + 1; stage <= ABI_STAGE.END; stage++) {
|
for (let stage = ABI_STAGE.START + 1; stage <= ABI_STAGE.END; stage++) {
|
||||||
attrs.push(stage)
|
attrs.push(stage)
|
||||||
};
|
};
|
||||||
return attrs;
|
return attrs;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user