战力,出生皮肤
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
// 物品表
|
||||
import {decodeArrayListStr, readJsonFile, parseReward, parseNumberList, decodeArrayStr, deepCopy} from '../util'
|
||||
import { FILENAME, IT_TYPE, ABI_TYPE } from '../../consts'
|
||||
import {decodeArrayListStr, readJsonFile, parseReward, parseNumberList, decodeArrayStr} from '../util'
|
||||
import { FILENAME, IT_TYPE, ABI_TYPE , GOOD_TYPE} from '../../consts'
|
||||
import { RewardInter } from '../interface';
|
||||
const _ = require('lodash');
|
||||
const underscore = require('underscore');
|
||||
@@ -87,7 +87,6 @@ const DicGoodsKeys: KeysEnum<DicGoods> = {
|
||||
export const dicJewel = new Map<number, DicGoods>();
|
||||
export const dicGoods = new Map<number, DicGoods>();
|
||||
export const blueprt = new Map<number, Array<number>>();
|
||||
let jewelsMap = {};
|
||||
arr.forEach(o => {
|
||||
o.goodsAbility = parseAbility(o);
|
||||
o.goodsAbilityUp = parseAbilityUp(o);
|
||||
@@ -102,7 +101,7 @@ arr.forEach(o => {
|
||||
let arr = blueprt.get(o.quality)||new Array<number>();
|
||||
arr.push(o.good_id);
|
||||
blueprt.set(o.quality, arr);
|
||||
} else if (o.itid == IT_TYPE.JEWEL) {
|
||||
} else if (o.itid == GOOD_TYPE.JEWEL) {
|
||||
let material = o.composeMaterial[0];
|
||||
if (!!material && !!material.id) {
|
||||
let lastJewel = underscore.findWhere(arr,{good_id:material.id});
|
||||
@@ -115,7 +114,6 @@ arr.forEach(o => {
|
||||
}
|
||||
});
|
||||
|
||||
jewelsMap = undefined;
|
||||
arr = undefined;
|
||||
|
||||
function parseSpecialAttr(str: string) {
|
||||
|
||||
@@ -26,13 +26,14 @@ export interface DicHero {
|
||||
// 主属性
|
||||
readonly baseAbilityArr:Map<number, number>;
|
||||
readonly baseAbilityUpArr:Map<number, number>;
|
||||
readonly initialSkin: number;
|
||||
}
|
||||
|
||||
const str = readJsonFile(FILENAME.DIC_HERO);
|
||||
let arr = JSON.parse(str);
|
||||
|
||||
type KeysEnum<T> = { [P in keyof Required<T>]: true };
|
||||
const DicHeroKeys: KeysEnum<DicHero> = {heroId: true, name: true, quality: true, camp: true, jobid: true, skill: true, pieceId: true, initialStars: true, pieceCount: true, baseAbilityArr: true, baseAbilityUpArr: true};
|
||||
const DicHeroKeys: KeysEnum<DicHero> = {heroId: true, name: true, quality: true, camp: true, jobid: true, skill: true, pieceId: true, initialStars: true, pieceCount: true, baseAbilityArr: true, baseAbilityUpArr: true, initialSkin: true};
|
||||
export const dicHero = new Map<number, DicHero>();
|
||||
arr.forEach(o => {
|
||||
o.baseAbilityArr = parseBaseAbilityArr(o);
|
||||
|
||||
+57
-15
@@ -8,7 +8,7 @@ import { deepCopy } from './util';
|
||||
import { HeroModel, HeroType } from '../db/Hero';
|
||||
import { RoleModel } from '../db/Role';
|
||||
import { CeAttrData, CeAttr, CeAttrNumber } from '../db/generalField';
|
||||
import { getAttrNameByJobStage, getAttrCeRatio, getAtrrNameById, ABI_TYPE_TO_STAGE, ABI_STAGE, SEID_TYPE, HERO_ATTR} from '../consts';
|
||||
import { getAttrNameByJobStage, getAttrCeRatio, getAtrrNameById, ABI_TYPE_TO_STAGE, ABI_STAGE, SEID_TYPE} from '../consts';
|
||||
import { gameData, getJobByGradeAndClass, getHeroWakeByQuality, getHeroStarByQuality, getFriendShipById } from './data';
|
||||
import { Attributes } from './interface';
|
||||
import { DicSe } from './dictionary/DicSe';
|
||||
@@ -18,7 +18,7 @@ import { DicRandomEffectPool } from './dictionary/DicRandomEffectPool';
|
||||
const HERO_CE_RATIO = 100;
|
||||
const _ = require('underscore');
|
||||
//战力计算TODO
|
||||
export function calPlayerCe(hero: HeroType, type: number, args: Array<number>) {
|
||||
export function calPlayerCe(globalCeAttr: CeAttr, hero: HeroType, type: number, args: Array<number>) {
|
||||
let incCe = 0;
|
||||
let incArr: Attributes = {};
|
||||
let reIncAttr: CeAttr = {}; // {"hp": {"base": number, "fixUp": number, "ratioUp": number}}
|
||||
@@ -33,7 +33,7 @@ export function calPlayerCe(hero: HeroType, type: number, args: Array<number>) {
|
||||
} else if (type == HERO_SYSTEM_TYPE.STAGEUP) {
|
||||
reIncAttr = calHeroJobStageUpIncAttr(hero, args, addSeidList, removeSeidList )
|
||||
} else if (type == HERO_SYSTEM_TYPE.SKIN) {
|
||||
reIncAttr = calWaerHeroSkinIncAttr(hero, args);
|
||||
reIncAttr = calHeroWearSkinIncAttr(hero, args);
|
||||
} else if (type == HERO_SYSTEM_TYPE.FAVOUR) {
|
||||
reIncAttr = calHeroFavourUpIncAttr(hero, args);
|
||||
} else if (type == HERO_SYSTEM_TYPE.CONNECT) {
|
||||
@@ -51,12 +51,12 @@ export function calPlayerCe(hero: HeroType, type: number, args: Array<number>) {
|
||||
if(!hero.ceAttr) hero.ceAttr = new CeAttr();
|
||||
for (let attrName in reIncAttr) {
|
||||
let originalAttrData: CeAttrData = hero.ceAttr[attrName]||new CeAttrData();
|
||||
let oldCe = (originalAttrData.fixUp + originalAttrData.equipUp||0) * HERO_CE_RATIO + originalAttrData.base *(HERO_CE_RATIO + originalAttrData.ratioUp);
|
||||
let oldCe = (originalAttrData.fixUp + (originalAttrData.equipUp||0)) * HERO_CE_RATIO + originalAttrData.base *(HERO_CE_RATIO + originalAttrData.ratioUp + globalCeAttr[attrName].ratioUp);
|
||||
if(!hero.ceAttr[attrName]) hero.ceAttr[attrName] = new CeAttrData();
|
||||
for (let attrKey in reIncAttr[attrName]) {
|
||||
hero.ceAttr[attrName][attrKey] = parseInt(reIncAttr[attrName][attrKey]||0);
|
||||
}
|
||||
incArr[attrName] = (reIncAttr[attrName].fixUp + reIncAttr[attrName].equipUp||0) * HERO_CE_RATIO + reIncAttr[attrName].base *(HERO_CE_RATIO + reIncAttr[attrName].ratioUp) - oldCe; //计算属性
|
||||
incArr[attrName] = (reIncAttr[attrName].fixUp + (reIncAttr[attrName].equipUp||0)) * HERO_CE_RATIO + reIncAttr[attrName].base *(HERO_CE_RATIO + reIncAttr[attrName].ratioUp + globalCeAttr[attrName].ratioUp) - oldCe; //计算属性
|
||||
incCe += incArr[attrName] * getAttrCeRatio(attrName);
|
||||
}
|
||||
hero.ce += incCe;
|
||||
@@ -67,19 +67,17 @@ export function calPlayerCe(hero: HeroType, type: number, args: Array<number>) {
|
||||
export async function calPlayerCeAndSave(roleId: string, heros: Array<HeroType>, type?: number, args?: Array<number>) {
|
||||
let incPlayerCe = 0;
|
||||
let pushHeros = new Array<{hid: number, ce: number, incHeroCe: number}>();
|
||||
|
||||
let role = await RoleModel.findByRoleId(roleId);
|
||||
for (let hero of heros) {
|
||||
let incHeroCe = calPlayerCe(hero, type, args);
|
||||
let incHeroCe = calPlayerCe(role.globalCeAttr, hero, type, args);
|
||||
incPlayerCe += incHeroCe;
|
||||
|
||||
await HeroModel.updateHeroInfo(roleId, hero.hid, hero );
|
||||
await HeroModel.updateHeroInfo(roleId, hero.hid, hero);
|
||||
pushHeros.push({
|
||||
hid: hero.hid,
|
||||
ce: hero.ce,
|
||||
incHeroCe : incHeroCe,
|
||||
});
|
||||
}
|
||||
let role = await RoleModel.findByRoleId(roleId);
|
||||
role.ce += incPlayerCe;
|
||||
await RoleModel.updateRoleInfo(roleId, role);
|
||||
return {pushHeros, role}
|
||||
@@ -177,7 +175,7 @@ export function calHeroJobStageUpIncAttr(hero: HeroType, args: Array<number>, ad
|
||||
}
|
||||
|
||||
//穿戴时装
|
||||
export function calWaerHeroSkinIncAttr(hero: HeroType, args: Array<number>) {
|
||||
export function calHeroWearSkinIncAttr(hero: HeroType, args: Array<number>) {
|
||||
let res: CeAttr = {};
|
||||
let addSkin = gameData.fashion.get(args[0]);
|
||||
let delSkin = gameData.fashion.get(args[1]);
|
||||
@@ -185,12 +183,12 @@ export function calWaerHeroSkinIncAttr(hero: HeroType, args: Array<number>) {
|
||||
for (let attr of delSkin.actorAttr) {
|
||||
attrName = getAtrrNameById(attr.id);
|
||||
res[attrName] = {fixUp: hero.ceAttr[attrName].fixUp, base: hero.ceAttr[attrName].base, ratioUp: hero.ceAttr[attrName].ratioUp};
|
||||
res[attrName].fixUp += attr.number * HERO_CE_RATIO;
|
||||
res[attrName].fixUp -= attr.number * HERO_CE_RATIO;
|
||||
}
|
||||
for (let attr of addSkin.actorAttr) {
|
||||
attrName = getAtrrNameById(attr.id);
|
||||
res[attrName] = {fixUp: hero.ceAttr[attrName].fixUp, base: hero.ceAttr[attrName].base, ratioUp: hero.ceAttr[attrName].ratioUp};
|
||||
res[attrName].fixUp -= attr.number * HERO_CE_RATIO;
|
||||
res[attrName].fixUp += attr.number * HERO_CE_RATIO;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
@@ -426,10 +424,54 @@ function addSeid(effectList: Array<any>, seidId:number, rand: number, seidValue
|
||||
}
|
||||
return;
|
||||
}
|
||||
effectList.push(curSeid);
|
||||
let seid: DicSe|DicRandomEffectPool = deepCopy(curSeid);
|
||||
if(curSeid.index > 0) {
|
||||
seid.gainValueArr[curSeid.index - 1] = rand;
|
||||
}
|
||||
|
||||
effectList.push(seid);
|
||||
}
|
||||
}
|
||||
//全局属性加成
|
||||
export async function reCalAllHeroCe(roleId: string, type: number, args:Array<number>) {
|
||||
let reIncAttr: CeAttr = {};
|
||||
let role = await RoleModel.findByRoleId(roleId);
|
||||
if(!role.globalCeAttr) role.globalCeAttr = new CeAttr();
|
||||
let originalAttr = role.globalCeAttr;
|
||||
let pushHeros:Array<{hid:number, ce:number, incHeroCe:number}> = []
|
||||
if (type == 1) {//获得皮肤
|
||||
reIncAttr = calHeroAddSkin(args, role.globalCeAttr);
|
||||
}
|
||||
for (let attrName in reIncAttr) {
|
||||
role.globalCeAttr[attrName].fixUp = reIncAttr[attrName].fixUp;
|
||||
role.globalCeAttr[attrName].ratioUp = reIncAttr[attrName].ratioUp;
|
||||
}
|
||||
let heros = await HeroModel.findByRole(roleId);
|
||||
for (let hero of heros) {
|
||||
let incHeroCe = 0;
|
||||
for (let attrName in reIncAttr) {
|
||||
let oldcCe = originalAttr[attrName].fixUp * HERO_CE_RATIO + hero.ceAttr[attrName].base * (HERO_CE_RATIO + originalAttr[attrName].ratioUp);
|
||||
let incArr = role.globalCeAttr[attrName].fixUp * HERO_CE_RATIO + hero.ceAttr[attrName].base * (HERO_CE_RATIO + role.globalCeAttr[attrName].ratioUp) - oldcCe;
|
||||
incHeroCe += incArr * getAttrCeRatio(attrName);
|
||||
}
|
||||
incHeroCe += incHeroCe;
|
||||
hero.ce += incHeroCe;
|
||||
pushHeros.push({ hid: hero.hid, ce: hero.ce, incHeroCe });
|
||||
await HeroModel.updateHeroInfo(roleId, hero.hid, {ce: hero.ce});
|
||||
}
|
||||
await RoleModel.updateRoleInfo(roleId, {globalCeAttr: role.globalCeAttr, ce: role.ce});
|
||||
return {pushHeros, ce: role.ce}
|
||||
}
|
||||
|
||||
function calHeroAddSkin(args:Array<number>, ceAttr: CeAttr){
|
||||
let res: CeAttr = {};
|
||||
for (let arg of args) {
|
||||
let addSkin = gameData.fashion.get(arg);
|
||||
let attrName: string;
|
||||
for (let attr of addSkin.globalAttr) {
|
||||
attrName = getAtrrNameById(attr.id);
|
||||
res[attrName] = {fixUp: ceAttr[attrName].fixUp, ratioUp: ceAttr[attrName].ratioUp};
|
||||
res[attrName].fixUp += attr.number * HERO_CE_RATIO;
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user