战力:pvp远征匹配系数修改

This commit is contained in:
luying
2021-03-10 15:34:38 +08:00
parent 831661ec66
commit b822337b82
3 changed files with 52 additions and 12 deletions

View File

@@ -14,6 +14,7 @@ import { getRoleOnlineInfo, getAllOnlineRoles } from '../../../services/redisSer
import { pushComposeOrangeHero, pushHeroQualityUpMsg, pushHeroStarMax } from '../../../services/chatService';
import { calculatetopLineup } from '../../../pubUtils/playerCe';
import { PvpDefenseModel } from '../../../db/PvpDefense';
import { Attribute } from '../../../domain/roleField/attribute';
export default function(app: Application) {
return new HeroHandler(app);
@@ -25,13 +26,40 @@ export class HeroHandler {
private channelService: ChannelService = this.app.get('channelService');
public async test(msg: { items:Array<{id: number, count: number, seqId:number, type:number}>}, session: BackendSession) {
let roleId: string = session.get('roleId');
public async test(msg: { }, session: BackendSession) {
let roles = await RoleModel.find({}).lean();
for(let role of roles) {
let { roleId, attr: roleAttr, topLineup } = role;
let heros = await HeroModel.findByRole(roleId);
let sumCe = 0;
let role = await getRoleOnlineInfo(roleId);
let list = await getAllOnlineRoles();
return resResult(STATUS.SUCCESS, {role, list});
let pvpdefense = await PvpDefenseModel.findByRoleId(roleId);
let { heroes: defHeroes } = pvpdefense;
for(let hero of heros) {
let { hid, attr: heroAttr } = hero;
let attr = new Attribute();
attr.setByDbData(roleAttr, heroAttr);
let ce = attr.calCe();
await HeroModel.updateHeroInfo(roleId, hid, { ce, historyCe: ce });
sumCe += ce;
let curHero = topLineup.find(cur => cur.hid == hid);
if(curHero) curHero.ce = ce;
let curDefHero = defHeroes.find(cur => cur.actorId == hid);
if(curDefHero) curDefHero.ce = ce;
console.log(roleId, hid, ce, sumCe)
}
let topLineupCe = topLineup.reduce((pre, cur) => {
return pre + cur.ce
}, 0);
let defCe = defHeroes.reduce((pre, cur) => {
return pre + cur.ce
}, 0);
await RoleModel.updateRoleInfo(roleId, { ce: sumCe, topLineup, topLineupCe });
await PvpDefenseModel.updateInfo(roleId, { defCe, heroes: defHeroes }); // 更新pvp防守阵战力
}
}
// ! 测试接口用来测试前清理并初始化某个武将代码抄自gm-server/app/service/users.ts deleteHero

View File

@@ -24,9 +24,11 @@ import { PvpHistoryOppModel, PvpHistoryOppType } from '../db/PvpHistoryOpp';
export async function initPvpInfo(role: RoleType) {
let heroes: Array<Heroes> = [];
//初始化最强5人阵容
let defCe = 0;
for (let i = PVP_HERO_POS.START; i <= PVP_HERO_POS.END; i++) {
let index = i - PVP_HERO_POS.START;
let item = role.topLineup[index];
if(item) defCe += item.ce;
heroes.push({
actorId: item?.hid||0,
hero: item?.hero||null,
@@ -39,7 +41,7 @@ export async function initPvpInfo(role: RoleType) {
let oppPlayers: Array<OppPlayers> = await refreshEnemies(role, 0, 1);
let {seasonNum} = await SystemConfigModel.findSystemConfig();
let challengeCnt = PVP.PVP_CHALLENGE_COUNTS;
let result = await PvpDefenseModel.createPvpDefense({ roleId: role.roleId, roleName: role.roleName, role: role._id, heroes, oppPlayers, defCe: role.topLineupCe, seasonNum, challengeCnt });
let result = await PvpDefenseModel.createPvpDefense({ roleId: role.roleId, roleName: role.roleName, role: role._id, heroes, oppPlayers, defCe, seasonNum, challengeCnt });
//加入排行榜
let { roleId, roleName, lv, vLv, headHid, sHid, title } = role;
@@ -248,6 +250,7 @@ async function matchRobot(oppPlayers: OppPlayers[], mapWarJson: DicWarJson[], ro
let robotWarjson = gameData.warJson.get(result.war_id);
if(!robotWarjson) { /* TODO 判空处理 */ }
let heroes = new Array<PvpEnemies>();
let defCe = 0;
for(let warJson of mapWarJson) {
if(warJson.relation == 1) continue;
let h = robotWarjson.find(cur => cur.dataId == warJson.dataId);
@@ -257,6 +260,7 @@ async function matchRobot(oppPlayers: OppPlayers[], mapWarJson: DicWarJson[], ro
let heroInfo = new PvpHeroInfo();
heroInfo.setRobotInfo(h, myLv, dicHero.initialStars, dicHero.quality);
let attribute = getRobotAttribute(h.attribute, myCe, PVP_CONST.ENEMY_CE, ratio);
defCe += attribute.ce;
heroInfo.setAttribute(attribute);
let enemy = new PvpEnemies(warJson, heroInfo, 0);
heroes.push(enemy);
@@ -269,7 +273,7 @@ async function matchRobot(oppPlayers: OppPlayers[], mapWarJson: DicWarJson[], ro
if(hisPLv < 1) hisPLv = 1
let pvpHistoryOpp = await PvpHistoryOppModel.createPvpOpp({
roleId, oppRoleId, roleName, pos, defCe: Math.floor(myCe * ratio), pLv: hisPLv, lv: myLv, heroes
roleId, oppRoleId, roleName, pos, defCe, pLv: hisPLv, lv: myLv, heroes
});
oppPlayers.push({
@@ -494,9 +498,10 @@ export async function findPvpDefAllByRoleId(roleId: string) {
export function getRobotAttribute(attribute: {id: number, val: number}[], ce: number, enemyCe: number, ratio: number) {
let newAttribute = new Attribute();
newAttribute.setByWarJson(attribute, ce / enemyCe * ratio);
newAttribute.setByWarJson(attribute, Math.sqrt(ce / enemyCe * ratio));
let attrJson = newAttribute.getReduceAttributes();
let resultCe = newAttribute.calCelAndReduce();
attrJson.ce = resultCe;
return attrJson;
}
@@ -509,7 +514,8 @@ export function getPlayerAttribute(heroAttrs: CeAttrData[] = [], roleAttrs: CeAt
let newAttribute = new Attribute();
newAttribute.setByDbData(roleAttrs, heroAttrs);
let attrJson = newAttribute.getReduceAttributes();
let resultCe = newAttribute.calCelAndReduce();
attrJson.ce = resultCe;
return attrJson;
}

View File

@@ -1,5 +1,5 @@
import { prop } from '@typegoose/typegoose';
import { HERO_CE_RATIO, getAtrrNameById, CE_CONST, HERO_SUB_ATTR_RATIO } from '../../consts';
import { HERO_CE_RATIO, getAtrrNameById, CE_CONST, HERO_SUB_ATTR_RATIO, ABI_TYPE_MAIN } from '../../consts';
import { reduceCe } from '../../pubUtils/util';
// hero表内属性基础格式
@@ -80,6 +80,8 @@ export class Attribute {
ap: number = 0;
@prop({ required: false })
damageCri: number = 0;
@prop({ required: false })
ce?: number = 0;
setByDbData(roleAttrs: CeAttrDataRole[], heroAttrs: CeAttrData[]) {
for(let { id, fixUp: roleFix, ratioUp: roleRatio } of roleAttrs) {
@@ -108,7 +110,11 @@ export class Attribute {
setByWarJson( attributes: {id: number, val: number}[], ratio: number = 1) {
for(let {id, val} of attributes) {
let attrName = getAtrrNameById(id);
if(attrName in this) this[attrName] = Math.floor(val * ratio * HERO_CE_RATIO * HERO_CE_RATIO);
if(ABI_TYPE_MAIN.includes(id)) {
if(attrName in this) this[attrName] = Math.floor(val * ratio * HERO_CE_RATIO * HERO_CE_RATIO);
} else {
if(attrName in this) this[attrName] = Math.floor(val * HERO_CE_RATIO * HERO_CE_RATIO);
}
}
}