@@ -6,127 +6,114 @@ import { HERO_SYSTEM_TYPE, ABI_TYPE, JEWEL_ATTR } from '../consts';
import { deepCopy , getAllAttrStage , reduceCe } from './util' ;
import { deepCopy , getAllAttrStage , reduceCe } from './util' ;
import { HeroModel , HeroType } from '../db/Hero' ;
import { HeroModel , HeroType } from '../db/Hero' ;
import { RoleModel } from '../db/Role' ;
import { RoleModel , RoleType } from '../db/Role' ;
import { CeAttrData , CeAttr , CeAttrRole , CeAttrNumber , CeAttrDataRole } from '../db/generalField' ;
import { CeAttrData , CeAttr , CeAttrRole , CeAttrNumber , CeAttrDataRole } from '../db/generalField' ;
import { getAttrNameByJobStage , getAttrCeRatio , getAtrrNameById , ABI_STAGE , SEID_TYPE } from '../consts' ;
import { getAttrNameByJobStage , getAttrCeRatio , getAtrrNameById , ABI_STAGE , SEID_TYPE } from '../consts' ;
import { gameData , getJobByGradeAndClass , getHeroWakeByQuality , getHeroStarByQuality , getFriendShipById , getSchoolRateByStar , getScollByStar , getFieldByStage } from './data' ;
import { gameData , getJobByGradeAndClass , getHeroWakeByQuality , getHeroStarByQuality , getFriendShipById , getSchoolRateByStar , getScollByStar , getFieldByStage } from './data' ;
import { Attributes } from './interface' ;
import { DicSe } from './dictionary/DicSe' ;
import { DicSe } from './dictionary/DicSe' ;
import { EquipType } from '../db/Equip' ;
import { EquipType } from '../db/Equip' ;
import { DicRandomEffectPool } from './dictionary/DicRandomEffectPool' ;
import { DicRandomEffectPool } from './dictionary/DicRandomEffectPool' ;
import { getGoodById } from './gamedata' ;
import { getGoodById } from './gamedata' ;
import { SchoolModel } from '../db/School' ;
import { SchoolModel } from '../db/School' ;
import { getTeraphAttr } from '../consts/constModules/abilityConst'
const HERO_CE_RATIO = 100 ;
const HERO_CE_RATIO = 100 ;
const _ = require ( 'underscore' ) ;
const _ = require ( 'underscore' ) ;
//战力计算TODO
//战力计算TODO
export function calPlayerCe ( globalCeAttr : CeAttrRole , hero : HeroType , type : number , args : Array < number > = [ ] ) {
export function calPlayerCe ( globalCeAttr : CeAttrRole , hero : HeroType , type : number , args : Array < number > = [ ] ) {
let incCe = 0 ;
let heroCe = 0 ;
let incArr : Attributes = { } ;
let reIncAttr : CeAttr = { } ; // {"hp": {"base": number, "fixUp": number, "ratioUp": number}}
let reIncAttr : CeAttr = { } ; // {"hp": {"base": number, "fixUp": number, "ratioUp": 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 . INIT ) {
switch ( type ) {
reIncAttr = calHeroInitIncAttr ( hero , addSeidList , removeSeidList ) ; // args: 升的星盘
case HERO_SYSTEM_TYPE.INIT :
} else if ( type == HERO_SYSTEM_TYPE . STAR || type == HERO_SYSTEM_TYPE . LVUP || type == HERO_SYSTEM_TYPE . COLORSTAR || type == HERO_SYSTEM_TYPE . QUALITY ) {
reIncAttr = calHeroInitIncAttr ( hero , addSeidList , removeSeidList ) ; // args: 升的星盘
reIncAttr = calHeroStarIncAttr ( hero , type , args . shift ( ) , args , addSeidList , removeSeidList ) ; // args: 升的星盘
break ;
} else if ( type == HERO_SYSTEM_TYPE . TRAIN ) {
case HERO_SYSTEM_TYPE.STAR :
reIncAttr = calHeroTrainIncAttr ( hero ) ;
case HERO_SYSTEM_TYPE.LVUP :
} else if ( type == HERO_SYSTEM_TYPE . STAGEUP ) {
case HERO_SYSTEM_TYPE.COLORSTAR :
reIncAttr = calHeroJobStageUpIncAttr ( hero , args , addSeidList , removeSeidList ) ;
case HERO_SYSTEM_TYPE.QUALITY :
} else if ( type == HERO_SYSTEM_TYPE . SKIN ) {
reIncAttr = calHeroStarIncAttr ( hero , type , args . shift ( ) , args , addSeidList , removeSeidList ) ; // args: 升的星盘
reIncAttr = calHeroWearSkinIncAttr ( hero , args , addSeidList , removeSeidList ) ;
break ;
} else if ( type == HERO_SYSTEM_TYPE . FAVOUR ) {
case HERO_SYSTEM_TYPE.TRAIN :
reIncAttr = calHeroFavourUpIncAttr ( hero , args ) ;
reIncAttr = calHeroTrainIncAttr ( hero ) ;
} else if ( type == HERO_SYSTEM_TYPE . CONNECT ) {
break ;
reIncAttr = calHeroConectIncAttr ( hero , args ) ;
case HERO_SYSTEM_TYPE.STAGEUP :
} else if ( type == HERO_SYSTEM_TYPE . EQUIP ) {
reIncAttr = calHeroJobStageUpIncAttr ( hero , args , addSeidList , removeSeidList ) ;
reIncAttr = calEquipPutOnOffIncAttr ( hero , args , addSeidList , removeSeidList ) ;
} else if ( type == HERO_SYSTEM_TYPE . EQUIP_BASE ) {
reIncAttr = calHeroEquipIncAttr ( hero ) ;
} else if ( type == HERO_SYSTEM_TYPE . RESTRENGTHEN ) {
reIncAttr = calRestrengthenIncAttr ( hero , args . shift ( ) , args , addSeidList , removeSeidList ) ;
} else if ( type == HERO_SYSTEM_TYPE . JEWEL_ON ) { //宝石穿戴
reIncAttr = calHeroCeWhenJewelOn ( hero , args ) ;
} else if ( type == HERO_SYSTEM_TYPE . JEWEL_OFF ) { //宝石卸下
reIncAttr = calHeroCeWhenJewelOff ( hero , args ) ;
} else if ( type == HERO_SYSTEM_TYPE . SCROLL ) { // 名将谱初次激活增加好感度
reIncAttr = calHeroCeScrollIncAttr ( hero , args [ 0 ] , args [ 1 ] ) ;
} else {
reIncAttr = hero . ceAttr ;
}
break ;
case HERO_SYSTEM_TYPE.SKIN :
reIncAttr = calHeroWearSkinIncAttr ( hero , args , addSeidList , removeSeidList ) ;
break ;
case HERO_SYSTEM_TYPE.FAVOUR :
reIncAttr = calHeroFavourUpIncAttr ( hero , args ) ;
break ;
case HERO_SYSTEM_TYPE.CONNECT :
reIncAttr = calHeroConectIncAttr ( hero , args ) ;
break ;
case HERO_SYSTEM_TYPE.EQUIP :
reIncAttr = calEquipPutOnOffIncAttr ( hero , args , addSeidList , removeSeidList ) ;
break ;
case HERO_SYSTEM_TYPE.EQUIP_BASE :
reIncAttr = calHeroEquipIncAttr ( hero ) ;
break ;
case HERO_SYSTEM_TYPE.RESTRENGTHEN :
reIncAttr = calRestrengthenIncAttr ( hero , args . shift ( ) , args , addSeidList , removeSeidList ) ;
break ;
case HERO_SYSTEM_TYPE.JEWEL_ON :
reIncAttr = calHeroCeWhenJewelOn ( hero , args ) ;
break ;
case HERO_SYSTEM_TYPE.JEWEL_OFF :
reIncAttr = calHeroCeWhenJewelOff ( hero , args ) ;
break ;
case HERO_SYSTEM_TYPE.SCROLL :
reIncAttr = calHeroCeScrollIncAttr ( hero , args [ 0 ] , args [ 1 ] ) ;
break ;
default :
reIncAttr = hero . ceAttr ;
}
addSeidEffect ( reIncAttr , hero . ceAttr , addSeidList , removeSeidList ) ; // 处理加值
addSeidEffect ( reIncAttr , hero . ceAttr , addSeidList , removeSeidList ) ; // 处理加值
if ( ! hero . ceAttr ) hero . ceAttr = new CeAttr ( ) ;
if ( ! hero . ceAttr ) hero . ceAttr = new CeAttr ( ) ;
for ( let attrName in reIncAttr ) {
for ( let attrName in reIncAttr ) {
if ( ! reIncAttr [ attrName ] || attrName == '_id' ) continue ;
if ( ! reIncAttr [ attrName ] || attrName == '_id' ) continue ;
let originalAttrData : CeAttrData = hero . ceAttr [ attrName ] || new CeAttrData ( ) ;
let globalAttrData : CeAttrDataRole = globalCeAttr [ attrName ] || new CeAttrDataRole ( ) ;
let originalGlobalAttrData : CeAttrDataRole = globalCeAttr [ attrName ] || new CeAttrDataRole ( ) ;
if ( ! hero . ceAttr [ attrName ] ) hero . ceAttr [ attrName ] = new CeAttrData ( ) ;
let oldCe = ( originalAttrData . fixUp + ( originalAttrData . equipUp || 0 ) ) * HERO_CE_RATIO + originalAttrData . base * ( HERO_CE_RATIO + originalAttrData . ratioUp + originalGlobalAttrData . ratioUp ) ;
if ( ! hero . ceAttr [ attrName ] ) hero . ceAttr [ attrName ] = new CeAttrData ( ) ;
for ( let attrKey in reIncAttr [ attrName ] ) {
for ( let attrKey in reIncAttr [ attrName ] ) {
if ( attrKey == '_id' ) continue ;
if ( attrKey == '_id' ) continue ;
hero . ceAttr [ attrName ] [ attrKey ] = parseInt ( reIncAttr [ attrName ] [ attrKey ] || 0 ) ;
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 + originalGlobalAttrData . ratioUp ) - oldCe ; //计算属性
let attrNumber = ( hero . ceAttr [ attrName ] . fixUp + ( hero . ceAttr [ attrName ] . equipUp || 0 ) + globalAttrData . fixUp ) * HERO_CE_RATIO + hero . ceAttr [ attrName ] . base * ( HERO_CE_RATIO + hero . ceAttr [ attrName ] . ratioUp + globalAttrData . ratioUp ) ;
incCe += incArr [ attrName ] * getAttrCeRatio ( attrName ) ;
heroCe += attrNumber * getAttrCeRatio ( attrName ) ;
}
}
hero . ce + = incCe ;
let incCe = heroCe - hero . ce ;
if ( hero . historyCe < hero . ce ) hero . historyCe = hero . ce ;
hero . ce = heroCe ;
if ( hero . historyCe < hero . ce ) hero . historyCe = hero . ce ;
return incCe ;
return incCe ;
}
}
//修改并下发战力
//修改并下发战力
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 ) ;
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 CeAttrRole ( ) ;
if ( ! role . globalCeAttr ) role . globalCeAttr = new CeAttr ( ) ;
let originalAttr = role . globalCeAttr ;
await reCalRoleAttr ( heros , role . globalCeAttr , type , args ) ;
let reIncAttr : CeAttrRole = { } ; // role表属性增量
if ( type == HERO_SYSTEM_TYPE . INIT ) {
reIncAttr = calRoleInitIncAttr ( heros , role . globalCeAttr ) ; // 全局变量增
} else if ( type == HERO_SYSTEM_TYPE . ADD_SKIN ) {
reIncAttr = calHeroAddSkin ( args , role . globalCeAttr ) ;
} else if ( type == HERO_SYSTEM_TYPE . SCHOOL ) {
reIncAttr = calSchoolAddAttr ( heros , args [ 0 ] , args [ 1 ] , args [ 2 ] , role . globalCeAttr ) ;
} else if ( type == HERO_SYSTEM_TYPE . SCROLL ) {
reIncAttr = calScrollAddAttr ( heros , args [ 0 ] , role . globalCeAttr ) ;
} else if ( type == HERO_SYSTEM_TYPE . STAR || type == HERO_SYSTEM_TYPE . COLORSTAR || type == HERO_SYSTEM_TYPE . QUALITY ) { // 升星时,在百家学宫中部署的武将加成会同时增加
reIncAttr = await calSchoolStarIncAttr ( heros , type , args , role . globalCeAttr ) ;
}
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 ) ;
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 = reIncAttr [ attrName ] . fixUp * HERO_CE_RATIO + hero . ceAttr [ attrName ] . base * ( HERO_CE_RATIO + reIncAttr [ attrName ] . ratioUp ) - oldcCe ;
incHeroCe += incArr * getAttrCeRatio ( attrName ) ;
}
incPlayerCe += incHeroCe ;
incPlayerCe += incHeroCe ;
hero . ce += incHeroCe ;
hero . ce += incHeroCe ;
await HeroModel . updateHeroInfo ( roleId , hero . hid , hero ) ;
await HeroModel . updateHeroInfo ( roleId , hero . hid , hero ) ;
pushHeros . push ( {
pushHeros . push ( {
hid : hero.hid ,
hid : hero.hid ,
ce : reduceCe ( hero . ce ) ,
ce : reduceCe ( hero . ce ) ,
incHeroCe : reduceCe ( incHeroCe ) ,
incHeroCe : reduceCe ( incHeroCe ) ,
} ) ;
} ) ;
}
}
for ( let attrName in reIncAttr ) {
role . globalCeAttr [ attrName ] . fixUp = reIncAttr [ attrName ] . fixUp ;
role . globalCeAttr [ attrName ] . ratioUp = reIncAttr [ attrName ] . ratioUp ;
}
role . ce += incPlayerCe ;
role . ce += incPlayerCe ;
await RoleModel . updateRoleInfo ( roleId , { globalCeAttr : role.globalCeAttr , ce : role.ce } ) ;
await RoleModel . updateRoleInfo ( roleId , { globalCeAttr : role.globalCeAttr , ce : role.ce } ) ;
return { pushHeros , role }
return { pushHeros , role }
}
}
// 初始战力
// 初始战力
@@ -135,7 +122,7 @@ export function calHeroInitIncAttr(hero: HeroType, addSeidList: Array<number>, r
let hero1 = combineHeroCeAttr ( hero , res1 ) ;
let hero1 = combineHeroCeAttr ( hero , res1 ) ;
let curSkin = hero . skins . find ( cur = > cur . enable ) ;
let curSkin = hero . skins . find ( cur = > cur . enable ) ;
let res2 = calHeroWearSkinIncAttr ( hero1 , [ curSkin?curSkin.id : 0 , 0 ] , addSeidList , removeSeidList , true ) ;
let res2 = calHeroWearSkinIncAttr ( hero1 , [ curSkin ? curSkin.id : 0 , 0 ] , addSeidList , removeSeidList , true ) ;
let hero2 = combineHeroCeAttr ( hero , res2 ) ;
let hero2 = combineHeroCeAttr ( hero , res2 ) ;
calHeroJobStageUpIncAttr ( hero2 , [ 0 ] , addSeidList , removeSeidList ) ;
calHeroJobStageUpIncAttr ( hero2 , [ 0 ] , addSeidList , removeSeidList ) ;
@@ -149,15 +136,15 @@ export function calHeroInitIncAttr(hero: HeroType, addSeidList: Array<number>, r
function combineAttrResult ( target : CeAttr , origin : CeAttr ) {
function combineAttrResult ( target : CeAttr , origin : CeAttr ) {
for ( let attrName in origin ) {
for ( let attrName in origin ) {
for ( let attrKey in origin [ attrName ] ) {
for ( let attrKey in origin [ attrName ] ) {
if ( ! target . hasOwnProperty ( attrName ) ) {
if ( ! target . hasOwnProperty ( attrName ) ) {
target [ attrName ] = { } ;
target [ attrName ] = { } ;
}
}
if ( ! target [ attrName ] . hasOwnProperty ( attrKey ) ) {
if ( ! target [ attrName ] . hasOwnProperty ( attrKey ) ) {
target [ attrName ] [ attrKey ] = 0 ;
target [ attrName ] [ attrKey ] = 0 ;
}
}
if ( origin [ attrName ] [ attrKey ] > target [ attrName ] [ attrKey ] ) {
if ( origin [ attrName ] [ attrKey ] > target [ attrName ] [ attrKey ] ) {
target [ attrName ] [ attrKey ] = origin [ attrName ] [ attrKey ] ;
target [ attrName ] [ attrKey ] = origin [ attrName ] [ attrKey ] ;
}
}
}
}
@@ -166,8 +153,8 @@ function combineAttrResult(target: CeAttr, origin: CeAttr) {
export function calRoleInitIncAttr ( heros : HeroType [ ] , globalCeAttr : CeAttrRole ) {
export function calRoleInitIncAttr ( heros : HeroType [ ] , globalCeAttr : CeAttrRole ) {
let args = new Array < number > ( ) ;
let args = new Array < number > ( ) ;
for ( let hero of heros ) {
for ( let hero of heros ) {
for ( let skin of hero . skins ) {
for ( let skin of hero . skins ) {
args . push ( skin . id ) ;
args . push ( skin . id ) ;
}
}
}
}
@@ -178,12 +165,12 @@ export function calRoleInitIncAttr(heros: HeroType[], globalCeAttr: CeAttrRole)
// 将hero的ceAttr暂时更新,不更新在originalHero本体上
// 将hero的ceAttr暂时更新,不更新在originalHero本体上
function combineHeroCeAttr ( originalHero : HeroType , result : CeAttr ) {
function combineHeroCeAttr ( originalHero : HeroType , result : CeAttr ) {
let hero = deepCopy ( originalHero ) ;
let hero = deepCopy ( originalHero ) ;
if ( ! hero . ceAttr ) hero . ceAttr = new CeAttr ( ) ;
if ( ! hero . ceAttr ) hero . ceAttr = new CeAttr ( ) ;
for ( let attrName in result ) {
for ( let attrName in result ) {
if ( ! result [ attrName ] ) continue ;
if ( ! result [ attrName ] ) continue ;
if ( ! hero . ceAttr [ attrName ] ) hero . ceAttr [ attrName ] = new CeAttrData ( ) ;
if ( ! hero . ceAttr [ attrName ] ) hero . ceAttr [ attrName ] = new CeAttrData ( ) ;
for ( let attrKey in result [ attrName ] ) {
for ( let attrKey in result [ attrName ] ) {
hero . ceAttr [ attrName ] [ attrKey ] = parseInt ( result [ attrName ] [ attrKey ] || 0 ) ;
hero . ceAttr [ attrName ] [ attrKey ] = parseInt ( result [ attrName ] [ attrKey ] || 0 ) ;
}
}
}
}
delete hero . _id ;
delete hero . _id ;
@@ -199,13 +186,13 @@ function combineHeroCeAttr(originalHero: HeroType, result: CeAttr) {
* @param addSeidList number[] 用于更新被动
* @param addSeidList number[] 用于更新被动
* @param removeSeidList number[] 用于更新被动
* @param removeSeidList number[] 用于更新被动
*/
*/
export function calHeroStarIncAttr ( hero : HeroType , type : number , hid : number , args : number [ ] , addSeidList : Array < number > , removeSeidList : Array < number > ) {
export function calHeroStarIncAttr ( hero : HeroType , type : number , hid : number , args : number [ ] , addSeidList : Array < number > , removeSeidList : Array < number > ) {
let isInit = type == HERO_SYSTEM_TYPE . INIT ;
let isInit = type == HERO_SYSTEM_TYPE . INIT ;
let { star , starStage , quality , colorStar , colorStarStage , ceAttr , skins } = hero ;
let { star , starStage , quality , colorStar , colorStarStage , ceAttr , skins } = hero ;
let originStar = star , originColorStar = colorStar ;
let originStar = star , originColorStar = colorStar ;
let res : CeAttr = { } ;
let res : CeAttr = { } ;
if ( hero . hid != hid ) return res ;
if ( hero . hid != hid ) return res ;
const dicHero = gameData . hero . get ( hero . hid ) ;
const dicHero = gameData . hero . get ( hero . hid ) ;
@@ -215,25 +202,25 @@ export function calHeroStarIncAttr (hero: HeroType, type: number, hid: number, a
} else {
} else {
if ( starStage == ABI_STAGE . START && ! isInit ) originStar = star - 1 ;
if ( starStage == ABI_STAGE . START && ! isInit ) originStar = star - 1 ;
}
}
const dicStar = isWake ? getHeroWakeByQuality ( quality , originColorStar ) : getHeroStarByQuality ( quality , originStar ) ; // 星级表
const dicStar = isWake ? getHeroWakeByQuality ( quality , originColorStar ) : getHeroStarByQuality ( quality , originStar ) ; // 星级表
let stages = new Array < number > ( ) ; // 需要升级的阶
let stages = new Array < number > ( ) ; // 需要升级的阶
if ( type == HERO_SYSTEM_TYPE . INIT ) {
if ( type == HERO_SYSTEM_TYPE . INIT ) {
stages = getAllAttrStage ( ) ;
stages = getAllAttrStage ( ) ;
} else if ( type == HERO_SYSTEM_TYPE . LVUP ) {
} else if ( type == HERO_SYSTEM_TYPE . LVUP ) {
stages = getAllAttrStage ( ) ;
stages = getAllAttrStage ( ) ;
} else if ( type == HERO_SYSTEM_TYPE . STAR ) {
} else if ( type == HERO_SYSTEM_TYPE . STAR ) {
stages = [ args [ 0 ] ? ABI_STAGE.END : starStage ] ;
stages = [ args [ 0 ] ? ABI_STAGE.END : starStage ] ;
} else if ( type == HERO_SYSTEM_TYPE . QUALITY ) {
} else if ( type == HERO_SYSTEM_TYPE . QUALITY ) {
stages = getAllAttrStage ( ) ;
stages = getAllAttrStage ( ) ;
} else if ( type = HERO_SYSTEM_TYPE . COLORSTAR ) {
} else if ( type = HERO_SYSTEM_TYPE . COLORSTAR ) {
if ( args [ 1 ] ) { // 首次觉醒
if ( args [ 1 ] ) { // 首次觉醒
stages = getAllAttrStage ( ) ;
stages = getAllAttrStage ( ) ;
} else {
} else {
stages . push ( args [ 0 ] ? ABI_STAGE.END : hero.colorStarStage )
stages . push ( args [ 0 ] ? ABI_STAGE.END : hero.colorStarStage )
}
}
}
}
for ( let stage of stages ) {
for ( let stage of stages ) {
let targetAttrId = getFieldByStage ( stage , hero . job ) ; // 转换为17维的属性id
let targetAttrId = getFieldByStage ( stage , hero . job ) ; // 转换为17维的属性id
let heroAttr = dicHero . baseAbilityArr . get ( targetAttrId ) ; // 武将表hp等
let heroAttr = dicHero . baseAbilityArr . get ( targetAttrId ) ; // 武将表hp等
@@ -244,23 +231,23 @@ export function calHeroStarIncAttr (hero: HeroType, type: number, hid: number, a
}
}
let newBase = ( heroAttr + hero . lv * ( heroUpAttr + starUp ) ) * HERO_CE_RATIO ;
let newBase = ( heroAttr + hero . lv * ( heroUpAttr + starUp ) ) * HERO_CE_RATIO ;
let field = getAtrrNameById ( targetAttrId ) ;
let field = getAtrrNameById ( targetAttrId ) ;
let ceAttrData : CeAttrData = ceAttr [ field ] || new CeAttrData ( ) ; // 存表中的属性下的base, fixup, ratioup
let ceAttrData : CeAttrData = ceAttr [ field ] || new CeAttrData ( ) ; // 存表中的属性下的base, fixup, ratioup
let { ratioUp = 0 , fixUp = 0 } = ceAttrData ;
let { ratioUp = 0 , fixUp = 0 } = ceAttrData ;
res [ field ] = { base : newBase , ratioUp , fixUp } ; // base变动,增量为△base * ratio + 0
res [ field ] = { base : newBase , ratioUp , fixUp } ; // base变动,增量为△base * ratio + 0
}
}
// 解锁技能
// 解锁技能
let curSkin = skins . find ( cur = > cur . enable ) ;
let curSkin = skins . find ( cur = > cur . enable ) ;
let curSeidList = getSeidListOfFashion ( curSkin . id , star , colorStar ) ;
let curSeidList = getSeidListOfFashion ( curSkin . id , star , colorStar ) ;
let preSeidList = getSeidListOfFashion ( curSkin . id , isInit?0 :originStar , isInit?0 : originColorStar ) ;
let preSeidList = getSeidListOfFashion ( curSkin . id , isInit ? 0 : originStar , isInit ? 0 : originColorStar ) ;
for ( let [ type , seid ] of curSeidList ) {
for ( let [ type , seid ] of curSeidList ) {
if ( ! preSeidList . has ( type ) ) {
if ( ! preSeidList . has ( type ) ) {
addSeidList . push ( seid , 0 ) ;
addSeidList . push ( seid , 0 ) ;
}
}
}
}
for ( let [ type , seid ] of preSeidList ) {
for ( let [ type , seid ] of preSeidList ) {
console . log ( type , seid )
console . log ( type , seid )
if ( ! curSeidList . has ( type ) ) {
if ( ! curSeidList . has ( type ) ) {
removeSeidList . push ( seid , 0 ) ;
removeSeidList . push ( seid , 0 ) ;
}
}
}
}
@@ -270,17 +257,17 @@ export function calHeroStarIncAttr (hero: HeroType, type: number, hid: number, a
function getSeidListOfFashion ( fashionid : number , originStar : number , originColorStar : number ) {
function getSeidListOfFashion ( fashionid : number , originStar : number , originColorStar : number ) {
let seidList = new Map < number , number > ( ) ; // type => seid
let seidList = new Map < number , number > ( ) ; // type => seid
if ( ! gameData . fashion . has ( fashionid ) ) return seidList ;
if ( ! gameData . fashion . has ( fashionid ) ) return seidList ;
let { skillId } = gameData . fashion . get ( fashionid ) ;
let { skillId } = gameData . fashion . get ( fashionid ) ;
let { starSeidArr , colorStarSeidArr } = gameData . heroSkill . get ( skillId ) ;
let { starSeidArr , colorStarSeidArr } = gameData . heroSkill . get ( skillId ) ;
for ( let { star , value , type } of starSeidArr ) {
for ( let { star , value , type } of starSeidArr ) {
if ( originStar >= star ) {
if ( originStar >= star ) {
seidList . set ( type , value ) ;
seidList . set ( type , value ) ;
}
}
}
}
for ( let { star , value , type } of colorStarSeidArr ) {
for ( let { star , value , type } of colorStarSeidArr ) {
if ( originColorStar >= star ) {
if ( originColorStar >= star ) {
seidList . set ( type , value ) ;
seidList . set ( type , value ) ;
}
}
}
}
@@ -291,7 +278,7 @@ function getSeidListOfFashion(fashionid: number, originStar: number, originColor
export function calHeroTrainIncAttr ( hero : HeroType ) {
export function calHeroTrainIncAttr ( hero : HeroType ) {
let res : CeAttr = { } ;
let res : CeAttr = { } ;
let attrName : string = getAttrNameByJobStage ( hero . jobStage ) ;
let attrName : string = getAttrNameByJobStage ( hero . jobStage ) ;
res [ attrName ] = { fixUp : hero.ceAttr [ attrName ] . fixUp , base : hero.ceAttr [ attrName ] . base , ratioUp : hero.ceAttr [ attrName ] . ratioUp } ;
res [ attrName ] = { fixUp : hero.ceAttr [ attrName ] . fixUp , base : hero.ceAttr [ attrName ] . base , ratioUp : hero.ceAttr [ attrName ] . ratioUp } ;
let currentJob = gameData . job . get ( hero . job ) ;
let currentJob = gameData . job . get ( hero . job ) ;
if ( currentJob . grade > 1 ) {
if ( currentJob . grade > 1 ) {
let jobGradeAndClass = getJobByGradeAndClass ( currentJob . job_class , currentJob . grade - 1 ) ;
let jobGradeAndClass = getJobByGradeAndClass ( currentJob . job_class , currentJob . grade - 1 ) ;
@@ -306,7 +293,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 ] ) || { seid : [ ] } ;
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 ) ;
@@ -329,31 +316,31 @@ export function calHeroWearSkinIncAttr(hero: HeroType, args: Array<number>, addS
let addSkin = gameData . fashion . get ( args [ 0 ] ) ;
let addSkin = gameData . fashion . get ( args [ 0 ] ) ;
let delSkin = gameData . fashion . get ( args [ 1 ] ) ;
let delSkin = gameData . fashion . get ( args [ 1 ] ) ;
let attrName : string ;
let attrName : string ;
if ( delSkin ) {
if ( delSkin ) {
for ( let attr of delSkin . actorAttr ) {
for ( let attr of delSkin . actorAttr ) {
attrName = getAtrrNameById ( attr . id ) ;
attrName = getAtrrNameById ( attr . id ) ;
res [ attrName ] = { fixUp : hero.ceAttr [ attrName ] . fixUp , base : hero.ceAttr [ attrName ] . base , ratioUp : hero.ceAttr [ attrName ] . ratioUp } ;
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 ) {
for ( let attr of addSkin . actorAttr ) {
attrName = getAtrrNameById ( attr . id ) ;
attrName = getAtrrNameById ( attr . id ) ;
res [ attrName ] = { fixUp : hero.ceAttr [ attrName ] . fixUp , base : hero.ceAttr [ attrName ] . base , ratioUp : hero.ceAttr [ attrName ] . ratioUp } ;
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 ;
}
}
if ( ! isInit ) { // 初始的时候,这一段技能在calHeroStarIncAttr里计算了,不用重复算
if ( ! isInit ) { // 初始的时候,这一段技能在calHeroStarIncAttr里计算了,不用重复算
let { star , colorStar } = hero ;
let { star , colorStar } = hero ;
let curSeidList = getSeidListOfFashion ( args [ 0 ] , star , colorStar ) ;
let curSeidList = getSeidListOfFashion ( args [ 0 ] , star , colorStar ) ;
let preSeidList = getSeidListOfFashion ( args [ 1 ] , star , colorStar ) ;
let preSeidList = getSeidListOfFashion ( args [ 1 ] , star , colorStar ) ;
for ( let [ type , seid ] of curSeidList ) {
for ( let [ type , seid ] of curSeidList ) {
if ( ! preSeidList . has ( type ) ) {
if ( ! preSeidList . has ( type ) ) {
removeSeidList . push ( seid , 0 ) ;
removeSeidList . push ( seid , 0 ) ;
}
}
}
}
for ( let [ type , seid ] of preSeidList ) {
for ( let [ type , seid ] of preSeidList ) {
if ( ! curSeidList . has ( type ) ) {
if ( ! curSeidList . has ( type ) ) {
addSeidList . push ( seid , 0 ) ;
addSeidList . push ( seid , 0 ) ;
}
}
}
}
@@ -372,15 +359,15 @@ export function calHeroConectIncAttr(hero: HeroType, args: Array<number>) {
let currentShip = getFriendShipById ( shipId , level ) ;
let currentShip = getFriendShipById ( shipId , level ) ;
for ( let attr of currentShip . attributes ) {
for ( let attr of currentShip . attributes ) {
attrName = getAtrrNameById ( attr . id ) ;
attrName = getAtrrNameById ( attr . id ) ;
res [ attrName ] = { fixUp : hero.ceAttr [ attrName ] . fixUp , base : hero.ceAttr [ attrName ] . base , ratioUp : hero.ceAttr [ attrName ] . ratioUp } ;
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 + fiendShipLevel . add ) ;
res [ attrName ] . fixUp += attr . number * ( HERO_CE_RATIO + fiendShipLevel . add ) ;
}
}
if ( level > 1 ) {
if ( level > 1 ) {
let lastShip = getFriendShipById ( shipId , level - 1 ) ;
let lastShip = getFriendShipById ( shipId , level - 1 ) ;
for ( let attr of lastShip . attributes ) {
for ( let attr of lastShip . attributes ) {
attrName = getAtrrNameById ( attr . id ) ;
attrName = getAtrrNameById ( attr . id ) ;
res [ attrName ] = { fixUp : hero.ceAttr [ attrName ] . fixUp , base : hero.ceAttr [ attrName ] . base , ratioUp : hero.ceAttr [ attrName ] . ratioUp } ;
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 + fiendShipLevel . add ) ;
res [ attrName ] . fixUp -= attr . number * ( HERO_CE_RATIO + fiendShipLevel . add ) ;
}
}
}
}
return res ;
return res ;
@@ -400,8 +387,8 @@ export function calHeroFavourUpIncAttr(hero: HeroType, args: Array<number>) {
let heroShip = getFriendShipById ( connect . shipId , connect . level ) ;
let heroShip = getFriendShipById ( connect . shipId , connect . level ) ;
for ( let attr of heroShip . attributes ) {
for ( let attr of heroShip . attributes ) {
attrName = getAtrrNameById ( attr . id ) ;
attrName = getAtrrNameById ( attr . id ) ;
res [ attrName ] = { fixUp : hero.ceAttr [ attrName ] . fixUp , base : hero.ceAttr [ attrName ] . base , ratioUp : hero.ceAttr [ attrName ] . ratioUp } ;
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 + difAdd ) ;
res [ attrName ] . fixUp += attr . number * ( HERO_CE_RATIO + difAdd ) ;
}
}
}
}
return res ;
return res ;
@@ -416,17 +403,17 @@ export function calEquipPutOnOffIncAttr(hero: HeroType, args: Array<number>, add
let { ePlace } = hero ;
let { ePlace } = hero ;
let suits = new Map < number , number > ( ) ;
let suits = new Map < number , number > ( ) ;
for ( let { equip } of ePlace ) {
for ( let { equip } of ePlace ) {
if ( equip ) {
if ( equip ) {
let e = < EquipType > equip ;
let e = < EquipType > equip ;
for ( let { seid , rand } of e . randSe ) {
for ( let { seid , rand } of e . randSe ) {
addSeidList . push ( seid , rand ) ;
addSeidList . push ( seid , rand ) ;
}
}
if ( e . suitId > 0 ) {
if ( e . suitId > 0 ) {
if ( suits . has ( e . suitId ) ) {
if ( suits . has ( e . suitId ) ) {
suits . set ( e . suitId , 1 ) ;
} else {
suits . set ( e . suitId , suits . get ( e . suitId ) + 1 ) ;
suits . set ( e . suitId , suits . get ( e . suitId ) + 1 ) ;
} else {
suits . set ( e . suitId , 1 ) ;
}
}
}
}
}
}
@@ -434,14 +421,14 @@ export function calEquipPutOnOffIncAttr(hero: HeroType, args: Array<number>, add
suits . forEach ( ( suitId , count ) = > {
suits . forEach ( ( suitId , count ) = > {
let { effect } = gameData . suit . get ( suitId ) ;
let { effect } = gameData . suit . get ( suitId ) ;
for ( let e of effect ) {
for ( let e of effect ) {
if ( count >= e . count ) {
if ( count >= e . count ) {
addSeidList . push ( e . seid , 0 ) ;
addSeidList . push ( e . seid , 0 ) ;
}
}
}
}
} ) ;
} ) ;
for ( let arg of args ) {
for ( let arg of args ) {
removeSeidList . push ( arg )
removeSeidList . push ( arg )
}
}
@@ -454,25 +441,25 @@ export function calEquipSeids(hero: HeroType) {
let { ePlace } = hero ;
let { ePlace } = hero ;
let suits = new Map < number , number > ( ) ;
let suits = new Map < number , number > ( ) ;
for ( let { equip } of ePlace ) {
for ( let { equip } of ePlace ) {
if ( equip ) {
if ( equip ) {
let e = < EquipType > equip ;
let e = < EquipType > equip ;
for ( let { seid , rand } of e . randSe ) {
for ( let { seid , rand } of e . randSe ) {
seids . push ( seid , rand ) ;
seids . push ( seid , rand ) ;
}
}
if ( e . suitId > 0 ) {
if ( e . suitId > 0 ) {
if ( suits . has ( e . suitId ) ) {
if ( suits . has ( e . suitId ) ) {
suits . set ( e . suitId , 1 ) ;
} else {
suits . set ( e . suitId , suits . get ( e . suitId ) + 1 ) ;
suits . set ( e . suitId , suits . get ( e . suitId ) + 1 ) ;
} else {
suits . set ( e . suitId , 1 ) ;
}
}
}
}
}
}
}
}
suits . forEach ( ( suitId , count ) = > {
suits . forEach ( ( suitId , count ) = > {
let { effect } = gameData . suit . get ( suitId ) ;
let { effect } = gameData . suit . get ( suitId ) ;
for ( let e of effect ) {
for ( let e of effect ) {
if ( count >= e . count ) {
if ( count >= e . count ) {
seids . push ( e . seid , 0 ) ;
seids . push ( e . seid , 0 ) ;
}
}
}
}
@@ -487,21 +474,21 @@ export function calHeroEquipIncAttr(hero: HeroType) {
let attrResult = new CeAttrNumber ( ) ;
let attrResult = new CeAttrNumber ( ) ;
for ( let { equip , lv , refineLv } of ePlace ) {
for ( let { equip , lv , refineLv } of ePlace ) {
if ( equip ) {
if ( equip ) {
let e = < EquipType > equip ;
let e = < EquipType > equip ;
let dicGoods = gameData . goods . get ( e . id ) ;
let dicGoods = gameData . goods . get ( e . id ) ;
let { goodsAbility , goodsAbilityUp } = dicGoods ;
let { goodsAbility , goodsAbilityUp } = dicGoods ;
let dicRefine = gameData . refine . get ( refineLv ) ;
let dicRefine = gameData . refine . get ( refineLv ) ;
let jewel = new Map < number , number > ( ) ;
let jewel = new Map < number , number > ( ) ;
for ( let { jewel : jewelId } of e . holes ) {
for ( let { jewel : jewelId } of e . holes ) {
if ( jewelId > 0 ) {
if ( jewelId > 0 ) {
let g = gameData . goods . get ( jewelId ) ;
let g = gameData . goods . get ( jewelId ) ;
if ( g ) {
if ( g ) {
let jGoods = g . goodsAbility ;
let jGoods = g . goodsAbility ;
jGoods . forEach ( ( value , key ) = > {
jGoods . forEach ( ( value , key ) = > {
if ( jewel . has ( key ) ) {
if ( jewel . has ( key ) ) {
jewel . set ( key , value ) ;
jewel . set ( key , value ) ;
} else {
} else {
jewel . set ( key , jewel . get ( key ) + value ) ;
jewel . set ( key , jewel . get ( key ) + value ) ;
@@ -511,94 +498,94 @@ export function calHeroEquipIncAttr(hero: HeroType) {
}
}
}
}
for ( let i = ABI_TYPE . ABI_HP ; i < ABI_TYPE . ABI_MAX ; i ++ ) {
for ( let i = ABI_TYPE . ABI_HP ; i < ABI_TYPE . ABI_MAX ; i ++ ) {
if ( i == ABI_TYPE . ABI_SPEED || i == ABI_TYPE . ABI_AP ) continue ;
if ( i == ABI_TYPE . ABI_SPEED || i == ABI_TYPE . ABI_AP ) continue ;
let attrName = getAtrrNameById ( i ) ;
let attrName = getAtrrNameById ( i ) ;
// console.log('***', i, attrName);
// console.log('***', i, attrName);
let value1 = goodsAbility . get ( i ) || 0 * ( HERO_CE_RATIO + e . randRange ) ;
let value1 = goodsAbility . get ( i ) || 0 * ( HERO_CE_RATIO + e . randRange ) ;
// console.log('基础值', value1);
// console.log('基础值', value1);
let valueup = goodsAbilityUp . get ( i ) || 0 ;
let valueup = goodsAbilityUp . get ( i ) || 0 ;
// console.log('成长', lv, valueup);
// console.log('成长', lv, valueup);
let valueRefine = dicRefine?dicRefine.upPercent : 0 ;
let valueRefine = dicRefine ? dicRefine.upPercent : 0 ;
// console.log('refine', dicRefine?dicRefine.upPercent:0 );
// console.log('refine', dicRefine?dicRefine.upPercent:0 );
let valueJewel = jewel . get ( i ) || 0 ;
let valueJewel = jewel . get ( i ) || 0 ;
// console.log('jewel', valueJewel);
// console.log('jewel', valueJewel);
let attr = ( value1 + lv * valueup ) * ( HERO_CE_RATIO + valueRefine ) + valueJewel * HERO_CE_RATIO ;
let attr = ( value1 + lv * valueup ) * ( HERO_CE_RATIO + valueRefine ) + valueJewel * HERO_CE_RATIO ;
attrResult [ attrName ] += attr ;
attrResult [ attrName ] += attr ;
}
}
}
}
}
}
for ( let attrName in attrResult ) {
for ( let attrName in attrResult ) {
let originalCe = hero . ceAttr [ attrName ] . equipUp || 0 ;
let originalCe = hero . ceAttr [ attrName ] . equipUp || 0 ;
console . log ( '装备战力:' , attrName , attrResult [ attrName ] * HERO_CE_RATIO , originalCe ) ;
console . log ( '装备战力:' , attrName , attrResult [ attrName ] * HERO_CE_RATIO , originalCe ) ;
res [ attrName ] = { fixUp : hero.ceAttr [ attrName ] . fixUp , base : hero.ceAttr [ attrName ] . base , ratioUp : hero.ceAttr [ attrName ] . ratioUp , equipUp : originalCe } ;
res [ attrName ] = { fixUp : hero.ceAttr [ attrName ] . fixUp , base : hero.ceAttr [ attrName ] . base , ratioUp : hero.ceAttr [ attrName ] . ratioUp , equipUp : originalCe } ;
res [ attrName ] . equipUp += attrResult [ attrName ] * HERO_CE_RATIO - originalCe ;
res [ attrName ] . equipUp += attrResult [ attrName ] * HERO_CE_RATIO - originalCe ;
}
}
return res ;
return res ;
}
}
// 洗炼
// 洗炼
export function calRestrengthenIncAttr ( hero : HeroType , ePaceId : number , args : Array < number > , addSeidList : Array < number > , removeSeidList : Array < number > ) {
export function calRestrengthenIncAttr ( hero : HeroType , ePaceId : number , args : Array < number > , addSeidList : Array < number > , removeSeidList : Array < number > ) {
let res : CeAttr = { } ;
let res : CeAttr = { } ;
let { ePlace } = hero ;
let { ePlace } = hero ;
let curPlace = ePlace . find ( cur = > cur . id == ePaceId ) ;
let curPlace = ePlace . find ( cur = > cur . id == ePaceId ) ;
if ( curPlace && curPlace . equip ) {
if ( curPlace && curPlace . equip ) {
let e = < EquipType > curPlace . equip ;
let e = < EquipType > curPlace . equip ;
for ( let { seid , rand } of e . randSe ) {
for ( let { seid , rand } of e . randSe ) {
addSeidList . push ( seid , rand ) ;
addSeidList . push ( seid , rand ) ;
}
}
}
}
for ( let arg of args ) { removeSeidList . push ( arg ) }
for ( let arg of args ) { removeSeidList . push ( arg ) }
return res
return res
}
}
// 添加技能增加的被动属性
// 添加技能增加的被动属性
function addSeidEffect ( reIncAttr : CeAttr , heroCeAttr : CeAttr , addSeidList : Array < number > , removeSeidList : Array < number > ) {
function addSeidEffect ( reIncAttr : CeAttr , heroCeAttr : CeAttr , addSeidList : Array < number > , removeSeidList : Array < number > ) {
console . log ( 'addSeidList' , addSeidList )
console . log ( 'addSeidList' , addSeidList )
console . log ( 'removeSeidList' , removeSeidList )
console . log ( 'removeSeidList' , removeSeidList )
let otiginalSeidList = [
let otiginalSeidList = [
{ list : addSeidList , multi : 1 } ,
{ list : addSeidList , multi : 1 } ,
{ list : removeSeidList , multi : - 1 }
{ list : removeSeidList , multi : - 1 }
] ;
] ;
for ( let { list , multi } of otiginalSeidList ) {
for ( let { list , multi } of otiginalSeidList ) {
let effectList = new Array < DicSe > ( ) ; // any: dic_zyz_se表内容
let effectList = new Array < DicSe > ( ) ; // any: dic_zyz_se表内容
for ( let ii = 0 ; ii < list . length ; ii += 2 ) {
for ( let ii = 0 ; ii < list . length ; ii += 2 ) {
let seid = list [ ii ] ;
let seid = list [ ii ] ;
let rand = list [ ii + 1 ] || 0 ;
let rand = list [ ii + 1 ] || 0 ;
let dicSeid : DicSe | DicRandomEffectPool = gameData . se . get ( seid ) ;
let dicSeid : DicSe | DicRandomEffectPool = gameData . se . get ( seid ) ;
if ( ! dicSeid ) dicSeid = gameData . randomEffectPool . get ( seid ) ;
if ( ! dicSeid ) dicSeid = gameData . randomEffectPool . get ( seid ) ;
if ( dicSeid && dicSeid . id > 0 ) {
if ( dicSeid && dicSeid . id > 0 ) {
addSeid ( effectList , dicSeid . id , rand , dicSeid . gainValueArr )
addSeid ( effectList , dicSeid . id , rand , dicSeid . gainValueArr )
}
}
}
}
for ( let { type , gainValueArr : [ ability , value ] } of effectList ) {
for ( let { type , gainValueArr : [ ability , value ] } of effectList ) {
let attrName = getAtrrNameById ( ability ) ;
let attrName = getAtrrNameById ( ability ) ;
if ( ! attrName ) continue ;
if ( ! attrName ) continue ;
if ( type == SEID_TYPE . TYPE101 ) { // 加值
if ( type == SEID_TYPE . TYPE101 ) { // 加值
if ( ! reIncAttr [ attrName ] ) {
if ( ! reIncAttr [ attrName ] ) {
reIncAttr [ attrName ] = deepCopy ( heroCeAttr [ attrName ] ) ;
reIncAttr [ attrName ] = deepCopy ( heroCeAttr [ attrName ] ) ;
}
}
if ( ! reIncAttr [ attrName ] ) {
if ( ! reIncAttr [ attrName ] ) {
delete reIncAttr [ attrName ] ;
delete reIncAttr [ attrName ] ;
continue ;
continue ;
}
}
reIncAttr [ attrName ] . fixUp += value * multi * HERO_CE_RATIO ;
reIncAttr [ attrName ] . fixUp += value * multi * HERO_CE_RATIO ;
delete reIncAttr [ attrName ] . _id ;
delete reIncAttr [ attrName ] . _id ;
} else if ( type == SEID_TYPE . TYPE102 ) { // 加百分比
} else if ( type == SEID_TYPE . TYPE102 ) { // 加百分比
if ( ! reIncAttr [ attrName ] ) {
if ( ! reIncAttr [ attrName ] ) {
reIncAttr [ attrName ] = deepCopy ( heroCeAttr [ attrName ] ) ;
reIncAttr [ attrName ] = deepCopy ( heroCeAttr [ attrName ] ) ;
}
}
if ( ! reIncAttr [ attrName ] ) {
if ( ! reIncAttr [ attrName ] ) {
delete reIncAttr [ attrName ] ;
delete reIncAttr [ attrName ] ;
continue ;
continue ;
}
}
@@ -610,22 +597,22 @@ function addSeidEffect(reIncAttr: CeAttr, heroCeAttr: CeAttr,addSeidList: Array<
}
}
// 获取dic_zyz_se内容
// 获取dic_zyz_se内容
function addSeid ( effectList : Array < any > , seidId :number , rand : number , seidValue = new Array < number > ( ) ) {
function addSeid ( effectList : Array < any > , seidId : number , rand : number , seidValue = new Array < number > ( ) ) {
// console.log('addSeidEffect', seidId, seidValue)
// console.log('addSeidEffect', seidId, seidValue)
let curSeid : DicSe | DicRandomEffectPool = gameData . se . get ( seidId ) ;
let curSeid : DicSe | DicRandomEffectPool = gameData . se . get ( seidId ) ;
if ( ! curSeid ) curSeid = gameData . randomEffectPool . get ( seidId ) ;
if ( ! curSeid ) curSeid = gameData . randomEffectPool . get ( seidId ) ;
if ( ! curSeid ) { console . log ( "seidId not found:" + seidId ) ; return ; }
if ( ! curSeid ) { console . log ( "seidId not found:" + seidId ) ; return ; }
if ( ! seidValue ) seidValue = curSeid . gainValueArr ;
if ( ! seidValue ) seidValue = curSeid . gainValueArr ;
if ( curSeid . type === SEID_TYPE . TYPE999 ) {
if ( curSeid . type === SEID_TYPE . TYPE999 ) {
for ( let i = 0 ; i < seidValue . length ; i ++ ) {
for ( let i = 0 ; i < seidValue . length ; i ++ ) {
addSeid ( effectList , seidValue [ i ] , rand ) ;
addSeid ( effectList , seidValue [ i ] , rand ) ;
}
}
return ;
return ;
}
}
effectList . push ( curSeid ) ;
effectList . push ( curSeid ) ;
let seid : DicSe | DicRandomEffectPool = deepCopy ( curSeid ) ;
let seid : DicSe | DicRandomEffectPool = deepCopy ( curSeid ) ;
if ( curSeid . index > 0 ) {
if ( curSeid . index > 0 ) {
seid . gainValueArr [ curSeid . index - 1 ] = rand ;
seid . gainValueArr [ curSeid . index - 1 ] = rand ;
}
}
effectList . push ( seid ) ;
effectList . push ( seid ) ;
@@ -641,7 +628,7 @@ function calHeroCeWhenJewelOn(hero: HeroType, args: Array<number>) {
oldGoodInfo = getGoodById ( oldId ) ;
oldGoodInfo = getGoodById ( oldId ) ;
for ( let attrName in JEWEL_ATTR ) {
for ( let attrName in JEWEL_ATTR ) {
if ( ! ! goodInfo [ attrName ] ) {
if ( ! ! goodInfo [ attrName ] ) {
res [ attrName ] = { fixUp : hero.ceAttr [ attrName ] . fixUp , base : hero.ceAttr [ attrName ] . base , ratioUp : hero.ceAttr [ attrName ] . ratioUp } ;
res [ attrName ] = { fixUp : hero.ceAttr [ attrName ] . fixUp , base : hero.ceAttr [ attrName ] . base , ratioUp : hero.ceAttr [ attrName ] . ratioUp } ;
res [ attrName ] . fixUp += goodInfo [ attrName ] ;
res [ attrName ] . fixUp += goodInfo [ attrName ] ;
if ( oldGoodInfo )
if ( oldGoodInfo )
res [ attrName ] . fixUp -= oldGoodInfo [ attrName ] ;
res [ attrName ] . fixUp -= oldGoodInfo [ attrName ] ;
@@ -649,13 +636,14 @@ function calHeroCeWhenJewelOn(hero: HeroType, args: Array<number>) {
}
}
return res ;
return res ;
}
}
function calHeroCeWhenJewelOff ( hero : HeroType , args : Array < number > ) {
function calHeroCeWhenJewelOff ( hero : HeroType , args : Array < number > ) {
let res : CeAttr = { } ;
let res : CeAttr = { } ;
for ( let id of args ) {
for ( let id of args ) {
let goodInfo = getGoodById ( id ) ;
let goodInfo = getGoodById ( id ) ;
for ( let attrName in JEWEL_ATTR ) {
for ( let attrName in JEWEL_ATTR ) {
if ( ! ! goodInfo [ attrName ] ) {
if ( ! ! goodInfo [ attrName ] ) {
res [ attrName ] = { fixUp : hero.ceAttr [ attrName ] . fixUp , base : hero.ceAttr [ attrName ] . base , ratioUp : hero.ceAttr [ attrName ] . ratioUp } ;
res [ attrName ] = { fixUp : hero.ceAttr [ attrName ] . fixUp , base : hero.ceAttr [ attrName ] . base , ratioUp : hero.ceAttr [ attrName ] . ratioUp } ;
res [ attrName ] . fixUp -= goodInfo [ attrName ] ;
res [ attrName ] . fixUp -= goodInfo [ attrName ] ;
}
}
}
}
@@ -663,49 +651,41 @@ function calHeroCeWhenJewelOff(hero: HeroType, args: Array<number>) {
return res ;
return res ;
}
}
//全局属性加成
//全局属性加成
export async function reCalAllHeroCe ( roleId : string , type : number , args :Array < number > ) {
export async function reCalAllHeroCe ( roleId : string , type : number , args : Array < number > ) {
let reIncAttr : CeAttrRole = { } ;
let role = await RoleModel . findByRoleId ( roleId ) ;
let role = await RoleModel . findByRoleId ( roleId ) ;
if ( ! role . globalCeAttr ) role . globalCeAttr = new CeAttrRole ( ) ;
if ( ! role . globalCeAttr ) role . globalCeAttr = new CeAttr ( ) ;
let pushHeros :Array < { hid :number , ce :number , incHeroCe :number } > = [ ]
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 ;
}
role . ce = 0 ;
let heros = await HeroModel . findByRole ( roleId ) ;
let heros = await HeroModel . findByRole ( roleId ) ;
await reCalRoleAttr ( heros , role . globalCeAttr , type , args ) ;
role . ce = 0 ;
for ( let hero of heros ) {
for ( let hero of heros ) {
let incHeroCe = 0 ;
let heroCe = 0 ;
let heroCe = 0 ;
for ( let attrName in role . globalCeAttr ) {
for ( let attrName in role . globalCeAttr ) {
if ( attrName == '_id' )
if ( attrName == '_id' )
continue ;
continue ;
let heroAttrData : CeAttrData = hero . ceAttr [ attrName ] || new CeAttrData ( ) ;
let heroAttrData : CeAttrData = hero . ceAttr [ attrName ] || new CeAttrData ( ) ;
let globalAttrData : CeAttrDataRole = role . globalCeAttr [ attrName ] ;
let globalAttrData : CeAttrData = role . globalCeAttr [ attrName ] ;
let attrNumber = ( heroAttrData . fixUp + ( heroAttrData . equipUp || 0 ) + globalAttrData . fixUp ) * HERO_CE_RATIO + heroAttrData . base * ( HERO_CE_RATIO + heroAttrData . ratioUp + globalAttrData . ratioUp ) ;
let attrNumber = ( heroAttrData . fixUp + ( heroAttrData . equipUp || 0 ) + globalAttrData . fixUp ) * HERO_CE_RATIO + heroAttrData . base * ( HERO_CE_RATIO + heroAttrData . ratioUp + globalAttrData . ratioUp ) ;
heroCe += attrNumber * getAttrCeRatio ( attrName ) ;
heroCe += attrNumber * getAttrCeRatio ( attrName ) ;
}
}
incHeroCe = heroCe - hero . ce ;
let incHeroCe = heroCe - hero . ce ;
hero . ce = heroCe ;
hero . ce = heroCe ;
role . ce += hero . ce ;
role . ce += hero . ce ;
pushHeros . push ( { hid : hero.hid , ce : reduceCe ( hero . ce ) , incHeroCe : reduceCe ( incHeroCe ) } ) ;
pushHeros . push ( { hid : hero.hid , ce : reduceCe ( hero . ce ) , incHeroCe : reduceCe ( incHeroCe ) } ) ;
await HeroModel . updateHeroInfo ( roleId , hero . hid , { ce : hero.ce } ) ;
await HeroModel . updateHeroInfo ( roleId , hero . hid , { ce : hero.ce } ) ;
}
}
await RoleModel . updateRoleInfo ( roleId , { globalCeAttr : role.globalCeAttr , ce : role.ce } ) ;
await RoleModel . updateRoleInfo ( roleId , { globalCeAttr : role.globalCeAttr , ce : role.ce } ) ;
return { pushHeros , ce : role.ce }
return { pushHeros , ce : role.ce }
}
}
function calHeroAddSkin ( args :Array < number > , ceAttr : CeAttrRole ) {
function calHeroAddSkin ( args : Array < number > , ceAttr : CeAttrRole ) {
let res : CeAttrRole = { } ;
let res : CeAttrRole = { } ;
for ( let arg of args ) {
for ( let arg of args ) {
let addSkin = gameData . fashion . get ( arg ) ;
let addSkin = gameData . fashion . get ( arg ) ;
let attrName : string ;
let attrName : string ;
for ( let attr of addSkin . globalAttr ) {
for ( let attr of addSkin . globalAttr ) {
attrName = getAtrrNameById ( attr . id ) ;
attrName = getAtrrNameById ( attr . id ) ;
res [ attrName ] = { fixUp : ceAttr [ attrName ] . fixUp , ratioUp : ceAttr [ attrName ] . ratioUp } ;
res [ attrName ] = { fixUp : ceAttr [ attrName ] . fixUp , ratioUp : ceAttr [ attrName ] . ratioUp } ;
res [ attrName ] . fixUp += attr . number * HERO_CE_RATIO ;
res [ attrName ] . fixUp += attr . number * HERO_CE_RATIO ;
}
}
}
}
@@ -720,22 +700,22 @@ function calHeroAddSkin(args:Array<number>, ceAttr: CeAttrRole){
* @param preHid 撤下的武将
* @param preHid 撤下的武将
* @param ceAttr
* @param ceAttr
*/
*/
function calSchoolAddAttr ( heros : HeroType [ ] , schoolId : number , hid : number , preHid : number , ceAttr : CeAttrRole ) {
function calSchoolAddAttr ( heros : HeroType [ ] , schoolId : number , hid : number , preHid : number , ceAttr : CeAttrRole ) {
let res : CeAttrRole = { } ;
let res : CeAttrRole = { } ;
let school = gameData . school . get ( schoolId ) ;
let school = gameData . school . get ( schoolId ) ;
let preHero = heros . find ( cur = > cur . hid == preHid ) ;
let preHero = heros . find ( cur = > cur . hid == preHid ) ;
let curHero = heros . find ( cur = > cur . hid == hid ) ;
let curHero = heros . find ( cur = > cur . hid == hid ) ;
if ( ! school ) return res ;
if ( ! school ) return res ;
let defaultPercent = { mainAttrAPerent : 0 , assiAttrAddValue : 0 } ;
let defaultPercent = { mainAttrAPerent : 0 , assiAttrAddValue : 0 } ;
let preRate = preHero ? getSchoolRateByStar ( preHero . star , preHero . colorStar , preHero . quality ) : defaultPercent ;
let preRate = preHero ? getSchoolRateByStar ( preHero . star , preHero . colorStar , preHero . quality ) : defaultPercent ;
let curRate = curHero ? getSchoolRateByStar ( curHero . star , curHero . colorStar , curHero . quality ) : defaultPercent ;
let curRate = curHero ? getSchoolRateByStar ( curHero . star , curHero . colorStar , curHero . quality ) : defaultPercent ;
let attrName : string ;
let attrName : string ;
for ( let attrId of school . upAttribute ) {
for ( let attrId of school . upAttribute ) {
attrName = getAtrrNameById ( attrId ) ;
attrName = getAtrrNameById ( attrId ) ;
res [ attrName ] = { fixUp : ceAttr [ attrName ] . fixUp , ratioUp : ceAttr [ attrName ] . ratioUp } ;
res [ attrName ] = { fixUp : ceAttr [ attrName ] . fixUp , ratioUp : ceAttr [ attrName ] . ratioUp } ;
if ( attrId < ABI_TYPE . ABI_SPEED ) { // 主属性
if ( attrId < ABI_TYPE . ABI_SPEED ) { // 主属性
res [ attrName ] . ratioUp += curRate . mainAttrAPerent - preRate . mainAttrAPerent ;
res [ attrName ] . ratioUp += curRate . mainAttrAPerent - preRate . mainAttrAPerent ;
} else { // 次级属性
} else { // 次级属性
res [ attrName ] . fixUp += ( curRate . assiAttrAddValue - preRate . assiAttrAddValue ) * HERO_CE_RATIO ;
res [ attrName ] . fixUp += ( curRate . assiAttrAddValue - preRate . assiAttrAddValue ) * HERO_CE_RATIO ;
@@ -757,24 +737,24 @@ async function calSchoolStarIncAttr(heros: HeroType[], type: number, args: numbe
let [ hid , isStarUp ] = args ; // 是否升星,是否初次觉醒
let [ hid , isStarUp ] = args ; // 是否升星,是否初次觉醒
let needCal = false ;
let needCal = false ;
let roleId : string = '' ;
let roleId : string = '' ;
for ( let hero of heros ) {
for ( let hero of heros ) {
if ( hero . hid != hid ) {
if ( hero . hid != hid ) {
continue ;
continue ;
}
}
if ( ( type == HERO_SYSTEM_TYPE . STAR || type == HERO_SYSTEM_TYPE . COLORSTAR ) && ! isStarUp ) {
if ( ( type == HERO_SYSTEM_TYPE . STAR || type == HERO_SYSTEM_TYPE . COLORSTAR ) && ! isStarUp ) {
continue ;
continue ;
}
}
roleId = hero . roleId ;
roleId = hero . roleId ;
let curHeroInSchool = await SchoolModel . findByHid ( roleId , hid ) ;
let curHeroInSchool = await SchoolModel . findByHid ( roleId , hid ) ;
if ( ! curHeroInSchool ) continue ;
if ( ! curHeroInSchool ) continue ;
let preStar = hero . star , preColorStar = hero . colorStar , preQuality = hero . quality ;
let preStar = hero . star , preColorStar = hero . colorStar , preQuality = hero . quality ;
if ( type == HERO_SYSTEM_TYPE . STAR && isStarUp ) {
if ( type == HERO_SYSTEM_TYPE . STAR && isStarUp ) {
preStar -- ;
preStar -- ;
} else if ( type == HERO_SYSTEM_TYPE . QUALITY ) {
} else if ( type == HERO_SYSTEM_TYPE . QUALITY ) {
preQuality -- ;
preQuality -- ;
} else if ( type == HERO_SYSTEM_TYPE . COLORSTAR ) {
} else if ( type == HERO_SYSTEM_TYPE . COLORSTAR ) {
preColorStar -- ;
preColorStar -- ;
} else {
} else {
continue ;
continue ;
}
}
@@ -783,10 +763,10 @@ async function calSchoolStarIncAttr(heros: HeroType[], type: number, args: numbe
let curRate = getSchoolRateByStar ( hero . star , hero . colorStar , hero . quality ) ;
let curRate = getSchoolRateByStar ( hero . star , hero . colorStar , hero . quality ) ;
let attrName : string ;
let attrName : string ;
for ( let attrId of school . upAttribute ) {
for ( let attrId of school . upAttribute ) {
attrName = getAtrrNameById ( attrId ) ;
attrName = getAtrrNameById ( attrId ) ;
res [ attrName ] = { fixUp : ceAttr [ attrName ] . fixUp , ratioUp : ceAttr [ attrName ] . ratioUp } ;
res [ attrName ] = { fixUp : ceAttr [ attrName ] . fixUp , ratioUp : ceAttr [ attrName ] . ratioUp } ;
if ( attrId < ABI_TYPE . ABI_SPEED ) { // 主属性
if ( attrId < ABI_TYPE . ABI_SPEED ) { // 主属性
res [ attrName ] . ratioUp += curRate . mainAttrAPerent - preRate . mainAttrAPerent ;
res [ attrName ] . ratioUp += curRate . mainAttrAPerent - preRate . mainAttrAPerent ;
} else { // 次级属性
} else { // 次级属性
res [ attrName ] . fixUp += ( curRate . assiAttrAddValue - preRate . assiAttrAddValue ) * HERO_CE_RATIO ;
res [ attrName ] . fixUp += ( curRate . assiAttrAddValue - preRate . assiAttrAddValue ) * HERO_CE_RATIO ;
@@ -796,10 +776,10 @@ async function calSchoolStarIncAttr(heros: HeroType[], type: number, args: numbe
}
}
if ( needCal ) {
if ( needCal ) {
const allHeros = await HeroModel . findByRole ( roleId ) ;
const allHeros = await HeroModel . findByRole ( roleId ) ;
for ( let hero of allHeros ) {
for ( let hero of allHeros ) {
if ( hero . hid != hid ) heros . push ( hero ) ;
if ( hero . hid != hid ) heros . push ( hero ) ;
}
}
}
}
return res ;
return res ;
@@ -811,25 +791,25 @@ async function calSchoolStarIncAttr(heros: HeroType[], type: number, args: numbe
* @param hid 激活的武将
* @param hid 激活的武将
* @param ceAttr
* @param ceAttr
*/
*/
function calScrollAddAttr ( heros : HeroType [ ] , hid : number , ceAttr : CeAttrRole ) {
function calScrollAddAttr ( heros : HeroType [ ] , hid : number , ceAttr : CeAttrRole ) {
let res : CeAttrRole = { } ;
let res : CeAttrRole = { } ;
let curHero = heros . find ( cur = > cur . hid == hid ) ;
let curHero = heros . find ( cur = > cur . hid == hid ) ;
let dicHero = gameData . hero . get ( hid ) ;
let dicHero = gameData . hero . get ( hid ) ;
if ( ! curHero || ! dicHero ) return res ;
if ( ! curHero || ! dicHero ) return res ;
let { quality } = dicHero ;
let { quality } = dicHero ;
let { star , quality : curQuality , colorStar , job } = curHero ;
let { star , quality : curQuality , colorStar , job } = curHero ;
let heroScroll = getScollByStar ( quality , star , curQuality , colorStar ) ;
let heroScroll = getScollByStar ( quality , star , curQuality , colorStar ) ;
if ( ! heroScroll ) return res ;
if ( ! heroScroll ) return res ;
let preScroll = gameData . preHeroScroll . get ( heroScroll . id ) ;
let preScroll = gameData . preHeroScroll . get ( heroScroll . id ) ;
heroScroll . ceAttr . forEach ( ( add , id ) = > {
heroScroll . ceAttr . forEach ( ( add , id ) = > {
let attId = getFieldByStage ( id , job ) ;
let attId = getFieldByStage ( id , job ) ;
let attrName = getAtrrNameById ( attId ) ;
let attrName = getAtrrNameById ( attId ) ;
let preAdd = preScroll ? preScroll . ceAttr . get ( id ) : 0 ;
let preAdd = preScroll ? preScroll . ceAttr . get ( id ) : 0 ;
res [ attrName ] = { fixUp : ceAttr [ attrName ] . fixUp , ratioUp : ceAttr [ attrName ] . ratioUp } ;
res [ attrName ] = { fixUp : ceAttr [ attrName ] . fixUp , ratioUp : ceAttr [ attrName ] . ratioUp } ;
res [ attrName ] . fixUp += ( add - preAdd ) * HERO_CE_RATIO ;
res [ attrName ] . fixUp += ( add - preAdd ) * HERO_CE_RATIO ;
} ) ;
} ) ;
return res ;
return res ;
@@ -843,8 +823,74 @@ function calScrollAddAttr(heros: HeroType[], hid: number, ceAttr: CeAttrRole){
*/
*/
function calHeroCeScrollIncAttr ( hero : HeroType , hid : number , preFavourLv : number ) {
function calHeroCeScrollIncAttr ( hero : HeroType , hid : number , preFavourLv : number ) {
let res : CeAttr = { } ;
let res : CeAttr = { } ;
if ( hero . hid == hid && hero . favourLv != preFavourLv ) {
if ( hero . hid == hid && hero . favourLv != preFavourLv ) {
res = calHeroFavourUpIncAttr ( hero , [ preFavourLv ] ) ;
res = calHeroFavourUpIncAttr ( hero , [ preFavourLv ] ) ;
}
}
return res ;
return res ;
}
}
function calTitle ( args : Array < number > , ceAttr : CeAttrRole ) {
let res : CeAttrRole = { } ;
let titleId = args [ 0 ] ;
let titleInfo = gameData . title . get ( titleId ) ;
for ( let attrName in getTeraphAttr ( ) ) {
res [ attrName ] = { fixUp : ceAttr [ attrName ] . fixUp , ratioUp : ceAttr [ attrName ] . ratioUp } ;
res [ attrName ] . fixUp += titleInfo [ attrName ] * HERO_CE_RATIO ;
}
for ( let attr of titleInfo . assiAttrValue ) {
let attrName = getAtrrNameById ( attr . id ) ;
res [ attrName ] = res [ attrName ] || { fixUp : ceAttr [ attrName ] . fixUp , ratioUp : ceAttr [ attrName ] . ratioUp } ;
res [ attrName ] . ratioUp += attr . number * HERO_CE_RATIO ;
}
return res ;
}
export function initRoleAtrr ( role : RoleType ) {
if ( ! role . globalCeAttr ) role . globalCeAttr = new CeAttr ( ) ;
let titleId = role . title ;
let titleInfo = gameData . title . get ( titleId ) ;
if ( ! ! titleInfo ) {
for ( let attrName in getTeraphAttr ( ) ) {
if ( ! attrName ) continue ;
role . globalCeAttr [ attrName ] . fixUp += titleInfo [ attrName ] * HERO_CE_RATIO ;
}
for ( let attr of titleInfo . assiAttrValue ) {
let attrName = getAtrrNameById ( attr . id ) ;
if ( ! attrName ) continue ;
role . globalCeAttr [ attrName ] . ratioUp += attr . number * HERO_CE_RATIO ;
}
}
return ;
}
async function reCalRoleAttr ( heros :Array < HeroType > , ceAttr : CeAttrRole , type : number , args : Array < number > ) {
let reIncAttr : CeAttrRole = { } ; // role表属性增量
switch ( type ) {
case HERO_SYSTEM_TYPE.INIT :
reIncAttr = calRoleInitIncAttr ( heros , ceAttr ) ; // 全局变量增
break ;
case HERO_SYSTEM_TYPE.ADD_SKIN :
reIncAttr = calHeroAddSkin ( args , ceAttr ) ;
break ;
case HERO_SYSTEM_TYPE.SCHOOL :
reIncAttr = calSchoolAddAttr ( heros , args [ 0 ] , args [ 1 ] , args [ 2 ] , ceAttr ) ;
break ;
case HERO_SYSTEM_TYPE.SCROLL :
reIncAttr = calScrollAddAttr ( heros , args [ 0 ] , ceAttr ) ;
break ;
case HERO_SYSTEM_TYPE.STAR :
case HERO_SYSTEM_TYPE.COLORSTAR :
case HERO_SYSTEM_TYPE.QUALITY :
reIncAttr = await calSchoolStarIncAttr ( heros , type , args , ceAttr ) ;
break ;
case HERO_SYSTEM_TYPE.TITLE :
reIncAttr = calTitle ( args , ceAttr ) ;
}
for ( let attrName in reIncAttr ) {
if ( attrName == '_id' ) continue ;
let globalAttrData : CeAttrDataRole = reIncAttr [ attrName ] || new CeAttrDataRole ( ) ;
for ( let key in globalAttrData ) {
ceAttr [ attrName ] [ key ] += parseInt ( globalAttrData [ key ] || 0 ) ;
}
}
}