Merge branch 'master' of gitlab.trgame.cn:zyztech/zyz_server
This commit is contained in:
@@ -389,11 +389,17 @@ export class PvpHandler {
|
|||||||
return resResult(STATUS.PVP_ROLE_NOT_FOUND);
|
return resResult(STATUS.PVP_ROLE_NOT_FOUND);
|
||||||
}
|
}
|
||||||
|
|
||||||
let heroes = pvpHistoryOpp.heroes.map(hero => {
|
let heroes = new Array<PlayerDetailHero>();
|
||||||
|
for(let hero of pvpHistoryOpp.heroes) {
|
||||||
let newHero = new PlayerDetailHero();
|
let newHero = new PlayerDetailHero();
|
||||||
newHero.setPvpHeroInfo(hero);
|
newHero.setPvpHeroInfo(hero);
|
||||||
return newHero;
|
heroes.push(newHero);
|
||||||
})
|
}
|
||||||
|
for(let hero of pvpHistoryOpp.otherHeroes) {
|
||||||
|
let newHero = new PlayerDetailHero();
|
||||||
|
newHero.setPvpHeroInfo(hero);
|
||||||
|
heroes.push(newHero);
|
||||||
|
}
|
||||||
result = new PlayerDetail({...pvpHistoryOpp, roleId: pvpHistoryOpp.oppRoleId, heroes, rank: pvpHistoryOpp.rankLv});
|
result = new PlayerDetail({...pvpHistoryOpp, roleId: pvpHistoryOpp.oppRoleId, heroes, rank: pvpHistoryOpp.rankLv});
|
||||||
} else { // 查询对方pvpDefense
|
} else { // 查询对方pvpDefense
|
||||||
let pvpDefense = await PvpDefenseModel.findByRoleId(oppoRoleId);
|
let pvpDefense = await PvpDefenseModel.findByRoleId(oppoRoleId);
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import { setRank, getMyRank, getFieldByRank } from './redisService';
|
|||||||
import { nowSeconds, checkTodayTime } from '../pubUtils/timeUtil';
|
import { nowSeconds, checkTodayTime } from '../pubUtils/timeUtil';
|
||||||
import { HeroesRecord } from '../db/PvpRecord';
|
import { HeroesRecord } from '../db/PvpRecord';
|
||||||
import { HeroModel, HeroType } from '../db/Hero';
|
import { HeroModel, HeroType } from '../db/Hero';
|
||||||
import { CeAttrNumber, CeAttr, CeAttrRole, PvpEnemies, PvpHeroInfo } from '../db/generalField';
|
import { CeAttrNumber, CeAttr, CeAttrRole, PvpEnemies, PvpHeroInfo, PvpOtherHeroes } from '../db/generalField';
|
||||||
import { DicWarJson } from '../pubUtils/dictionary/DicWarJson';
|
import { DicWarJson } from '../pubUtils/dictionary/DicWarJson';
|
||||||
import { findWhere, findIndex } from 'underscore';
|
import { findWhere, findIndex } from 'underscore';
|
||||||
import { pinus } from 'pinus';
|
import { pinus } from 'pinus';
|
||||||
@@ -195,28 +195,38 @@ async function matchPlayer(oppPlayers: OppPlayers[], mapWarJson: DicWarJson[], r
|
|||||||
* @param roleId 自己的玩家id
|
* @param roleId 自己的玩家id
|
||||||
* @param pos 刷新这个对手的位置
|
* @param pos 刷新这个对手的位置
|
||||||
*/
|
*/
|
||||||
async function generPlayerOppHis(result: PvpDefenseType, mapWarJson: DicWarJson[], roleId: string, pos: number) {
|
async function generPlayerOppHis(pvpdefense: PvpDefenseType, mapWarJson: DicWarJson[], roleId: string, pos: number) {
|
||||||
let heroScores = result.heroScores;
|
let { heroScores, heroes: defenseHeroes } = pvpdefense;
|
||||||
let role = <RoleType>result.role;
|
let role = <RoleType>pvpdefense.role;
|
||||||
let rankLv = await getMyRank(REDIS_KEY.PVP_RANK, 0, role.roleId);
|
let rankLv = await getMyRank(REDIS_KEY.PVP_RANK, 0, role.roleId);
|
||||||
|
let dbHeroes = await HeroModel.findByRole(role.roleId, [{field: 'ce', sortBy: -1}]);
|
||||||
let heroes = new Array<PvpEnemies>();
|
let heroes = new Array<PvpEnemies>();
|
||||||
for(let warJson of mapWarJson) {
|
let otherHeroes = new Array<PvpOtherHeroes>(); // 阵容外的所有武将信息
|
||||||
if(warJson.relation == 1) continue;
|
for(let dbHero of dbHeroes) {
|
||||||
let h = result.heroes.find(cur => cur.dataId == warJson.dataId);
|
let h = defenseHeroes.find(cur => cur.actorId == dbHero.hid); // 阵容里是否有这个武将
|
||||||
if(h && h.hero) {
|
let hs = heroScores.find(cur => cur.hid == dbHero.hid); // 这个武将是否有这个得分
|
||||||
let hs = heroScores.find(cur => cur.hid == h.actorId); // 这个武将的军功
|
if(!!h) {
|
||||||
let hero = <HeroType>h.hero;
|
let warJson = mapWarJson.find(cur => cur.dataId == h.dataId);
|
||||||
let heroInfo = new PvpHeroInfo();
|
if(warJson && warJson.relation == 2) {
|
||||||
heroInfo.setHeroInfo(hero);
|
let heroInfo = new PvpHeroInfo();
|
||||||
heroInfo.setOutIndex(h.order);
|
heroInfo.setHeroInfo(dbHero);
|
||||||
let attribute = getPlayerAttribute(hero.ceAttr, role.globalCeAttr);
|
heroInfo.setOutIndex(h.order);
|
||||||
heroInfo.setAttribute(attribute);
|
let attribute = getPlayerAttribute(dbHero.ceAttr, role.globalCeAttr);
|
||||||
let enemy = new PvpEnemies(warJson, heroInfo, hs?hs.score: 0);
|
heroInfo.setAttribute(attribute);
|
||||||
heroes.push(enemy);
|
let enemy = new PvpEnemies(warJson, heroInfo, hs?hs.score: 0);
|
||||||
|
heroes.push(enemy);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let heroInfo = new PvpOtherHeroes(hs?hs.score: 0);
|
||||||
|
heroInfo.setHeroInfo(dbHero);
|
||||||
|
otherHeroes.push(heroInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
heroes.sort((a, b) => b.score - a.score);
|
||||||
|
otherHeroes.sort((a, b) => b.score - a.score);
|
||||||
|
|
||||||
let pvpHistoryOpp = await PvpHistoryOppModel.createPvpOpp({
|
let pvpHistoryOpp = await PvpHistoryOppModel.createPvpOpp({
|
||||||
...result, ...role, pos, rankLv, heroes, roleId, oppRoleId: makeRobotId(result.roleId)
|
...pvpdefense, ...role, pos, rankLv, heroes, otherHeroes, roleId, oppRoleId: makeRobotId(pvpdefense.roleId)
|
||||||
});
|
});
|
||||||
return pvpHistoryOpp;
|
return pvpHistoryOpp;
|
||||||
}
|
}
|
||||||
@@ -248,9 +258,6 @@ async function matchRobot(oppPlayers: OppPlayers[], mapWarJson: DicWarJson[], ro
|
|||||||
heroInfo.setAttribute(attribute);
|
heroInfo.setAttribute(attribute);
|
||||||
let enemy = new PvpEnemies(warJson, heroInfo, 0);
|
let enemy = new PvpEnemies(warJson, heroInfo, 0);
|
||||||
heroes.push(enemy);
|
heroes.push(enemy);
|
||||||
} else {
|
|
||||||
let enemy = new PvpEnemies(warJson, new PvpHeroInfo(), 0);
|
|
||||||
heroes.push(enemy);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -144,8 +144,12 @@ export default class Hero extends BaseModel {
|
|||||||
@prop({ required: true, type: EPlace, default: getInitialEplace(), _id: false })
|
@prop({ required: true, type: EPlace, default: getInitialEplace(), _id: false })
|
||||||
ePlace: EPlace[]; // 武将装备引用数组
|
ePlace: EPlace[]; // 武将装备引用数组
|
||||||
|
|
||||||
public static async findByRole(roleId: string, lean = true) {
|
public static async findByRole(roleId: string, sort: { field: string, sortBy: number }[] = []) {
|
||||||
const heros: HeroType[] = await HeroModel.find({ roleId }).lean(lean);
|
let sortParam = {};
|
||||||
|
for(let {field, sortBy} of sort) {
|
||||||
|
sortParam[field] = sortBy;
|
||||||
|
}
|
||||||
|
const heros: HeroType[] = await HeroModel.find({ roleId }).sort(sortParam).lean();
|
||||||
return heros;
|
return heros;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import BaseModel from './BaseModel';
|
import BaseModel from './BaseModel';
|
||||||
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
||||||
|
|
||||||
import { PvpEnemies } from './generalField';
|
import { PvpEnemies, PvpHeroInfo, PvpOtherHeroes } from './generalField';
|
||||||
|
|
||||||
export class HeroScores {
|
export class HeroScores {
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
@@ -38,6 +38,8 @@ export default class PvpHistoryOpp extends BaseModel {
|
|||||||
rankLv: number; // 对手排名
|
rankLv: number; // 对手排名
|
||||||
@prop({ required: true, type: PvpEnemies, default: [] })
|
@prop({ required: true, type: PvpEnemies, default: [] })
|
||||||
heroes: PvpEnemies[]; // 对手阵容
|
heroes: PvpEnemies[]; // 对手阵容
|
||||||
|
@prop({ required: true, type: PvpOtherHeroes, default: [] })
|
||||||
|
otherHeroes: PvpOtherHeroes[]; // 阵容以外所有武将信息
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
status: number; // 状态 0-仅刷出 1-挑战过
|
status: number; // 状态 0-仅刷出 1-挑战过
|
||||||
|
|
||||||
|
|||||||
@@ -145,7 +145,7 @@ export class PvpHeroInfo {
|
|||||||
@prop({ required: false })
|
@prop({ required: false })
|
||||||
quality?: number = 0; // 品质
|
quality?: number = 0; // 品质
|
||||||
|
|
||||||
@prop({ required: true, _id: false, default: new CeAttrNumber() })
|
@prop({ required: true, _id: false })
|
||||||
attribute?: CeAttrNumber; // 属性
|
attribute?: CeAttrNumber; // 属性
|
||||||
|
|
||||||
setHeroInfo(hero: HeroType) {
|
setHeroInfo(hero: HeroType) {
|
||||||
@@ -244,3 +244,15 @@ export class PvpEnemies extends Enemies {
|
|||||||
this.score = score;
|
this.score = score;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 未显示在阵容中的其他武将
|
||||||
|
export class PvpOtherHeroes extends PvpHeroInfo {
|
||||||
|
@prop({ required: true })
|
||||||
|
score: number;
|
||||||
|
|
||||||
|
// score: 这个武将的军功
|
||||||
|
constructor(score: number) {
|
||||||
|
super();
|
||||||
|
this.score = score;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
// 一些通用的interface定义
|
// 一些通用的interface定义
|
||||||
|
|
||||||
import { reduceCe } from "./util";
|
import { reduceCe } from "./util";
|
||||||
import { PvpEnemies } from "../db/generalField";
|
import { PvpEnemies, PvpHeroInfo, PvpOtherHeroes } from "../db/generalField";
|
||||||
|
|
||||||
export interface RewardInter {
|
export interface RewardInter {
|
||||||
id: number;
|
id: number;
|
||||||
@@ -128,7 +128,7 @@ export class PlayerDetailHero {
|
|||||||
quality: number;
|
quality: number;
|
||||||
score: number;
|
score: number;
|
||||||
|
|
||||||
setPvpHeroInfo?(hero: PvpEnemies) {
|
setPvpHeroInfo?(hero: PvpEnemies|PvpOtherHeroes) {
|
||||||
this.actorId = hero.actorId;
|
this.actorId = hero.actorId;
|
||||||
this.lv = hero.lv;
|
this.lv = hero.lv;
|
||||||
this.star = hero.star;
|
this.star = hero.star;
|
||||||
|
|||||||
Reference in New Issue
Block a user