战力:补充数据结构
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { ABI_STAGE, ABI_STAGE_TO_TYPE, ABI_TYPE_MAIN, SEID_TYPE } from "../../consts";
|
||||
import { HeroUpdate } from "../../db/Hero";
|
||||
import { RoleUpdate, Teraph } from "../../db/Role";
|
||||
import { GlobalAttr, HeroAttr, HeroAttrCell, RoleCeType } from "../../db/RoleCe";
|
||||
import { AttrCell, EquipAttr, HeroAttr, RoleCeType } from "../../db/RoleCe";
|
||||
import { AttributeCal } from "../../domain/roleField/attribute";
|
||||
import { gameData, getHeroStarByQuality, getHeroWakeByQuality, getTeraph } from "../../pubUtils/data";
|
||||
import { DicRandomEffectPool } from "../../pubUtils/dictionary/DicRandomEffectPool";
|
||||
@@ -10,10 +10,14 @@ import { addToMap, deepCopy } from "../../pubUtils/util";
|
||||
|
||||
class RoleCe {
|
||||
roleId: string;
|
||||
globalAttrs: Map<number, GlobalMainAttr|GlobalSubAttr> = new Map(); // attrId => GlobalCe
|
||||
heroAttrs: Map<string, HeroMainAttr|HeroSubAttr> = new Map(); // hid+attrId => HeroCe
|
||||
globalAttrs: Map<number, GlobalMainAttr|GlobalSubAttr> = new Map(); // attrId => GlobalAttr
|
||||
heroAttrs: Map<string, HeroMainAttr|HeroSubAttr> = new Map(); // hid+attrId => HeroAttr
|
||||
heroAttrsByHid: Map<number, string[]> = new Map(); // hid => [hid+attrId]
|
||||
equipAttrs: Map<string, EquipMainAttr|EquipSubAttr> = new Map(); // hid+eplaceId+attrId => EquipAttr
|
||||
equipAttrsByHid: Map<number, string[]> = new Map(); // hid => [hid+eplaceId+attrId]
|
||||
equipAttrsByHidAndEplace: Map<string, { hid: number, eplaceId: number, keys: string[]}> = new Map(); // hid+eplaceId =>+eplaceId+attrId]
|
||||
heroLv: Map<number, number> = new Map();
|
||||
equipLv: Map<string, number> = new Map(); // hid+eplaceId => lv
|
||||
|
||||
setRoleCe(roleCe: RoleCeType) {
|
||||
this.roleId = roleCe.roleId;
|
||||
@@ -28,6 +32,13 @@ class RoleCe {
|
||||
obj.setByRoleCe(cell);
|
||||
}
|
||||
}
|
||||
for(let { hid, eplaceId, lv, attrs } of roleCe.equipAttrs) {
|
||||
this.equipLv.set(`${hid}_${eplaceId}`, lv);
|
||||
for(let cell of attrs) {
|
||||
let obj = this.getEquipAttrByHidAndId(hid, eplaceId, cell.attrId);
|
||||
obj.setByRoleCe(cell);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public getGlobalAttrById(attrId: number) {
|
||||
@@ -62,14 +73,44 @@ class RoleCe {
|
||||
return this.heroAttrs.get(key);
|
||||
}
|
||||
|
||||
public getEquipAttrByHidAndId(hid: number, eplaceId: number, attrId: number) {
|
||||
let key = `${hid}_${eplaceId}_${attrId}`;
|
||||
if(!this.equipAttrs.has(key)) {
|
||||
if(ABI_TYPE_MAIN.indexOf(attrId) != -1) {
|
||||
let obj = new EquipMainAttr(hid, attrId);
|
||||
this.equipAttrs.set(key, obj);
|
||||
} else {
|
||||
let obj = new EquipSubAttr(hid, attrId);
|
||||
this.equipAttrs.set(key, obj);
|
||||
}
|
||||
|
||||
if(!this.equipAttrsByHid.has(hid)) {
|
||||
this.equipAttrsByHid.set(hid, []);
|
||||
}
|
||||
this.equipAttrsByHid.get(hid).push(key);
|
||||
let key2 = `${hid}_${eplaceId}`;
|
||||
if(!this.equipAttrsByHidAndEplace.has(key2)) {
|
||||
this.equipAttrsByHidAndEplace.set(key2, { hid, eplaceId, keys: []});
|
||||
}
|
||||
this.equipAttrsByHidAndEplace.get(key2).keys.push(key);
|
||||
}
|
||||
return this.equipAttrs.get(key);
|
||||
}
|
||||
|
||||
public calHeroCe() {
|
||||
let ces = new Map<number, { id: number, val: number }[]>(); // hid => [{attrId, val}]
|
||||
for(let [hid, keys] of this.heroAttrsByHid) {
|
||||
let lv = this.heroLv.get(hid)||1;
|
||||
for(let key of keys) {
|
||||
let { attrId, base, baseUp, starUp, skillRatio, skill, job } = this.heroAttrs.get(key);
|
||||
let { schoolRatio, title, teraph } = this.getGlobalAttrById(attrId);
|
||||
let val = ( base + lv * ( baseUp + starUp ) + skill + job) * (1 + skillRatio + schoolRatio ) + teraph + title;
|
||||
let { attrId, base = 0, job = 0, starUp = 0, connect = 0, favour = 0, talent = 0, equip = 0, equipUp = 0, equipStone = 0 } = this.heroAttrs.get(key);
|
||||
let { school = 0, teraph = 0, title = 0, scroll = 0, skin = 0 } = this.getGlobalAttrById(attrId);
|
||||
let val = 0;
|
||||
if(ABI_TYPE_MAIN.indexOf(attrId)) {
|
||||
// {[hp1 + lv * hp2 + hp3 * ( 1 + hp4 )] * (1 + hp5 ) + [( hp6+hp7)*(1+hp8)] } * ( 1 + hp9 ) + hp10 + hp11
|
||||
val = ((base + job + lv * starUp + connect * ( 1 + favour )) * ( 1 + school + talent ) + equip ) * ( 1 + equipUp ) + equipStone + teraph + title + scroll + skin;
|
||||
} else {
|
||||
val = base + job + talent + teraph + school + title + equip + skin;
|
||||
}
|
||||
if(!ces.has(hid)) ces.set(hid, []);
|
||||
ces.get(hid).push({ id: attrId, val });
|
||||
}
|
||||
@@ -84,14 +125,14 @@ class RoleCe {
|
||||
}
|
||||
|
||||
public getRoleCeTable() {
|
||||
let globalAttrs: GlobalAttr[] = [];
|
||||
let globalAttrs: AttrCell[] = [];
|
||||
for(let [_, globalAttr] of this.globalAttrs) {
|
||||
globalAttrs.push(globalAttr.getGlobalAttr());
|
||||
}
|
||||
let heroAttrs: HeroAttr[] = [];
|
||||
for(let [hid, keys] of this.heroAttrsByHid) {
|
||||
let lv = this.heroLv.get(hid);
|
||||
let attrs: HeroAttrCell[] = [];
|
||||
let attrs: AttrCell[] = [];
|
||||
for(let key of keys) {
|
||||
let heroAttr = this.heroAttrs.get(key);
|
||||
attrs.push(heroAttr.getHeroAttrCell());
|
||||
@@ -100,8 +141,20 @@ class RoleCe {
|
||||
hid, lv, attrs
|
||||
});
|
||||
}
|
||||
let equipAttrs: EquipAttr[] = [];
|
||||
for(let [key2, { hid, eplaceId, keys }] of this.equipAttrsByHidAndEplace) {
|
||||
let lv = this.equipLv.get(key2);
|
||||
let attrs: AttrCell[] = [];
|
||||
for(let key of keys) {
|
||||
let equipAttr = this.equipAttrs.get(key);
|
||||
attrs.push(equipAttr.getEquipAttrCell());
|
||||
}
|
||||
equipAttrs.push({
|
||||
hid, eplaceId, lv, attrs
|
||||
});
|
||||
}
|
||||
return {
|
||||
roleId: this.roleId, globalAttrs, heroAttrs
|
||||
roleId: this.roleId, globalAttrs, heroAttrs, equipAttrs
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -109,11 +162,11 @@ class RoleCe {
|
||||
// 计算函数
|
||||
export class CalCe extends RoleCe {
|
||||
public setInitHero(role: RoleUpdate, heroes: HeroUpdate[]) {
|
||||
this.roleId = role.roleId;
|
||||
for(let { hid, skinId, lv, quality, star, starStage, colorStar, colorStarStage, job, jobStage, } of heroes) {
|
||||
this.setHeroBase(hid, skinId);
|
||||
this.setHeroLv(hid, lv);
|
||||
this.setHeroStar(hid, job, quality, star, starStage, colorStar, colorStarStage);
|
||||
this.setSkill(hid, skinId, star, colorStar);
|
||||
this.setJob(hid, job, jobStage);
|
||||
}
|
||||
this.setTitle(role.title);
|
||||
@@ -127,10 +180,6 @@ export class CalCe extends RoleCe {
|
||||
let heroAttr = this.getHeroAttrByHidAndId(hid, attrId);
|
||||
heroAttr.base = value;
|
||||
}
|
||||
for(let [attrId, value] of dicHero.baseAbilityUpArr) {
|
||||
let heroAttr = this.getHeroAttrByHidAndId(hid, attrId);
|
||||
heroAttr.baseUp = value;
|
||||
}
|
||||
}
|
||||
|
||||
// 武将等级
|
||||
@@ -161,30 +210,6 @@ export class CalCe extends RoleCe {
|
||||
|
||||
}
|
||||
|
||||
// 武将星级解锁被动技能计算
|
||||
public setSkill(hid: number, skinId: number, _star: number, _colorStar: number) {
|
||||
let seidList = new Map<number, number>(); // type => seid
|
||||
let dicHero = gameData.hero.get(skinId);
|
||||
let { starSeidArr, colorStarSeidArr } = gameData.heroSkill.get(dicHero.skill);
|
||||
for (let { star, value, type } of starSeidArr) {
|
||||
if (_star >= star) seidList.set(type, value);
|
||||
}
|
||||
for (let { star, value, type } of colorStarSeidArr) {
|
||||
if (_colorStar >= star) seidList.set(type, value);
|
||||
}
|
||||
let list: number[] = [];
|
||||
for(let [_type, value] of seidList) list.push(value);
|
||||
let { fixUp, ratioUp } = this.addSeidEffect(list);
|
||||
for(let [attrId, value] of fixUp) {
|
||||
let heroAttr = this.getHeroAttrByHidAndId(hid, attrId);
|
||||
heroAttr.skill = value;
|
||||
}
|
||||
for(let [attrId, value] of ratioUp) {
|
||||
let heroAttr = this.getHeroAttrByHidAndId(hid, attrId);
|
||||
heroAttr.skillRatio = value;
|
||||
}
|
||||
}
|
||||
|
||||
// 职业基础
|
||||
public setJob(hid: number, job: number, jobStage: number) {
|
||||
const dicJob = gameData.job.get(job);
|
||||
@@ -284,15 +309,17 @@ export class CalCe extends RoleCe {
|
||||
|
||||
abstract class GlobalAllAttr {
|
||||
attrId: number;
|
||||
schoolRatio: number = 0;
|
||||
title: number = 0;
|
||||
school: number = 0;
|
||||
teraph: number = 0;
|
||||
title: number = 0;
|
||||
scroll: number = 0;
|
||||
skin: number = 0;
|
||||
|
||||
constructor(attrId: number) {
|
||||
this.attrId = attrId;
|
||||
}
|
||||
|
||||
abstract setByRoleCe(data: GlobalAttr): void;
|
||||
abstract setByRoleCe(data: AttrCell): void;
|
||||
abstract getValues(): number[];
|
||||
|
||||
public getGlobalAttr() {
|
||||
@@ -305,17 +332,21 @@ abstract class GlobalAllAttr {
|
||||
|
||||
class GlobalMainAttr extends GlobalAllAttr {
|
||||
|
||||
public setByRoleCe(globalAttr: GlobalAttr) {
|
||||
public setByRoleCe(globalAttr: AttrCell) {
|
||||
for(let i = 0; i < globalAttr.values.length; i++) {
|
||||
let value = globalAttr.values[i];
|
||||
if(value != undefined) {
|
||||
switch(i) {
|
||||
case GLOBAL_ATTR_INDEX.SCHOOL:
|
||||
this.schoolRatio = value; break;
|
||||
case GLOBAL_ATTR_INDEX.TITLE:
|
||||
this.title = value; break;
|
||||
case GLOBAL_ATTR_INDEX.TERAPH:
|
||||
case GLOBAL_MAIN_ATTR_INDEX.SCHOOL:
|
||||
this.school = value; break;
|
||||
case GLOBAL_MAIN_ATTR_INDEX.TERAPH:
|
||||
this.teraph = value; break;
|
||||
case GLOBAL_MAIN_ATTR_INDEX.TITLE:
|
||||
this.title = value; break;
|
||||
case GLOBAL_MAIN_ATTR_INDEX.SCROLL:
|
||||
this.scroll = value; break;
|
||||
case GLOBAL_MAIN_ATTR_INDEX.SKIN:
|
||||
this.skin = value; break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -323,14 +354,23 @@ class GlobalMainAttr extends GlobalAllAttr {
|
||||
|
||||
public getValues() {
|
||||
let values: number[] = [];
|
||||
for(let i = GLOBAL_ATTR_INDEX.START; i < GLOBAL_ATTR_INDEX.END; i++) {
|
||||
for(let i = GLOBAL_MAIN_ATTR_INDEX.START; i < GLOBAL_MAIN_ATTR_INDEX.END; i++) {
|
||||
switch(i) {
|
||||
case GLOBAL_ATTR_INDEX.SCHOOL:
|
||||
values.push(this.schoolRatio); break;
|
||||
case GLOBAL_ATTR_INDEX.TITLE:
|
||||
values.push(this.title); break;
|
||||
case GLOBAL_ATTR_INDEX.TERAPH:
|
||||
values.push(this.teraph); break;
|
||||
case GLOBAL_MAIN_ATTR_INDEX.SCHOOL:
|
||||
if(this.school) values[i] = this.school;
|
||||
break;
|
||||
case GLOBAL_MAIN_ATTR_INDEX.TERAPH:
|
||||
if(this.teraph) values[i] = this.teraph;
|
||||
break;
|
||||
case GLOBAL_MAIN_ATTR_INDEX.TITLE:
|
||||
if(this.title) values[i] = this.title;
|
||||
break;
|
||||
case GLOBAL_MAIN_ATTR_INDEX.SCROLL:
|
||||
if(this.scroll) values[i] = this.scroll;
|
||||
break;
|
||||
case GLOBAL_MAIN_ATTR_INDEX.SKIN:
|
||||
if(this.skin) values[i] = this.skin;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return values;
|
||||
@@ -339,17 +379,19 @@ class GlobalMainAttr extends GlobalAllAttr {
|
||||
|
||||
class GlobalSubAttr extends GlobalAllAttr {
|
||||
|
||||
public setByRoleCe(globalAttr: GlobalAttr) {
|
||||
public setByRoleCe(globalAttr: AttrCell) {
|
||||
for(let i = 0; i < globalAttr.values.length; i++) {
|
||||
let value = globalAttr.values[i];
|
||||
if(value != undefined) {
|
||||
switch(i) {
|
||||
case GLOBAL_ATTR_INDEX.SCHOOL:
|
||||
this.schoolRatio = value; break;
|
||||
case GLOBAL_ATTR_INDEX.TITLE:
|
||||
this.title = value; break;
|
||||
case GLOBAL_ATTR_INDEX.TERAPH:
|
||||
case GLOBAL_SUB_ATTR_INDEX.SCHOOL:
|
||||
this.school = value; break;
|
||||
case GLOBAL_MAIN_ATTR_INDEX.TERAPH:
|
||||
this.teraph = value; break;
|
||||
case GLOBAL_MAIN_ATTR_INDEX.TITLE:
|
||||
this.title = value; break;
|
||||
case GLOBAL_MAIN_ATTR_INDEX.SKIN:
|
||||
this.skin = value; break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -357,14 +399,20 @@ class GlobalSubAttr extends GlobalAllAttr {
|
||||
|
||||
public getValues() {
|
||||
let values: number[] = [];
|
||||
for(let i = GLOBAL_ATTR_INDEX.START; i < GLOBAL_ATTR_INDEX.END; i++) {
|
||||
for(let i = GLOBAL_MAIN_ATTR_INDEX.START; i < GLOBAL_MAIN_ATTR_INDEX.END; i++) {
|
||||
switch(i) {
|
||||
case GLOBAL_ATTR_INDEX.SCHOOL:
|
||||
values.push(this.schoolRatio); break;
|
||||
case GLOBAL_ATTR_INDEX.TITLE:
|
||||
values.push(this.title); break;
|
||||
case GLOBAL_ATTR_INDEX.TERAPH:
|
||||
values.push(this.teraph); break;
|
||||
case GLOBAL_MAIN_ATTR_INDEX.SCHOOL:
|
||||
if(this.school) values[i] = this.school;
|
||||
break;
|
||||
case GLOBAL_MAIN_ATTR_INDEX.TERAPH:
|
||||
if(this.teraph) values[i] = this.teraph;
|
||||
break;
|
||||
case GLOBAL_MAIN_ATTR_INDEX.TITLE:
|
||||
if(this.title) values[i] = this.title;
|
||||
break;
|
||||
case GLOBAL_MAIN_ATTR_INDEX.SKIN:
|
||||
if(this.skin) values[i] = this.skin;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return values;
|
||||
@@ -375,12 +423,14 @@ abstract class HeroAllAttr {
|
||||
hid: number;
|
||||
attrId: number;
|
||||
base: number = 0;
|
||||
lv: number = 0;
|
||||
baseUp: number = 0;
|
||||
starUp: number = 0;
|
||||
skillRatio: number = 0;
|
||||
skill: number = 0;
|
||||
job: number = 0;
|
||||
starUp: number = 0;
|
||||
connect: number = 0;
|
||||
favour: number = 0;
|
||||
talent: number = 0;
|
||||
equip: number = 0;
|
||||
equipUp: number = 0;
|
||||
equipStone: number = 0;
|
||||
|
||||
constructor(hid: number, attrId: number, ) {
|
||||
this.hid = hid;
|
||||
@@ -388,7 +438,7 @@ abstract class HeroAllAttr {
|
||||
|
||||
}
|
||||
|
||||
abstract setByRoleCe(data: GlobalAttr): void;
|
||||
abstract setByRoleCe(data: AttrCell): void;
|
||||
abstract getValues(): number[];
|
||||
|
||||
public getHeroAttrCell() {
|
||||
@@ -400,13 +450,29 @@ abstract class HeroAllAttr {
|
||||
}
|
||||
|
||||
class HeroMainAttr extends HeroAllAttr {
|
||||
public setByRoleCe(heroAttr: HeroAttrCell) {
|
||||
public setByRoleCe(heroAttr: AttrCell) {
|
||||
for(let i = 0; i < heroAttr.values.length; i++) {
|
||||
let value = heroAttr.values[i];
|
||||
if(value != undefined) {
|
||||
switch(i) {
|
||||
case HERO_ATTR_INDEX.BASE:
|
||||
this.base = value;
|
||||
case HERO_MAIN_ATTR_INDEX.BASE:
|
||||
this.base = value; break;
|
||||
case HERO_MAIN_ATTR_INDEX.JOB:
|
||||
this.job = value; break;
|
||||
case HERO_MAIN_ATTR_INDEX.STAR_UP:
|
||||
this.starUp = value; break;
|
||||
case HERO_MAIN_ATTR_INDEX.CONNECT:
|
||||
this.connect = value; break;
|
||||
case HERO_MAIN_ATTR_INDEX.FAVOUR:
|
||||
this.favour = value; break;
|
||||
case HERO_MAIN_ATTR_INDEX.TALENT:
|
||||
this.talent = value; break;
|
||||
case HERO_MAIN_ATTR_INDEX.EQUIP:
|
||||
this.equip = value; break;
|
||||
case HERO_MAIN_ATTR_INDEX.EQUIP_UP:
|
||||
this.equipUp = value; break;
|
||||
case HERO_MAIN_ATTR_INDEX.EQUIP_STONE:
|
||||
this.equipStone = value; break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -414,10 +480,35 @@ class HeroMainAttr extends HeroAllAttr {
|
||||
|
||||
public getValues() {
|
||||
let values: number[] = [];
|
||||
for(let i = HERO_ATTR_INDEX.START; i < HERO_ATTR_INDEX.END; i++) {
|
||||
for(let i = HERO_MAIN_ATTR_INDEX.START; i < HERO_MAIN_ATTR_INDEX.END; i++) {
|
||||
switch(i) {
|
||||
case HERO_ATTR_INDEX.BASE:
|
||||
values.push(this.base); break;
|
||||
case HERO_MAIN_ATTR_INDEX.BASE:
|
||||
if(this.base) values[i] = this.base;
|
||||
break;
|
||||
case HERO_MAIN_ATTR_INDEX.JOB:
|
||||
if(this.job) values[i] = this.job;
|
||||
break;
|
||||
case HERO_MAIN_ATTR_INDEX.STAR_UP:
|
||||
if(this.starUp) values[i] = this.starUp;
|
||||
break;
|
||||
case HERO_MAIN_ATTR_INDEX.CONNECT:
|
||||
if(this.connect) values[i] = this.connect;
|
||||
break;
|
||||
case HERO_MAIN_ATTR_INDEX.FAVOUR:
|
||||
if(this.favour) values[i] = this.favour;
|
||||
break;
|
||||
case HERO_MAIN_ATTR_INDEX.TALENT:
|
||||
if(this.talent) values[i] = this.talent;
|
||||
break;
|
||||
case HERO_MAIN_ATTR_INDEX.EQUIP:
|
||||
if(this.equip) values[i] = this.equip;
|
||||
break;
|
||||
case HERO_MAIN_ATTR_INDEX.EQUIP_UP:
|
||||
if(this.equipUp) values[i] = this.equipUp;
|
||||
break;
|
||||
case HERO_MAIN_ATTR_INDEX.EQUIP_STONE:
|
||||
if(this.equipStone) values[i] = this.equipStone;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return values;
|
||||
@@ -425,13 +516,19 @@ class HeroMainAttr extends HeroAllAttr {
|
||||
}
|
||||
|
||||
class HeroSubAttr extends HeroAllAttr {
|
||||
public setByRoleCe(heroAttr: HeroAttrCell) {
|
||||
public setByRoleCe(heroAttr: AttrCell) {
|
||||
for(let i = 0; i < heroAttr.values.length; i++) {
|
||||
let value = heroAttr.values[i];
|
||||
if(value != undefined) {
|
||||
switch(i) {
|
||||
case HERO_ATTR_INDEX.BASE:
|
||||
this.base = value;
|
||||
case HERO_SUB_ATTR_INDEX.BASE:
|
||||
this.base = value; break;
|
||||
case HERO_SUB_ATTR_INDEX.JOB:
|
||||
this.job = value; break;
|
||||
case HERO_SUB_ATTR_INDEX.TALENT:
|
||||
this.talent = value; break;
|
||||
case HERO_SUB_ATTR_INDEX.EQUIP:
|
||||
this.equip = value; break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -439,27 +536,192 @@ class HeroSubAttr extends HeroAllAttr {
|
||||
|
||||
public getValues() {
|
||||
let values: number[] = [];
|
||||
for(let i = HERO_ATTR_INDEX.START; i < HERO_ATTR_INDEX.END; i++) {
|
||||
for(let i = HERO_SUB_ATTR_INDEX.START; i < HERO_SUB_ATTR_INDEX.END; i++) {
|
||||
switch(i) {
|
||||
case HERO_ATTR_INDEX.BASE:
|
||||
values.push(this.base); break;
|
||||
case HERO_SUB_ATTR_INDEX.BASE:
|
||||
if(this.base) values[i] = this.base;
|
||||
break;
|
||||
case HERO_SUB_ATTR_INDEX.JOB:
|
||||
if(this.job) values[i] = this.job;
|
||||
break;
|
||||
case HERO_SUB_ATTR_INDEX.TALENT:
|
||||
if(this.talent) values[i] = this.talent;
|
||||
break;
|
||||
case HERO_SUB_ATTR_INDEX.EQUIP:
|
||||
if(this.equip) values[i] = this.equip;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return values;
|
||||
}
|
||||
}
|
||||
|
||||
enum GLOBAL_ATTR_INDEX {
|
||||
abstract class EquipAllAttr {
|
||||
hid: number;
|
||||
eplaceId: number;
|
||||
attrId: number;
|
||||
equipQuality: number = 0;
|
||||
equipStrengthen: number = 0;
|
||||
equipStar: number = 0;
|
||||
equipSuit: number = 0;
|
||||
jewel: number = 0;
|
||||
stone: number = 0;
|
||||
|
||||
constructor(hid: number, attrId: number, ) {
|
||||
this.hid = hid;
|
||||
this.attrId = attrId;
|
||||
|
||||
}
|
||||
|
||||
abstract setByRoleCe(data: AttrCell): void;
|
||||
abstract getValues(): number[];
|
||||
|
||||
public getEquipAttrCell() {
|
||||
return {
|
||||
attrId: this.attrId,
|
||||
values: this.getValues()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class EquipMainAttr extends EquipAllAttr {
|
||||
public setByRoleCe(equipAttr: AttrCell) {
|
||||
for(let i = 0; i < equipAttr.values.length; i++) {
|
||||
let value = equipAttr.values[i];
|
||||
if(value != undefined) {
|
||||
switch(i) {
|
||||
case EQUIP_MAIN_ATTR_INDEX.EQUIP_QUALITY:
|
||||
this.equipQuality = value; break;
|
||||
case EQUIP_MAIN_ATTR_INDEX.EQUIP_STRENGTH:
|
||||
this.equipStrengthen = value; break;
|
||||
case EQUIP_MAIN_ATTR_INDEX.EQUIP_STAR:
|
||||
this.equipStar = value; break;
|
||||
case EQUIP_MAIN_ATTR_INDEX.EQUIP_SUIT:
|
||||
this.equipSuit = value; break;
|
||||
case EQUIP_MAIN_ATTR_INDEX.JEWEL:
|
||||
this.jewel = value; break;
|
||||
case EQUIP_MAIN_ATTR_INDEX.STONE:
|
||||
this.stone = value; break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public getValues() {
|
||||
let values: number[] = [];
|
||||
for(let i = EQUIP_MAIN_ATTR_INDEX.START; i < EQUIP_MAIN_ATTR_INDEX.END; i++) {
|
||||
switch(i) {
|
||||
case EQUIP_MAIN_ATTR_INDEX.EQUIP_QUALITY:
|
||||
if(this.equipQuality) values[i] = this.equipQuality;
|
||||
break;
|
||||
case EQUIP_MAIN_ATTR_INDEX.EQUIP_STRENGTH:
|
||||
if(this.equipStrengthen) values[i] = this.equipStrengthen;
|
||||
break;
|
||||
case EQUIP_MAIN_ATTR_INDEX.EQUIP_STAR:
|
||||
if(this.equipStar) values[i] = this.equipStar;
|
||||
break;
|
||||
case EQUIP_MAIN_ATTR_INDEX.EQUIP_SUIT:
|
||||
if(this.equipSuit) values[i] = this.equipSuit;
|
||||
break;
|
||||
case EQUIP_MAIN_ATTR_INDEX.JEWEL:
|
||||
if(this.jewel) values[i] = this.jewel;
|
||||
break;
|
||||
case EQUIP_MAIN_ATTR_INDEX.STONE:
|
||||
if(this.stone) values[i] = this.stone;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return values;
|
||||
}
|
||||
}
|
||||
|
||||
class EquipSubAttr extends EquipAllAttr {
|
||||
public setByRoleCe(equipAttr: AttrCell) {
|
||||
for(let i = 0; i < equipAttr.values.length; i++) {
|
||||
let value = equipAttr.values[i];
|
||||
if(value != undefined) {
|
||||
switch(i) {
|
||||
case EQUIP_SUB_ATTR_INDEX.EQUIP_STAR:
|
||||
this.equipStar = value; break;
|
||||
case EQUIP_SUB_ATTR_INDEX.JEWEL:
|
||||
this.jewel = value; break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public getValues() {
|
||||
let values: number[] = [];
|
||||
for(let i = EQUIP_SUB_ATTR_INDEX.START; i < EQUIP_SUB_ATTR_INDEX.END; i++) {
|
||||
switch(i) {
|
||||
case EQUIP_SUB_ATTR_INDEX.EQUIP_STAR:
|
||||
if(this.equipStar) values[i] = this.equipStar;
|
||||
break;
|
||||
case EQUIP_SUB_ATTR_INDEX.JEWEL:
|
||||
if(this.jewel) values[i] = this.jewel;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return values;
|
||||
}
|
||||
}
|
||||
|
||||
enum GLOBAL_MAIN_ATTR_INDEX {
|
||||
START,
|
||||
SCHOOL = 0,
|
||||
TITLE = 1,
|
||||
TERAPH = 2,
|
||||
SCHOOL = 0, // hp5,百家学宫百分比加成(dic_zyz_schoolRate的mainAttrApercent)
|
||||
TERAPH = 1, // hp11, 神像加成(直接读数据库teraph字段的值)
|
||||
TITLE = 2, // hp11, 爵位加成(dic_zyz_title的hp)
|
||||
SCROLL = 3, // hp11,名将谱加成(dic_zyz_heroScroll的hp)
|
||||
SKIN = 4, // hp12, 皮肤加成(dic_zyz_fashion的actorAttr)
|
||||
END
|
||||
}
|
||||
|
||||
enum HERO_ATTR_INDEX {
|
||||
enum GLOBAL_SUB_ATTR_INDEX {
|
||||
START,
|
||||
BASE = 0, // 角色基础属性(dic_zyz_hero的hp)
|
||||
BASE_UP = 1,
|
||||
SCHOOL = 0, // attr5, 百家学宫(根据dic_zyz_school中的upAttribute决定书院加的是那些次级属性,具体值读取dic_zyz_schoolRate中的assiAttrAddValue一列)
|
||||
TERAPH = 1, // attr4, 神像加成(dic_zyz_teraph中的assistAttrValue)
|
||||
TITLE = 2, // attr6, 爵位(dic_zyz_title中的pdi、mdi)
|
||||
SKIN = 3, // attr8, 皮肤
|
||||
END
|
||||
}
|
||||
|
||||
enum HERO_MAIN_ATTR_INDEX {
|
||||
START,
|
||||
BASE = 0, // hp1, 角色基础属性(dic_zyz_hero的hp)
|
||||
JOB = 1, // hp1, 职业属性(dic_zyz_job的attr)
|
||||
STAR_UP = 2, // hp2, 角色升星成长(dic_zyz_hero_star的hp或dic_zyz_hero_wake的hp)
|
||||
CONNECT = 3, // hp3, 角色羁绊固定值(dic_zyz_friend_ship的attribute)
|
||||
FAVOUR = 4, // hp4, 声望加成(dic_zyz_friend_ship_level的add)
|
||||
TALENT = 5, // hp5, 天赋树百分比加成(dic_zyz_hero_talent的levelSeid,然后对应到dic_zyz_se)
|
||||
EQUIP = 6, // (hp6+hp7)*(1+hp8) 装备,equipAttr加成之后加到这里
|
||||
EQUIP_UP = 7, // hp9, 天晶洗练处的主属性百分比加成,equipAttr中计算好加和加入
|
||||
EQUIP_STONE = 8, // hp10, 地玉石增加的固定值,equipAttr中计算好和加入
|
||||
END
|
||||
}
|
||||
|
||||
enum HERO_SUB_ATTR_INDEX {
|
||||
START,
|
||||
BASE = 0, // attr1,系统参数表中所有人
|
||||
JOB = 1, // attr2, 职业的attr
|
||||
TALENT = 2, // attr3, 天赋树百分比加成 (dic_zyz_hero_talent的levelSeid,然后对应到dic_zyz_se)
|
||||
EQUIP = 3, // attr7+attr9, 天晶加成和精炼加成,equipAttr加起来
|
||||
END
|
||||
}
|
||||
|
||||
enum EQUIP_MAIN_ATTR_INDEX {
|
||||
START,
|
||||
EQUIP_QUALITY = 0, // hp6, 装备升品基础值加成(dic_zyz_equipQuality)
|
||||
EQUIP_STRENGTH = 1,// hp7, 装备强化值(需改表,改为键值对)
|
||||
EQUIP_STAR = 2, // hp8, 装备(dic_zyz_equipStar)
|
||||
EQUIP_SUIT = 3, // hp8, 装备套装加成(dic_zyz_equipSuit)
|
||||
JEWEL = 4, // hp9, 天晶洗练出的主属性百分比加成,equipAttr加起来
|
||||
STONE = 5, // hp10,地玉石增加的固定值,equipAttr加起来
|
||||
END
|
||||
}
|
||||
|
||||
enum EQUIP_SUB_ATTR_INDEX {
|
||||
START,
|
||||
JEWEL = 0, // attr7, 天晶随机属性(随机出来的值在dic_zyz_randomEffectPool中读最终值)
|
||||
EQUIP_STAR = 1, // attr8, 精炼次级属性(dic_zyz_equipStar的subAttr)
|
||||
END
|
||||
}
|
||||
Reference in New Issue
Block a user