新建武将时计算初始战力
This commit is contained in:
@@ -25,7 +25,7 @@ import { ITID, COUNTER } from '@consts';
|
|||||||
import Actor from '@pubUtils/actor';
|
import Actor from '@pubUtils/actor';
|
||||||
import { ItemModel } from '@db/Item';
|
import { ItemModel } from '@db/Item';
|
||||||
import { gameData } from '@pubUtils/data';
|
import { gameData } from '@pubUtils/data';
|
||||||
import { calPlayerCeAndSave, getAllAttrStage } from '@pubUtils/playerCe';
|
import { calPlayerCeAndSave } from '@pubUtils/playerCe';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test Service
|
* Test Service
|
||||||
@@ -213,7 +213,7 @@ export default class GMUsers extends Service {
|
|||||||
try {
|
try {
|
||||||
for(let heroInfo of heroInfos) {
|
for(let heroInfo of heroInfos) {
|
||||||
let hero = await HeroModel.createHero(heroInfo);
|
let hero = await HeroModel.createHero(heroInfo);
|
||||||
await calPlayerCeAndSave(hero.roleId, [hero], HERO_SYSTEM_TYPE.STAR, getAllAttrStage());
|
await calPlayerCeAndSave(heroInfo.roleId, [hero], HERO_SYSTEM_TYPE.INIT);
|
||||||
}
|
}
|
||||||
return ctx.service.utils.resResult(STATUS.SUCCESS, { uids });
|
return ctx.service.utils.resResult(STATUS.SUCCESS, { uids });
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
//武将养成系统分类
|
//武将养成系统分类
|
||||||
export const HERO_SYSTEM_TYPE = {
|
export const HERO_SYSTEM_TYPE = {
|
||||||
STAR: 1,
|
INIT: 1,
|
||||||
|
STAR: 2,
|
||||||
TRAIN: 5,
|
TRAIN: 5,
|
||||||
STAGEUP:6,
|
STAGEUP:6,
|
||||||
SKIN:7,
|
SKIN:7,
|
||||||
@@ -10,7 +11,8 @@ export const HERO_SYSTEM_TYPE = {
|
|||||||
EQUIP_BASE: 11,
|
EQUIP_BASE: 11,
|
||||||
RESTRENGTHEN: 12,
|
RESTRENGTHEN: 12,
|
||||||
JEWEL_ON: 13,
|
JEWEL_ON: 13,
|
||||||
JEWEL_OFF: 14
|
JEWEL_OFF: 14,
|
||||||
|
ADD_SKIN: 15
|
||||||
};
|
};
|
||||||
|
|
||||||
// 武将上限
|
// 武将上限
|
||||||
|
|||||||
@@ -27,7 +27,9 @@ export function calPlayerCe(globalCeAttr: CeAttr, hero: HeroType, type: number,
|
|||||||
let addSeidList = new Array<number>();
|
let addSeidList = new Array<number>();
|
||||||
let removeSeidList = new Array<number>();
|
let removeSeidList = new Array<number>();
|
||||||
|
|
||||||
if (type == HERO_SYSTEM_TYPE.STAR) {
|
if (type == HERO_SYSTEM_TYPE.INIT) {
|
||||||
|
reIncAttr = calHeroInitIncAttr(hero, addSeidList, removeSeidList); // args: 升的星盘
|
||||||
|
} else if (type == HERO_SYSTEM_TYPE.STAR) {
|
||||||
reIncAttr = calHeroStarIncAttr(hero, args, addSeidList); // args: 升的星盘
|
reIncAttr = calHeroStarIncAttr(hero, args, addSeidList); // args: 升的星盘
|
||||||
} else if (type == HERO_SYSTEM_TYPE.TRAIN) {
|
} else if (type == HERO_SYSTEM_TYPE.TRAIN) {
|
||||||
reIncAttr = calHeroTrainIncAttr(hero);
|
reIncAttr = calHeroTrainIncAttr(hero);
|
||||||
@@ -49,6 +51,8 @@ export function calPlayerCe(globalCeAttr: CeAttr, hero: HeroType, type: number,
|
|||||||
reIncAttr = calHeroCeWhenJewelOn(hero, args);
|
reIncAttr = calHeroCeWhenJewelOn(hero, args);
|
||||||
} else if (type == HERO_SYSTEM_TYPE.JEWEL_OFF) {//宝石卸下
|
} else if (type == HERO_SYSTEM_TYPE.JEWEL_OFF) {//宝石卸下
|
||||||
reIncAttr = calHeroCeWhenJewelOff(hero, args);
|
reIncAttr = calHeroCeWhenJewelOff(hero, args);
|
||||||
|
} else {
|
||||||
|
reIncAttr = hero.ceAttr;
|
||||||
}
|
}
|
||||||
|
|
||||||
addSeidEffect(reIncAttr, hero.ceAttr, addSeidList, removeSeidList); // 处理加值
|
addSeidEffect(reIncAttr, hero.ceAttr, addSeidList, removeSeidList); // 处理加值
|
||||||
@@ -71,9 +75,24 @@ export function calPlayerCe(globalCeAttr: CeAttr, hero: HeroType, type: number,
|
|||||||
|
|
||||||
//修改并下发战力
|
//修改并下发战力
|
||||||
export async function calPlayerCeAndSave(roleId: string, heros: Array<HeroType>, type?: number, args?: Array<number>) {
|
export async function calPlayerCeAndSave(roleId: string, heros: Array<HeroType>, type?: number, args?: Array<number>) {
|
||||||
|
if(!heros.length) heros = await HeroModel.findByRole(roleId);
|
||||||
|
|
||||||
let incPlayerCe = 0;
|
let incPlayerCe = 0;
|
||||||
let pushHeros = new Array<{hid: number, ce: number, incHeroCe: number}>();
|
let pushHeros = new Array<{hid: number, ce: number, incHeroCe: number}>();
|
||||||
let role = await RoleModel.findByRoleId(roleId);
|
let role = await RoleModel.findByRoleId(roleId);
|
||||||
|
if(!role.globalCeAttr) role.globalCeAttr = new CeAttr();
|
||||||
|
|
||||||
|
let reIncAttr: CeAttr = {}; // role表属性增量
|
||||||
|
|
||||||
|
if (type == HERO_SYSTEM_TYPE.INIT) {
|
||||||
|
reIncAttr = calRoleInitIncAttr(heros, role.globalCeAttr); // 全局变量增
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let attrName in reIncAttr) {
|
||||||
|
role.globalCeAttr[attrName].fixUp = reIncAttr[attrName].fixUp;
|
||||||
|
role.globalCeAttr[attrName].ratioUp = reIncAttr[attrName].ratioUp;
|
||||||
|
}
|
||||||
|
|
||||||
for (let hero of heros) {
|
for (let hero of heros) {
|
||||||
let incHeroCe = calPlayerCe(role.globalCeAttr, hero, type, args);
|
let incHeroCe = calPlayerCe(role.globalCeAttr, hero, type, args);
|
||||||
incPlayerCe += incHeroCe;
|
incPlayerCe += incHeroCe;
|
||||||
@@ -85,10 +104,46 @@ export async function calPlayerCeAndSave(roleId: string, heros: Array<HeroType>,
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
role.ce += incPlayerCe;
|
role.ce += incPlayerCe;
|
||||||
await RoleModel.updateRoleInfo(roleId, role);
|
await RoleModel.updateRoleInfo(roleId, {globalCeAttr: role.globalCeAttr, ce: role.ce});
|
||||||
return {pushHeros, role}
|
return {pushHeros, role}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 初始战力
|
||||||
|
export function calHeroInitIncAttr(hero: HeroType, addSeidList: Array<number>, removeSeidList: Array<number>) {
|
||||||
|
let res1 = calHeroStarIncAttr(hero, getAllAttrStage(), addSeidList);
|
||||||
|
let hero1 = combineHeroCeAttr(hero, res1)
|
||||||
|
calHeroJobStageUpIncAttr(hero1, [0], addSeidList, removeSeidList);
|
||||||
|
|
||||||
|
console.log(JSON.stringify(res1));
|
||||||
|
return res1
|
||||||
|
}
|
||||||
|
|
||||||
|
export function calRoleInitIncAttr(heros: HeroType[], globalCeAttr: CeAttr) {
|
||||||
|
let args = new Array<number>();
|
||||||
|
for(let hero of heros) {
|
||||||
|
for(let skin of hero.skins) {
|
||||||
|
args.push(skin.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let res = calHeroAddSkin(args, globalCeAttr);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 将hero的ceAttr暂时更新,不更新在originalHero本体上
|
||||||
|
function combineHeroCeAttr(originalHero: HeroType, result: CeAttr) {
|
||||||
|
let hero = deepCopy(originalHero);
|
||||||
|
if(!hero.ceAttr) hero.ceAttr = new CeAttr();
|
||||||
|
for (let attrName in result) {
|
||||||
|
if(!result[attrName]) continue;
|
||||||
|
if(!hero.ceAttr[attrName]) hero.ceAttr[attrName] = new CeAttrData();
|
||||||
|
for (let attrKey in result[attrName]) {
|
||||||
|
hero.ceAttr[attrName][attrKey] = parseInt(result[attrName][attrKey]||0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete hero._id;
|
||||||
|
return hero;
|
||||||
|
}
|
||||||
|
|
||||||
export function calHeroStarIncAttr (hero: HeroType, args: Array<number>, addSeidList: Array<number>) {
|
export function calHeroStarIncAttr (hero: HeroType, args: Array<number>, addSeidList: Array<number>) {
|
||||||
let {star, starStage, quality, colorStar, colorStarStage, ceAttr} = hero;
|
let {star, starStage, quality, colorStar, colorStarStage, ceAttr} = hero;
|
||||||
let res: CeAttr = {};
|
let res: CeAttr = {};
|
||||||
@@ -165,7 +220,7 @@ export function calHeroTrainIncAttr(hero: HeroType) {
|
|||||||
//进阶
|
//进阶
|
||||||
export function calHeroJobStageUpIncAttr(hero: HeroType, args: Array<number>, addSeidList: Array<number>, removeSeidList: Array<number>) {
|
export function calHeroJobStageUpIncAttr(hero: HeroType, args: Array<number>, addSeidList: Array<number>, removeSeidList: Array<number>) {
|
||||||
let res: CeAttr = {};
|
let res: CeAttr = {};
|
||||||
let lastJob = gameData.job.get(args[0]);
|
let lastJob = gameData.job.get(args[0])||{seid:[]};
|
||||||
let currentJob = gameData.job.get(hero.job);
|
let currentJob = gameData.job.get(hero.job);
|
||||||
for (let seid of currentJob.seid) {
|
for (let seid of currentJob.seid) {
|
||||||
let index = _.findIndex(lastJob.seid, seid);
|
let index = _.findIndex(lastJob.seid, seid);
|
||||||
|
|||||||
@@ -269,7 +269,7 @@ export function getRefTime(now = new Date(), hour: number, day = 0) {
|
|||||||
* @param cnt 返回随机元素个数
|
* @param cnt 返回随机元素个数
|
||||||
*/
|
*/
|
||||||
export function getRandEelm(source: Array<any> = [], cnt = 1): Array<any> {
|
export function getRandEelm(source: Array<any> = [], cnt = 1): Array<any> {
|
||||||
if (cnt > source.length) return [];
|
if (cnt > source.length || cnt == 0 ) return [];
|
||||||
if (cnt === source.length) return source;
|
if (cnt === source.length) return source;
|
||||||
let idxs = new Set();
|
let idxs = new Set();
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import { smsModel } from '@db/Sms';
|
|||||||
import { Service } from 'egg';
|
import { Service } from 'egg';
|
||||||
import Counter from '@db/Counter';
|
import Counter from '@db/Counter';
|
||||||
import { getHeroInfoById } from 'app/pubUtils/gamedata';
|
import { getHeroInfoById } from 'app/pubUtils/gamedata';
|
||||||
import { calPlayerCeAndSave, getAllAttrStage } from 'app/pubUtils/playerCe';
|
import { calPlayerCeAndSave } from 'app/pubUtils/playerCe';
|
||||||
const _ = require('underscore');
|
const _ = require('underscore');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -149,7 +149,7 @@ export default class Auth extends Service {
|
|||||||
roleId, roleName: role.roleName, hid, hName, star, quality, job, serverId: role.serverId,
|
roleId, roleName: role.roleName, hid, hName, star, quality, job, serverId: role.serverId,
|
||||||
skins:[{id: initialSkin, enable: true}]
|
skins:[{id: initialSkin, enable: true}]
|
||||||
});
|
});
|
||||||
await calPlayerCeAndSave(roleId, [hero], HERO_SYSTEM_TYPE.STAR, getAllAttrStage());
|
await calPlayerCeAndSave(roleId, [hero], HERO_SYSTEM_TYPE.INIT);
|
||||||
}
|
}
|
||||||
return ctx.service.utils.resResult(STATUS.SUCCESS, { roleId: role.roleId });
|
return ctx.service.utils.resResult(STATUS.SUCCESS, { roleId: role.roleId });
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user