修改,特技战力加成通过时装表获得
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
// 时装表
|
||||
import { decodeArrayListStr, readJsonFile, parseNumberList } from '../util';
|
||||
import { decodeArrayListStr, readJsonFile } from '../util';
|
||||
import { FILENAME } from '../../consts';
|
||||
|
||||
export interface DicFashions {
|
||||
// 时装id
|
||||
readonly id: number;
|
||||
// 增加的被动技能
|
||||
readonly seid: Array<number>;
|
||||
// 指向heroSkill表
|
||||
readonly skillId: number;
|
||||
// 全局加成
|
||||
readonly globalAttr: Array<{id: number, number: number}>;
|
||||
// 单体加成
|
||||
@@ -20,7 +20,6 @@ let arr = JSON.parse(str);
|
||||
|
||||
export const dicFashions = new Map<number, DicFashions>();
|
||||
arr.forEach(o => {
|
||||
o.seid = parseNumberList(o.seid);
|
||||
o.globalAttr = parseAttr(o.globalAttr);
|
||||
o.actorAttr = parseAttr(o.actorAttr);
|
||||
dicFashions.set(o.id, o);
|
||||
|
||||
@@ -9,9 +9,9 @@ export interface DicHeroSkill {
|
||||
// 技能名
|
||||
readonly name: string;
|
||||
// 星级解锁
|
||||
readonly starSeidArr: Array<{star: number, value: number}>;
|
||||
readonly starSeidArr: Array<{star: number, value: number, type: number}>;
|
||||
// 觉醒解锁
|
||||
readonly colorStarSeidArr: Array<{star: number, value: number}>;
|
||||
readonly colorStarSeidArr: Array<{star: number, value: number, type: number}>;
|
||||
|
||||
}
|
||||
|
||||
@@ -26,15 +26,15 @@ arr.forEach(o => {
|
||||
});
|
||||
|
||||
function parseSeid(str: string) {
|
||||
let arr = new Array<{star: number, value: number}>();
|
||||
let arr = new Array<{star: number, value: number, type: number}>();
|
||||
if(!str) return arr;
|
||||
let decodeArr = decodeArrayListStr(str);
|
||||
for(let [star, value] of decodeArr) {
|
||||
if(isNaN(parseInt(star)) || isNaN(parseInt(value))) {
|
||||
for(let [star, value, type] of decodeArr) {
|
||||
if(isNaN(parseInt(star)) || isNaN(parseInt(value)) || isNaN(parseInt(type))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
arr.push({ star: parseInt(star), value: parseInt(value)});
|
||||
arr.push({ star: parseInt(star), value: parseInt(value), type: parseInt(type)});
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
@@ -30,13 +30,13 @@ export function calPlayerCe(globalCeAttr: CeAttr, hero: HeroType, type: number,
|
||||
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, removeSeidList); // args: 升的星盘
|
||||
} else if (type == HERO_SYSTEM_TYPE.TRAIN) {
|
||||
reIncAttr = calHeroTrainIncAttr(hero);
|
||||
} else if (type == HERO_SYSTEM_TYPE.STAGEUP) {
|
||||
reIncAttr = calHeroJobStageUpIncAttr(hero, args, addSeidList, removeSeidList )
|
||||
reIncAttr = calHeroJobStageUpIncAttr(hero, args, addSeidList, removeSeidList );
|
||||
} else if (type == HERO_SYSTEM_TYPE.SKIN) {
|
||||
reIncAttr = calHeroWearSkinIncAttr(hero, args);
|
||||
reIncAttr = calHeroWearSkinIncAttr(hero, args, addSeidList, removeSeidList );
|
||||
} else if (type == HERO_SYSTEM_TYPE.FAVOUR) {
|
||||
reIncAttr = calHeroFavourUpIncAttr(hero, args);
|
||||
} else if (type == HERO_SYSTEM_TYPE.CONNECT) {
|
||||
@@ -86,6 +86,8 @@ export async function calPlayerCeAndSave(roleId: string, heros: Array<HeroType>,
|
||||
|
||||
if (type == HERO_SYSTEM_TYPE.INIT) {
|
||||
reIncAttr = calRoleInitIncAttr(heros, role.globalCeAttr); // 全局变量增
|
||||
} else if (type == HERO_SYSTEM_TYPE.ADD_SKIN) {
|
||||
reIncAttr = calHeroAddSkin(args, role.globalCeAttr);
|
||||
}
|
||||
|
||||
for (let attrName in reIncAttr) {
|
||||
@@ -110,12 +112,16 @@ export async function calPlayerCeAndSave(roleId: string, heros: Array<HeroType>,
|
||||
|
||||
// 初始战力
|
||||
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);
|
||||
let res1 = calHeroStarIncAttr(hero, getAllAttrStage(), addSeidList, removeSeidList, true);
|
||||
let hero1 = combineHeroCeAttr(hero, res1);
|
||||
|
||||
console.log(JSON.stringify(res1));
|
||||
return res1
|
||||
let curSkin = hero.skins.find(cur => cur.enable);
|
||||
let res2 = calHeroWearSkinIncAttr(hero1, [curSkin?curSkin.id:0, 0], addSeidList, removeSeidList, true);
|
||||
let hero2 = combineHeroCeAttr(hero, res2);
|
||||
|
||||
calHeroJobStageUpIncAttr(hero2, [0], addSeidList, removeSeidList);
|
||||
|
||||
return res2
|
||||
}
|
||||
|
||||
export function calRoleInitIncAttr(heros: HeroType[], globalCeAttr: CeAttr) {
|
||||
@@ -144,18 +150,28 @@ function combineHeroCeAttr(originalHero: HeroType, result: CeAttr) {
|
||||
return hero;
|
||||
}
|
||||
|
||||
export function calHeroStarIncAttr (hero: HeroType, args: Array<number>, addSeidList: Array<number>) {
|
||||
let {star, starStage, quality, colorStar, colorStarStage, ceAttr} = hero;
|
||||
/**
|
||||
*
|
||||
* @param hero HeroType 武将更新后的值
|
||||
* @param args number[] 参数,表示需要更新多少个维
|
||||
* @param addSeidList number[] 用于更新被动
|
||||
* @param removeSeidList number[] 用于更新被动
|
||||
* @param isInit boolean 是否是初次创建武将
|
||||
*/
|
||||
export function calHeroStarIncAttr (hero: HeroType, args: Array<number>, addSeidList: Array<number>, removeSeidList: Array<number>, isInit = false) {
|
||||
let {star, starStage, quality, colorStar, colorStarStage, ceAttr, skins} = hero;
|
||||
let originStar = star, originColorStar = colorStar;
|
||||
|
||||
let res: CeAttr = {};
|
||||
const dicHero = gameData.hero.get(hero.hid);
|
||||
|
||||
const isWake = colorStar > 0; // 是否觉醒,只要激活了觉醒,彩星就会 > 1
|
||||
if(isWake) {
|
||||
if(colorStarStage == ABI_STAGE.START) colorStar = colorStar -1;
|
||||
if(colorStarStage == ABI_STAGE.START) originColorStar = colorStar - 1;
|
||||
} else {
|
||||
if(starStage == ABI_STAGE.START) star = star -1;
|
||||
if(starStage == ABI_STAGE.START) originStar = star - 1;
|
||||
}
|
||||
const dicStar = isWake? getHeroWakeByQuality(quality, colorStar): getHeroStarByQuality(quality, star); // 星级表
|
||||
const dicStar = isWake? getHeroWakeByQuality(quality, originColorStar): getHeroStarByQuality(quality, originStar); // 星级表
|
||||
|
||||
for(let stage of args) {
|
||||
|
||||
@@ -174,26 +190,43 @@ export function calHeroStarIncAttr (hero: HeroType, args: Array<number>, addSeid
|
||||
}
|
||||
|
||||
// 解锁技能
|
||||
if(dicHero.skill){
|
||||
let {starSeidArr, colorStarSeidArr} = gameData.heroSkill.get(dicHero.skill);
|
||||
if(isWake) {
|
||||
for(let {star, value} of starSeidArr){
|
||||
if(hero.star == star){
|
||||
addSeidList.push(value, 0);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for(let {star, value} of colorStarSeidArr){
|
||||
if(hero.colorStar == star){
|
||||
addSeidList.push(value, 0);
|
||||
}
|
||||
}
|
||||
let curSkin = skins.find(cur => cur.enable);
|
||||
let curSeidList = getSeidListOfFashion(curSkin.id, star, colorStar);
|
||||
let preSeidList = getSeidListOfFashion(curSkin.id, isInit?0:originStar, isInit?0:originColorStar);
|
||||
for(let [type, seid] of curSeidList) {
|
||||
if(!preSeidList.has(type)) {
|
||||
addSeidList.push(seid, 0);
|
||||
}
|
||||
}
|
||||
for(let [type, seid] of preSeidList) {
|
||||
console.log(type, seid)
|
||||
if(!curSeidList.has(type)) {
|
||||
removeSeidList.push(seid, 0);
|
||||
}
|
||||
}
|
||||
|
||||
return res;//属性增量可以是多个
|
||||
}
|
||||
|
||||
function getSeidListOfFashion(fashionid: number, originStar: number, originColorStar: number) {
|
||||
let seidList = new Map<number, number>(); // type => seid
|
||||
if(!gameData.fashion.has(fashionid)) return seidList;
|
||||
|
||||
let { skillId } = gameData.fashion.get(fashionid);
|
||||
let { starSeidArr, colorStarSeidArr } = gameData.heroSkill.get(skillId);
|
||||
for(let {star, value, type} of starSeidArr) {
|
||||
if(originStar >= star) {
|
||||
seidList.set(type, value);
|
||||
}
|
||||
}
|
||||
for(let {star, value, type} of colorStarSeidArr) {
|
||||
if(originColorStar >= star) {
|
||||
seidList.set(type, value);
|
||||
}
|
||||
}
|
||||
return seidList
|
||||
}
|
||||
|
||||
export function getAllAttrStage () {
|
||||
let attrs = new Array<number>(); // 有升级的属性 1-hp 2-atk 3-def 4-mdef 5-agi 6-luk
|
||||
for(let stage = ABI_STAGE.START + 1; stage <= ABI_STAGE.END; stage++) {
|
||||
@@ -238,21 +271,41 @@ export function calHeroJobStageUpIncAttr(hero: HeroType, args: Array<number>, ad
|
||||
}
|
||||
|
||||
//穿戴时装
|
||||
export function calHeroWearSkinIncAttr(hero: HeroType, args: Array<number>) {
|
||||
export function calHeroWearSkinIncAttr(hero: HeroType, args: Array<number>, addSeidList: Array<number>, removeSeidList: Array<number>, isInit = false) {
|
||||
let res: CeAttr = {};
|
||||
let addSkin = gameData.fashion.get(args[0]);
|
||||
let delSkin = gameData.fashion.get(args[1]);
|
||||
let attrName: string;
|
||||
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;
|
||||
if(delSkin) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
if(!isInit) { // 初始的时候,这一段技能在calHeroStarIncAttr里计算了,不用重复算
|
||||
let { star, colorStar } = hero;
|
||||
|
||||
let curSeidList = getSeidListOfFashion(args[0], star, colorStar);
|
||||
let preSeidList = getSeidListOfFashion(args[1], star, colorStar);
|
||||
for(let [type, seid] of curSeidList) {
|
||||
if(!preSeidList.has(type)) {
|
||||
removeSeidList.push(seid, 0);
|
||||
}
|
||||
}
|
||||
for(let [type, seid] of preSeidList) {
|
||||
if(!curSeidList.has(type)) {
|
||||
addSeidList.push(seid, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -436,6 +489,8 @@ function getFieldByStage(stage: number, jobid: number) {
|
||||
// 添加技能增加的被动属性
|
||||
function addSeidEffect(reIncAttr: CeAttr, heroCeAttr: CeAttr,addSeidList: Array<number>, removeSeidList: Array<number>) {
|
||||
|
||||
console.log('addSeidList', addSeidList)
|
||||
console.log('removeSeidList', removeSeidList)
|
||||
let otiginalSeidList = [
|
||||
{list: addSeidList, multi: 1},
|
||||
{list: removeSeidList, multi: -1}
|
||||
|
||||
Reference in New Issue
Block a user