全局:属性修改

This commit is contained in:
luying
2021-02-27 15:35:16 +08:00
parent d4561c2e3d
commit 0966f025cf
35 changed files with 1186 additions and 1130 deletions

View File

@@ -35,7 +35,6 @@ import { dicTeraph } from './dictionary/DicTeraph';
import { dicSchool } from './dictionary/DicSchool';
import { dicSchoolRate } from './dictionary/DicSchoolRate';
import { dicHeroScroll, preHeroScroll } from './dictionary/DicHeroScroll';
import { ABI_TYPE_TO_STAGE } from "../consts";
import { dicPvpOpponent } from './dictionary/DicPvpOpponent';
import { dicPvpTeamLevel } from './dictionary/DicPvpTeamLevel';
import { dicPvpRefreshConsume, maxPvpRefreshCnt } from './dictionary/DicPvpRefreshConsume';
@@ -58,6 +57,7 @@ import { dicArmyBossRank } from '../pubUtils/dictionary/DicArmyBossRank';
import { dicArmyDonate } from '../pubUtils/dictionary/DicArmyDonateBoxReward';
import { dicRoleFriend } from "./dictionary/DicRoleFriend";
import { dicRoleFriendLv } from "./dictionary/DicRoleFriendLv";
import { Attribute } from "../domain/roleField/attribute";
export const gameData = {
blurprtCompose: dicBlueprtCompose,
@@ -213,7 +213,10 @@ export function getBossHpByWarId(warId: number) {
warInfo.forEach(hero => {
let { attribute, dataId, relation, actorId } = hero;
if (relation === 2) {
const hp = attribute.hp||0;
let attrJson = new Attribute();
attrJson.setByWarJson(attribute, 1);
const hp = attrJson.hp||0;
if (hp > 0) {
bossHpArr.push({dataId, hp, actorId});
bossHpSum += hp;
@@ -300,17 +303,6 @@ export function getScollByStar(quality: number, star: number, curQuality: number
return heroScroll;
}
// 根据存在升星表等的stage字段的id对应17维id
export function getFieldByStage(stage: number, jobid: number) {
let targetAttrId = ABI_TYPE_TO_STAGE.get(stage);
if(typeof targetAttrId === 'number') {
return targetAttrId
} else {
const dicJob = gameData.job.get(jobid);
return targetAttrId(dicJob.type);
}
}
export function getSuit(id: number) {
const suitInfo = gameData.suit.get(id);
return suitInfo;
@@ -420,7 +412,7 @@ export function getArmyWishPoolBaseByLv(lv: number) {
export function getFriendLvByExp(exp: number) {
let resultLv = 1;
for(let [lv, {sum}] of gameData.roleFriendLv) {
for(let [lv, {sum}] of gameData.roleFriendLv.entries()) {
resultLv = lv;
if(exp < sum) break;
}

View File

@@ -152,12 +152,10 @@ function parseAbility(json) {
let map = new Map<number, number>();
map.set(ABI_TYPE.ABI_HP, json.hp||0);
map.set(ABI_TYPE.ABI_ATK, json.atk||0);
map.set(ABI_TYPE.ABI_MATK, json.matk||0);
map.set(ABI_TYPE.ABI_DEF, json.def||0);
map.set(ABI_TYPE.ABI_MDEF, json.mdef||0);
map.set(ABI_TYPE.ABI_AGI, json.agi||0);
map.set(ABI_TYPE.ABI_LUK, json.luk||0);
map.set(ABI_TYPE.ABI_SPEED, json.speed||0);
map.set(ABI_TYPE.ABI_DAMAGE_INCREASE, json.damageIncrease||0);
map.set(ABI_TYPE.ABI_DAMAGE_DECREASE, json.damageDecrease||0);
return map
}
@@ -165,12 +163,10 @@ function parseAbilityUp(json) {
let map = new Map<number, number>();
map.set(ABI_TYPE.ABI_HP, json.hp_up||0);
map.set(ABI_TYPE.ABI_ATK, json.atk_up||0);
map.set(ABI_TYPE.ABI_MATK, json.matk_up||0);
map.set(ABI_TYPE.ABI_DEF, json.def_up||0);
map.set(ABI_TYPE.ABI_MDEF, json.mdef_up||0);
map.set(ABI_TYPE.ABI_AGI, json.agi_up||0);
map.set(ABI_TYPE.ABI_LUK, json.luk_up||0);
map.set(ABI_TYPE.ABI_SPEED, json.speed_up||0);
map.set(ABI_TYPE.ABI_DAMAGE_INCREASE, json.damageIncrease_up||0);
map.set(ABI_TYPE.ABI_DAMAGE_DECREASE, json.damageDecrease_up||0);
return map
}

View File

@@ -41,7 +41,5 @@ function parseCeAttr(elem) {
ceAttr.set(ABI_STAGE.ATK, elem.atk);
ceAttr.set(ABI_STAGE.DEF, elem.def);
ceAttr.set(ABI_STAGE.MDEF, elem.mdef);
ceAttr.set(ABI_STAGE.AGI, elem.agi);
ceAttr.set(ABI_STAGE.LUK, elem.luk);
return ceAttr;
}

View File

@@ -36,7 +36,6 @@ function parseCeAttr(elem) {
ceAttr.set(ABI_STAGE.ATK, elem.atk_up);
ceAttr.set(ABI_STAGE.DEF, elem.def_up);
ceAttr.set(ABI_STAGE.MDEF, elem.mdef_up);
ceAttr.set(ABI_STAGE.AGI, elem.agi_up);
ceAttr.set(ABI_STAGE.LUK, elem.luk_up);
return ceAttr;
}
}
arr = undefined;

View File

@@ -40,7 +40,5 @@ function parseCeAttr(elem) {
ceAttr.set(ABI_STAGE.ATK, elem.atk_up);
ceAttr.set(ABI_STAGE.DEF, elem.def_up);
ceAttr.set(ABI_STAGE.MDEF, elem.mdef_up);
ceAttr.set(ABI_STAGE.AGI, elem.agi_up);
ceAttr.set(ABI_STAGE.LUK, elem.luk_up);
return ceAttr;
}

View File

@@ -1,6 +1,6 @@
// 兵种表
import {readJsonFile, parseNumberList, parseGoodStr} from '../util'
import { FILENAME } from '../../consts'
import { FILENAME, ABI_STAGE } from '../../consts'
import { RewardInter } from '../interface';
const _ = require('lodash');
@@ -23,18 +23,8 @@ export interface DicJob {
readonly trainingConsume: Array<RewardInter>;
// 升阶消耗
readonly upGradeConsume: Array<RewardInter>;
// 生命训练提升
readonly hp: number;
// 攻击力训练提升
readonly atk: number;
// 防御力训练提升
readonly def: number;
// 策防训练提升
readonly mdef: number;
// 敏捷训练提升
readonly agi: number;
// 幸运训练提升
readonly luk: number;
// 每阶升级属性
readonly ceAttr: Map<number, number>
}
@@ -42,7 +32,7 @@ const str = readJsonFile(FILENAME.DIC_JOB);
let arr = JSON.parse(str);
type KeysEnum<T> = { [P in keyof Required<T>]: true };
const DicJobKeys: KeysEnum<DicJob> = {jobid: true, name: true, grade: true, unlockLevel: true, job_class: true, type: true, seid: true,trainingConsume: true, upGradeConsume: true, hp: true, atk: true, def: true, mdef: true, agi: true, luk: true};
const DicJobKeys: KeysEnum<DicJob> = {jobid: true, name: true, grade: true, unlockLevel: true, job_class: true, type: true, seid: true,trainingConsume: true, upGradeConsume: true, ceAttr: true};
export const dicJob = new Map<number, DicJob>();
export const jobClassMaxGrades = new Map<number, {grade:number, jobid:number}>();
@@ -52,6 +42,7 @@ arr.forEach(o => {
o.seid = parseNumberList(o.seid);
o.trainingConsume = parseGoodStr(o.trainingConsume);
o.upGradeConsume = parseGoodStr(o.upGradeConsume);
o.ceAttr = parseCeAttr(o);
dicJob.set(o.jobid, _.pick(o, Object.keys(DicJobKeys)));
let jobClass = jobClassMaxGrades.get(o.job_class);
if (!!jobClass && jobClass.grade < o.grade) {
@@ -61,4 +52,13 @@ arr.forEach(o => {
});
function parseCeAttr(elem) {
let ceAttr = new Map<number, number>();
ceAttr.set(ABI_STAGE.HP, elem.hp);
ceAttr.set(ABI_STAGE.ATK, elem.atk);
ceAttr.set(ABI_STAGE.DEF, elem.def);
ceAttr.set(ABI_STAGE.MDEF, elem.mdef);
return ceAttr;
}
arr = undefined;

View File

@@ -1,6 +1,7 @@
// 物品表
import { decodeArrayListStr, readJsonFile, parseGoodStr } from '../util'
import { FILENAME} from '../../consts'
import { FILENAME, ABI_TYPE} from '../../consts'
import { RewardInter } from '../interface';
const _ = require('lodash');
export interface SpecialMaterial {
@@ -13,25 +14,16 @@ export interface DicTeraph {
readonly id: number;
readonly index: number;
readonly grade: number;
readonly hpMax: number;
readonly atkMax: number;
readonly defMax: number;
readonly mdefMax: number;
readonly agiMax: number;
readonly lukMax: number;
readonly hp;
readonly atk;
readonly def;
readonly mdef;
readonly agi;
readonly luk;
readonly criRate;
readonly criEffect;
readonly upMaterial:Array<{id: number, number: number}>;
readonly mainAttrMax: Map<number, number>; // 最大强化加成 id => value 18围内的id
readonly mainAttrUp: Map<number, number>; // 每次强化加成 id => value 18围内的id
readonly criRate: number;
readonly criEffect: number;
readonly upMaterial:Array<RewardInter>;
readonly assiAttrValue:Array<{id: number, number: number}>;
readonly upGradeMaterial:Array<{id: number, number: number}>;
readonly assiAttrValue:Map<number, number>; // 次级属性
readonly upGradeMaterial:Array<RewardInter>;
}
const str = readJsonFile(FILENAME.DIC_TERAPH);
@@ -42,18 +34,8 @@ const DicTeraphKeys: KeysEnum<DicTeraph> = {
id: true,
index: true,
grade: true,
hpMax: true,
atkMax: true,
defMax: true,
mdefMax: true,
agiMax: true,
lukMax: true,
hp: true,
atk: true,
def: true,
mdef: true,
agi: true,
luk: true,
mainAttrMax: true,
mainAttrUp: true,
criRate: true,
criEffect: true,
upMaterial: true,
@@ -65,26 +47,38 @@ arr.forEach(o => {
o.assiAttrValue = parseAttr(o.assiAttrValue);
o.upGradeMaterial = parseGoodStr(o.upGradeMaterial);
o.upMaterial = parseGoodStr(o.upMaterial);
o.hp = o.hpUp;
o.atk = o.atkUp;
o.def = o.defUp;
o.mdef = o.mdefUp;
o.agi = o.agiUp;
o.luk = o.lukUp;
o.mainAttrMax = parseMainAttrMax(o);
o.mainAttrUp = parseMainAttrUp(o);
dicTeraph.set(o.index + '_' + o.grade, _.pick(o, Object.keys(DicTeraphKeys)));
});
arr = undefined;
function parseAttr(str: string) {
let result = new Array<{id: number, number: number}>();
let result = new Map<number, number>();
if(!str) return result;
let decodeArr = decodeArrayListStr(str);
for(let [id, number] of decodeArr) {
if(isNaN(parseInt(id)) || isNaN(parseInt(number))) {
throw new Error('data table format wrong');
}
result.push({id: parseInt(id), number: parseInt(number)});
result.set(parseInt(id), parseInt(number));
}
return result
}
function parseMainAttrMax(elem) {
let result = new Map<number, number>();
result.set(ABI_TYPE.ABI_HP, elem.hpMax);
result.set(ABI_TYPE.ABI_ATK, elem.atkMax);
result.set(ABI_TYPE.ABI_DEF, elem.defMax);
result.set(ABI_TYPE.ABI_MDEF, elem.mdefMax);
}
function parseMainAttrUp(elem) {
let result = new Map<number, number>();
result.set(ABI_TYPE.ABI_HP, elem.hpUp);
result.set(ABI_TYPE.ABI_ATK, elem.atkUp);
result.set(ABI_TYPE.ABI_DEF, elem.defUp);
result.set(ABI_TYPE.ABI_MDEF, elem.mdefUp);
}

View File

@@ -1,6 +1,6 @@
// 物品表
import { decodeArrayListStr, readJsonFile, parseGoodStr } from '../util'
import { FILENAME} from '../../consts'
import { FILENAME, ABI_STAGE, ABI_TYPE_TO_STAGE, ABI_TYPE} from '../../consts'
const _ = require('lodash');
export interface SpecialMaterial {
@@ -9,15 +9,10 @@ export interface SpecialMaterial {
}
export interface DicTitle {
// 等级
readonly id: number;
readonly hp: number;
readonly atk: number;
readonly def: number;
readonly mdef: number;
readonly agi: number;
readonly luk: number;
readonly assiAttrValue: Array<{id: number, number: number}>;
// 等级
readonly mainAttrValue: Map<number, number>; // id => value 这里的值是上一级的基础上增加的值
readonly assiAttrValue: Map<number, number>; // id => value
// 等级现在
readonly lvLimited: number;
// 升级消耗
@@ -30,18 +25,14 @@ let arr = JSON.parse(str);
type KeysEnum<T> = { [P in keyof Required<T>]: true };
const DicTitleKeys: KeysEnum<DicTitle> = {
id: true,
hp: true,
atk: true,
def: true,
mdef: true,
agi: true,
luk: true,
mainAttrValue: true,
assiAttrValue: true,
lvLimited: true,
material: true
}
export const dicTitle = new Map<number, DicTitle>();
arr.forEach(o => {
o.mainAttrValue = parseMainAttr(o);
o.assiAttrValue = parseAttr(o.assiAttrValue);
o.material = parseGoodStr(o.material);
dicTitle.set(o.id, _.pick(o, Object.keys(DicTitleKeys)));
@@ -50,14 +41,23 @@ arr.forEach(o => {
arr = undefined;
function parseAttr(str: string) {
let result = new Array<{id: number, number: number}>();
let result = new Map<number, number>();
if(!str) return result;
let decodeArr = decodeArrayListStr(str);
for(let [id, number] of decodeArr) {
if(isNaN(parseInt(id)) || isNaN(parseInt(number))) {
for(let [id, value] of decodeArr) {
if(isNaN(parseInt(id)) || isNaN(parseInt(value))) {
throw new Error('data table format wrong');
}
result.push({id: parseInt(id), number: parseInt(number)});
result.set(parseInt(id), parseInt(value));
}
return result
}
function parseMainAttr(elem) {
let result = new Map<number, number>();
result.set(ABI_TYPE.ABI_HP, elem.hp);
result.set(ABI_TYPE.ABI_ATK, elem.atk);
result.set(ABI_TYPE.ABI_DEF, elem.def);
result.set(ABI_TYPE.ABI_MDEF, elem.mdef);
return result;
}

View File

@@ -1,8 +1,5 @@
// 关卡表
import {decodeArrayListStr, readWarJsonFileList} from '../util'
import { ABI_TYPE } from '../../consts';
import { Attributes } from '../interface';
export interface DicWarJson {
@@ -33,7 +30,7 @@ export interface DicWarJson {
// 角色使用的AI类型
readonly initial_ai: number;
// 属性
readonly attribute: Attributes;
readonly attribute: {id: number, val: number}[];
// 武将技能
readonly skill: string;
// 武将被动技能
@@ -63,55 +60,15 @@ readWarJsonFileList().forEach(str => {
dicWarJson.set(warid, warjson);
})
function parseAttribute(str: string) {
let attribute: Attributes = {};
if(!str) return attribute;
let arr = decodeArrayListStr(str);
for(let [id, value] of arr) {
if(isNaN(parseInt(id)) || isNaN(parseInt(value))) {
export function parseAttribute(str: string) {
let result = new Array<{ id: number, val: number }>();
if (!str) return result;
let decodeArr = decodeArrayListStr(str);
for (let [id, val] of decodeArr) {
if (isNaN(parseInt(id)) || isNaN(parseInt(val))) {
throw new Error('data table format wrong');
}
let _id = parseInt(id), _value = parseInt(value);
switch(_id) {
case ABI_TYPE.ABI_HP:
attribute.hp = _value; break;
case ABI_TYPE.ABI_ATK:
attribute.atk = _value; break;
case ABI_TYPE.ABI_MATK:
attribute.matk = _value; break;
case ABI_TYPE.ABI_DEF:
attribute.def = _value; break;
case ABI_TYPE.ABI_MDEF:
attribute.mdef = _value; break;
case ABI_TYPE.ABI_AGI:
attribute.agi = _value; break;
case ABI_TYPE.ABI_LUK:
attribute.luk = _value; break;
case ABI_TYPE.ABI_SPEED:
attribute.speed = _value; break;
case ABI_TYPE.ABI_HIT:
attribute.hit = _value; break;
case ABI_TYPE.ABI_CRI:
attribute.cri = _value; break;
case ABI_TYPE.ABI_FLEE:
attribute.flee = _value; break;
case ABI_TYPE.ABI_ANT_CRI:
attribute.antCri = _value; break;
case ABI_TYPE.ABI_DAMAGE_INCREASE:
attribute.damageIncrease = _value; break;
case ABI_TYPE.ABI_DAMAGE_DECREASE:
attribute.damageDecrease = _value; break;
case ABI_TYPE.ABI_DEF_IGNORE:
attribute.defIngnore = _value; break;
case ABI_TYPE.ABI_BLOOD_SUCK:
attribute.bloodSuck = _value; break;
case ABI_TYPE.ABI_AP:
attribute.ap = _value; break;
default:
break;
}
result.push({ id: parseInt(id), val: parseInt(val) });
}
return attribute
}
return result
}

View File

@@ -373,8 +373,6 @@ function parseHeroStar() {
ceAttr.set(ABI_STAGE.ATK, elem.atk_up);
ceAttr.set(ABI_STAGE.DEF, elem.def_up);
ceAttr.set(ABI_STAGE.MDEF, elem.mdef_up);
ceAttr.set(ABI_STAGE.AGI, elem.agi_up);
ceAttr.set(ABI_STAGE.LUK, elem.luk_up);
heroStarList.set(`${elem.quality}_${elem.star}`,{ceAttr, ...elem});
}
@@ -392,8 +390,6 @@ function parseHeroWake() {
ceAttr.set(ABI_STAGE.ATK, elem.atk_up);
ceAttr.set(ABI_STAGE.DEF, elem.def_up);
ceAttr.set(ABI_STAGE.MDEF, elem.mdef_up);
ceAttr.set(ABI_STAGE.AGI, elem.agi_up);
ceAttr.set(ABI_STAGE.LUK, elem.luk_up);
heroWakeList.set(`${elem.quality}_${elem.star}`,{ceAttr, ...elem});
}

View File

@@ -1,31 +1,12 @@
// 一些通用的interface定义
import { Attribute } from "../domain/roleField/attribute";
export interface RewardInter {
id: number;
count: number;
}
export interface Attributes {
hp?: number;
atk?: number;
matk?: number;
def?: number;
mdef?: number;
agi?: number;
luk?: number;
speed?: number;
hit?: number;
cri?: number;
flee?: number;
antCri?: number;
damageIncrease?: number;
damageDecrease?: number;
defIngnore?: number;
bloodSuck?: number;
ap?: number;
}
export interface EquipInter {
id: number;
name: string;
@@ -82,7 +63,7 @@ export interface oppHeroesDefenseInter {
lv: number; // 等级
hide: number; // 是否隐藏
initial_ai: number; // ai类型
attribute: Attributes;
attribute: Attribute;
star: number; // 星级
skill: string|number; // 技能
seid: string; // 技能

File diff suppressed because it is too large Load Diff