修改远征创建记录逻辑
This commit is contained in:
@@ -3,13 +3,48 @@ import { ExpeditionPointModel } from '../db/ExpeditionPoint';
|
||||
import Role, { RoleModel } from '../db/Role';
|
||||
import { PvpDefenseModel } from '../db/PvpDefense';
|
||||
|
||||
import { getWarJsons, getGamedata } from '../pubUtils/gamedata';
|
||||
import { getWarJsons, getGamedata, getExpeditionById } from '../pubUtils/gamedata';
|
||||
import { decodeStr, resResult, setLocalHours, shouldRefresh } from '../pubUtils/util';
|
||||
import { WAR_JSON_ATTRIBUTE_TYPE, EXPEDITION_CONST } from '../consts/consts';
|
||||
import Actor from '../pubUtils/actor';
|
||||
import { ExpeditionWarRecordModel } from '../db/ExpeditionWarRecord';
|
||||
|
||||
export async function findOrCreateEnemies(roleId: string, myCe: number, expeditionCode: string, expeditionId: number) {
|
||||
|
||||
let expeditionWarRecord = await ExpeditionWarRecordModel.getRecordByCodeAndId(expeditionCode, expeditionId);
|
||||
if(!expeditionWarRecord) { // 如果没有信息
|
||||
let curDicExpedition = getExpeditionById(expeditionId);
|
||||
if(curDicExpedition) {
|
||||
|
||||
let enemyObj = {
|
||||
enemyFrom: 0,
|
||||
enemyId: '',
|
||||
enemies: new Array(),
|
||||
ce: 0
|
||||
};
|
||||
|
||||
// 获取系数和步长
|
||||
let {scale, range, lv} = await getCEScaleAndRange(roleId, curDicExpedition);
|
||||
// 优先匹配其他玩家
|
||||
let flag = await matchPlayers(roleId, scale, range, myCe, curDicExpedition.json, enemyObj);
|
||||
// 当数量不够时使用机器人匹配
|
||||
if(!flag) {
|
||||
flag = await matchRobots(scale, myCe, curDicExpedition.ce, curDicExpedition.json, lv, enemyObj);
|
||||
}
|
||||
if(flag) {
|
||||
// 保存
|
||||
let {warId} = curDicExpedition;
|
||||
expeditionWarRecord = await ExpeditionWarRecordModel.saveRecord(expeditionCode, expeditionId, {
|
||||
roleId, battleId: warId, ...enemyObj
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
return expeditionWarRecord;
|
||||
}
|
||||
|
||||
// 匹配玩家
|
||||
export async function matchPlayers(roleId: string, scale: number, range: number, myCe: number, warJsonIndex:any, enemyObj: {enemyFrom: number, enemyId: string, enemies: Array<any> }) {
|
||||
export async function matchPlayers(roleId: string, scale: number, range: number, myCe: number, warJsonIndex:any, enemyObj: {enemyFrom: number, enemyId: string, enemies: Array<any>, ce: number }) {
|
||||
let {json: dicWarJson } = getWarJsons(warJsonIndex);
|
||||
|
||||
let min = myCe * scale * (1 - range/100);
|
||||
@@ -19,10 +54,11 @@ export async function matchPlayers(roleId: string, scale: number, range: number,
|
||||
if(resultRange.length > 0) {
|
||||
let index = Math.floor(Math.random() * resultRange.length);
|
||||
let result = resultRange[index];
|
||||
let {roleId, heroes } = result;
|
||||
let {roleId, heroes, ce } = result;
|
||||
|
||||
enemyObj.enemyFrom = 1;
|
||||
enemyObj.enemyId = roleId;
|
||||
enemyObj.ce = ce;
|
||||
|
||||
let heroIndex = 0;
|
||||
for(let enemy of dicWarJson) {
|
||||
@@ -42,12 +78,13 @@ export async function matchPlayers(roleId: string, scale: number, range: number,
|
||||
}
|
||||
|
||||
// 匹配机器人
|
||||
export async function matchRobots(scale: number, myCe: number, robotCe: number, warJsonIndex:any, lv: number, enemyObj: {enemyFrom: number, enemyId: string, enemies: Array<any> }) {
|
||||
export async function matchRobots(scale: number, myCe: number, robotCe: number, warJsonIndex:any, lv: number, enemyObj: {enemyFrom: number, enemyId: string, enemies: Array<any>, ce: number }) {
|
||||
let {json: dicWarJson, fileName } = getWarJsons(warJsonIndex);
|
||||
if(dicWarJson) {
|
||||
enemyObj.enemyFrom = 2;
|
||||
enemyObj.enemyId = fileName;
|
||||
enemyObj.enemyId = fileName + '';
|
||||
|
||||
let allCe = 0;
|
||||
let ratio = myCe / robotCe * scale; // 玩家战力/机器人初始战力*系数
|
||||
for(let enemy of dicWarJson) {
|
||||
if(enemy.relation == 2) {
|
||||
@@ -56,9 +93,14 @@ export async function matchRobots(scale: number, myCe: number, robotCe: number,
|
||||
attribute[value] *= ratio;
|
||||
attribute[value] = Math.round(attribute[value]);
|
||||
}
|
||||
let actor = new Actor();
|
||||
let ce = actor.calculateCEByExpression(attribute);
|
||||
enemyObj.enemies.push({...enemy, attribute, lv});
|
||||
allCe += ce;
|
||||
}
|
||||
}
|
||||
console.log(JSON.stringify(enemyObj.enemies))
|
||||
enemyObj.ce = Math.floor(allCe);
|
||||
|
||||
return true
|
||||
} else {
|
||||
@@ -79,12 +121,11 @@ export async function getCEScaleAndRange(roleId: string, curDicExpedition: any)
|
||||
}
|
||||
|
||||
// 远征表属性解码
|
||||
export function decodeWarJsonAttribute(attribute) {
|
||||
export function decodeWarJsonAttribute(attribute: string) {
|
||||
let arr = decodeStr('attribute', attribute);
|
||||
let obj = {}
|
||||
for(let key in WAR_JSON_ATTRIBUTE_TYPE) {
|
||||
obj[WAR_JSON_ATTRIBUTE_TYPE[key]] = 0; // 初始化
|
||||
}
|
||||
// 初始化
|
||||
let obj = {hp: 0, atk: 0, matk: 0, def: 0, mdef: 0, speed: 0, agi: 0, luk: 0, hit: 0, cri: 0, flee: 0, antCri: 0, damageIncrease: 0, damageDecrease: 0, defIngnore: 0, bloodSuck: 0}
|
||||
|
||||
for(let {id, value} of arr) {
|
||||
let field = WAR_JSON_ATTRIBUTE_TYPE[id];
|
||||
if(field) {
|
||||
|
||||
Reference in New Issue
Block a user