武将:一键升星
This commit is contained in:
@@ -196,17 +196,19 @@ export class HeroHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 武将升星
|
// 武将升星
|
||||||
public async starUp(msg: { hid: number, star: number, starStage: number }, session: BackendSession) {
|
public async starUp(msg: { hid: number, star: number, starStage: number, isOneClick: boolean }, session: BackendSession) {
|
||||||
let roleId: string = session.get('roleId');
|
let roleId: string = session.get('roleId');
|
||||||
const serverId = session.get('serverId');
|
const serverId = session.get('serverId');
|
||||||
let sid: string = session.get('sid');
|
let sid: string = session.get('sid');
|
||||||
let funcs: number[] = session.get('funcs');
|
let funcs: number[] = session.get('funcs');
|
||||||
|
|
||||||
let { hid, star, starStage } = msg;
|
let { hid, star, starStage, isOneClick } = msg;
|
||||||
// 根据dic_hero 获得 1. 碎片id 2. 碎片数量 3. 初始武将星级 4. 初始品质
|
// 根据dic_hero 获得 1. 碎片id 2. 碎片数量 3. 初始武将星级 4. 初始品质
|
||||||
let dicHero = gameData.hero.get(hid);
|
let dicHero = gameData.hero.get(hid);
|
||||||
if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||||
let { pieceId } = dicHero;
|
let { pieceId, jobid } = dicHero;
|
||||||
|
let dicJob = gameData.job.get(jobid);
|
||||||
|
if(!dicJob) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||||
|
|
||||||
let hero = await HeroModel.findByHidAndRole(hid, roleId);
|
let hero = await HeroModel.findByHidAndRole(hid, roleId);
|
||||||
if (!hero) return resResult(STATUS.ROLE_HERO_NOT_EXISTS);
|
if (!hero) return resResult(STATUS.ROLE_HERO_NOT_EXISTS);
|
||||||
@@ -219,17 +221,23 @@ export class HeroHandler {
|
|||||||
return resResult(STATUS.ROLE_STAR_REACH_MAX);
|
return resResult(STATUS.ROLE_STAR_REACH_MAX);
|
||||||
}
|
}
|
||||||
// 根据dic_zyz_hero_star 计算需要花的碎片并检查碎片数量
|
// 根据dic_zyz_hero_star 计算需要花的碎片并检查碎片数量
|
||||||
const curDicHeroStar = getHeroStarByQuality(quality, oldStar);
|
const curDicHeroStar = getHeroStarByQuality(dicJob.job_class, quality, oldStar);
|
||||||
if (!curDicHeroStar) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
if (!curDicHeroStar) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||||
|
|
||||||
|
let newStarStage = 0;
|
||||||
|
let max = isOneClick? oldStarStage + 1: ABI_STAGE.END;
|
||||||
|
for(let i = 0; i < max; i++ ) {
|
||||||
|
let costResult = await handleCost(roleId, sid, [{ id: pieceId, count: curDicHeroStar.advanceUpFragmentNum }]);
|
||||||
|
if (!costResult) break;
|
||||||
|
newStarStage++;
|
||||||
|
}
|
||||||
|
if(newStarStage == 0) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||||
|
|
||||||
let costResult = await handleCost(roleId, sid, [{ id: pieceId, count: curDicHeroStar.advanceUpFragmentNum }]);
|
let isUpStar = newStarStage == ABI_STAGE.END;
|
||||||
if (!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
|
||||||
|
|
||||||
let isUpStar = oldStarStage + 1 == ABI_STAGE.END;
|
|
||||||
|
|
||||||
let update = {
|
let update = {
|
||||||
star: isUpStar ? oldStar + 1 : oldStar,
|
star: isUpStar ? oldStar + 1 : oldStar,
|
||||||
starStage: isUpStar ? ABI_STAGE.START : oldStarStage + 1
|
starStage: isUpStar ? ABI_STAGE.START : newStarStage
|
||||||
}
|
}
|
||||||
|
|
||||||
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.STAR, sid, roleId, hero, update);
|
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.STAR, sid, roleId, hero, update);
|
||||||
@@ -307,7 +315,7 @@ export class HeroHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 武将觉醒
|
// 武将觉醒
|
||||||
public async wakeUp(msg: { hid: number, colorStar: number, colorStarStage: number }, session: BackendSession) {
|
public async wakeUp(msg: { hid: number, colorStar: number, colorStarStage: number, isOneClick: boolean }, session: BackendSession) {
|
||||||
|
|
||||||
let roleId: string = session.get('roleId');
|
let roleId: string = session.get('roleId');
|
||||||
let sid: string = session.get('sid');
|
let sid: string = session.get('sid');
|
||||||
@@ -315,11 +323,13 @@ export class HeroHandler {
|
|||||||
const serverId = session.get('serverId');
|
const serverId = session.get('serverId');
|
||||||
let funcs: number[] = session.get('funcs');
|
let funcs: number[] = session.get('funcs');
|
||||||
|
|
||||||
let { hid, colorStar, colorStarStage } = msg;
|
let { hid, colorStar, colorStarStage, isOneClick } = msg;
|
||||||
// 根据dic_hero 获得 1. 碎片id 2. 碎片数量 3. 初始武将星级 4. 初始品质
|
// 根据dic_hero 获得 1. 碎片id 2. 碎片数量 3. 初始武将星级 4. 初始品质
|
||||||
let dicHero = gameData.hero.get(hid);
|
let dicHero = gameData.hero.get(hid);
|
||||||
if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||||
let { pieceId } = dicHero;
|
let { pieceId, jobid } = dicHero;
|
||||||
|
let dicJob = gameData.job.get(jobid);
|
||||||
|
if (!dicJob) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||||
|
|
||||||
let hero = await HeroModel.findByHidAndRole(hid, roleId);
|
let hero = await HeroModel.findByHidAndRole(hid, roleId);
|
||||||
if (!hero) return resResult(STATUS.ROLE_HERO_NOT_EXISTS);
|
if (!hero) return resResult(STATUS.ROLE_HERO_NOT_EXISTS);
|
||||||
@@ -335,21 +345,27 @@ export class HeroHandler {
|
|||||||
return resResult(STATUS.ROLE_QUALITY_NOT_ENOUGH);
|
return resResult(STATUS.ROLE_QUALITY_NOT_ENOUGH);
|
||||||
}
|
}
|
||||||
// 根据dic_zyz_hero_wake 计算需要花的碎片并检查碎片数量
|
// 根据dic_zyz_hero_wake 计算需要花的碎片并检查碎片数量
|
||||||
const curDicHeroStar = getHeroWakeByQuality(dicHero.quality, oldColorStar)
|
const curDicHeroStar = getHeroWakeByQuality(dicJob.job_class, dicHero.quality, oldColorStar)
|
||||||
if (!curDicHeroStar) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
if (!curDicHeroStar) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||||
|
|
||||||
let { fragmentNum, consume } = curDicHeroStar;
|
let newColorStarStage = 0;
|
||||||
|
let max = isOneClick? oldColorStarStage + 1: ABI_STAGE.END;
|
||||||
// console.log(JSON.stringify([{id: pieceId, count: fragmentNum}, ...consumeArr]))
|
for(let i = 0; i < max; i++) {
|
||||||
let costResult = await handleCost(roleId, sid, [{ id: pieceId, count: fragmentNum }, ...consume]);
|
let { fragmentNum, consume } = curDicHeroStar;
|
||||||
if (!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
|
||||||
|
// console.log(JSON.stringify([{id: pieceId, count: fragmentNum}, ...consumeArr]))
|
||||||
|
let costResult = await handleCost(roleId, sid, [{ id: pieceId, count: fragmentNum }, ...consume]);
|
||||||
|
if (!costResult) break;
|
||||||
|
newColorStarStage++;
|
||||||
|
}
|
||||||
|
if(newColorStarStage == 0) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||||
|
|
||||||
let isWakeUp = oldColorStar == 0;
|
let isWakeUp = oldColorStar == 0;
|
||||||
let isUpStar = isWakeUp || oldColorStarStage + 1 == ABI_STAGE.END;
|
let isUpStar = isWakeUp || newColorStarStage == ABI_STAGE.END;
|
||||||
|
|
||||||
let update = {
|
let update = {
|
||||||
colorStar: isUpStar ? oldColorStar + 1 : oldColorStar,
|
colorStar: isUpStar ? oldColorStar + 1 : oldColorStar,
|
||||||
colorStarStage: isUpStar ? ABI_STAGE.START : oldColorStarStage + 1
|
colorStarStage: isUpStar ? ABI_STAGE.START : newColorStarStage
|
||||||
}
|
}
|
||||||
|
|
||||||
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.COLORSTAR, sid, roleId, hero, update);
|
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.COLORSTAR, sid, roleId, hero, update);
|
||||||
|
|||||||
@@ -9,15 +9,15 @@ export enum ABI_TYPE{
|
|||||||
ABI_HP = 1,
|
ABI_HP = 1,
|
||||||
/**物攻 */
|
/**物攻 */
|
||||||
ABI_ATK = 2,
|
ABI_ATK = 2,
|
||||||
/**策攻 */
|
/**策攻 (废弃)*/
|
||||||
ABI_MATK = 3,
|
ABI_MATK = 3,
|
||||||
/**物防 */
|
/**物防 */
|
||||||
ABI_DEF = 4,
|
ABI_DEF = 4,
|
||||||
/**策防 */
|
/**策防 */
|
||||||
ABI_MDEF = 5,
|
ABI_MDEF = 5,
|
||||||
/**敏捷 */
|
/**敏捷 (废弃)*/
|
||||||
ABI_AGI = 6,
|
ABI_AGI = 6,
|
||||||
/**幸运 */
|
/**幸运 (废弃)*/
|
||||||
ABI_LUK = 7,
|
ABI_LUK = 7,
|
||||||
/**移动 */
|
/**移动 */
|
||||||
ABI_SPEED = 8,
|
ABI_SPEED = 8,
|
||||||
@@ -30,9 +30,9 @@ export enum ABI_TYPE{
|
|||||||
ABI_FLEE = 11,
|
ABI_FLEE = 11,
|
||||||
/**抗暴等级 */
|
/**抗暴等级 */
|
||||||
ABI_ANT_CRI = 12,
|
ABI_ANT_CRI = 12,
|
||||||
/**伤害加深等级 */
|
/**伤害加深等级 (废弃) */
|
||||||
ABI_DAMAGE_INCREASE = 13,
|
ABI_DAMAGE_INCREASE = 13,
|
||||||
/**伤害减免等级 */
|
/**伤害减免等级 (废弃) */
|
||||||
ABI_DAMAGE_DECREASE = 14,
|
ABI_DAMAGE_DECREASE = 14,
|
||||||
/**忽视防御等级 */
|
/**忽视防御等级 */
|
||||||
ABI_DEF_IGNORE = 15,
|
ABI_DEF_IGNORE = 15,
|
||||||
@@ -42,6 +42,16 @@ export enum ABI_TYPE{
|
|||||||
ABI_AP = 17,
|
ABI_AP = 17,
|
||||||
/**暴击伤害 */
|
/**暴击伤害 */
|
||||||
ABI_DAMAGE_CRI = 18,
|
ABI_DAMAGE_CRI = 18,
|
||||||
|
/**物伤加深 */
|
||||||
|
ABI_PDAMAGE_INC = 19,
|
||||||
|
/**法伤加深 */
|
||||||
|
ABI_MDAMAGE_INC = 20,
|
||||||
|
/**物伤减免 */
|
||||||
|
ABI_PDAMAGE_DEC = 21,
|
||||||
|
/**物伤减免 */
|
||||||
|
ABI_MDAMAGE_DEC = 22,
|
||||||
|
/**反击伤害 */
|
||||||
|
ABI_STRIKE_BACK = 23,
|
||||||
|
|
||||||
ABI_MAX,
|
ABI_MAX,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -81,6 +81,16 @@ export class Attribute {
|
|||||||
@prop({ required: false })
|
@prop({ required: false })
|
||||||
damageCri: number = 0;
|
damageCri: number = 0;
|
||||||
@prop({ required: false })
|
@prop({ required: false })
|
||||||
|
pDamageInc: number = 0;
|
||||||
|
@prop({ required: false })
|
||||||
|
mDamageInc: number = 0;
|
||||||
|
@prop({ required: false })
|
||||||
|
pDamageDec: number = 0;
|
||||||
|
@prop({ required: false })
|
||||||
|
mDemageDec: number = 0;
|
||||||
|
@prop({ required: false })
|
||||||
|
strikeBack: number = 0;
|
||||||
|
@prop({ required: false })
|
||||||
ce?: number = 0;
|
ce?: number = 0;
|
||||||
|
|
||||||
setByDbData(roleAttrs: CeAttrDataRole[], heroAttrs: CeAttrData[]) {
|
setByDbData(roleAttrs: CeAttrDataRole[], heroAttrs: CeAttrData[]) {
|
||||||
@@ -131,7 +141,12 @@ export class Attribute {
|
|||||||
damageIncrease: this.damageIncrease / HERO_SUB_ATTR_RATIO / HERO_CE_RATIO / HERO_CE_RATIO,
|
damageIncrease: this.damageIncrease / HERO_SUB_ATTR_RATIO / HERO_CE_RATIO / HERO_CE_RATIO,
|
||||||
damageDecrease: this.damageDecrease / HERO_SUB_ATTR_RATIO / HERO_CE_RATIO / HERO_CE_RATIO,
|
damageDecrease: this.damageDecrease / HERO_SUB_ATTR_RATIO / HERO_CE_RATIO / HERO_CE_RATIO,
|
||||||
defIngnore: this.defIngnore / HERO_SUB_ATTR_RATIO / HERO_CE_RATIO / HERO_CE_RATIO,
|
defIngnore: this.defIngnore / HERO_SUB_ATTR_RATIO / HERO_CE_RATIO / HERO_CE_RATIO,
|
||||||
damageCri: this.damageCri / HERO_SUB_ATTR_RATIO / HERO_CE_RATIO / HERO_CE_RATIO
|
damageCri: this.damageCri / HERO_SUB_ATTR_RATIO / HERO_CE_RATIO / HERO_CE_RATIO,
|
||||||
|
pDamageInc: this.pDamageInc / HERO_SUB_ATTR_RATIO / HERO_CE_RATIO / HERO_CE_RATIO,
|
||||||
|
mDamageInc: this.mDamageInc / HERO_SUB_ATTR_RATIO / HERO_CE_RATIO / HERO_CE_RATIO,
|
||||||
|
pDamageDec: this.pDamageDec / HERO_SUB_ATTR_RATIO / HERO_CE_RATIO / HERO_CE_RATIO,
|
||||||
|
mDemageDec: this.mDemageDec / HERO_SUB_ATTR_RATIO / HERO_CE_RATIO / HERO_CE_RATIO,
|
||||||
|
strikeBack: this.strikeBack / HERO_SUB_ATTR_RATIO / HERO_CE_RATIO / HERO_CE_RATIO
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -161,6 +176,11 @@ export class Attribute {
|
|||||||
newAttr.bloodSuck = reduceCe(this.bloodSuck);
|
newAttr.bloodSuck = reduceCe(this.bloodSuck);
|
||||||
newAttr.ap = reduceCe(this.ap);
|
newAttr.ap = reduceCe(this.ap);
|
||||||
newAttr.damageCri = reduceCe(this.damageCri);
|
newAttr.damageCri = reduceCe(this.damageCri);
|
||||||
|
newAttr.pDamageInc = reduceCe(this.pDamageInc);
|
||||||
|
newAttr.mDamageInc = reduceCe(this.mDamageInc);
|
||||||
|
newAttr.pDamageDec = reduceCe(this.pDamageDec);
|
||||||
|
newAttr.mDemageDec = reduceCe(this.mDemageDec);
|
||||||
|
newAttr.strikeBack = reduceCe(this.strikeBack);
|
||||||
return newAttr;
|
return newAttr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -365,12 +365,12 @@ export function comBtlRanges() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export function getHeroStarByQuality(quality: number, star: number) {
|
export function getHeroStarByQuality(classType: number, quality: number, star: number) {
|
||||||
return gameData.heroStar.get(`${quality}_${star}`);
|
return gameData.heroStar.get(`${classType}_${quality}_${star}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getHeroWakeByQuality(quality: number, star: number) {
|
export function getHeroWakeByQuality(classType: number, quality: number, star: number) {
|
||||||
return gameData.heroWake.get(`${quality}_${star}`);
|
return gameData.heroWake.get(`${classType}_${quality}_${star}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getMaxGradeByjobClass(jobClass: number) {
|
export function getMaxGradeByjobClass(jobClass: number) {
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ export interface DicHeroStar {
|
|||||||
|
|
||||||
// 唯一id
|
// 唯一id
|
||||||
readonly id: number;
|
readonly id: number;
|
||||||
|
// 职业类型
|
||||||
|
readonly classType: number;
|
||||||
// 品质
|
// 品质
|
||||||
readonly quality: number;
|
readonly quality: number;
|
||||||
// 星级
|
// 星级
|
||||||
@@ -20,7 +22,7 @@ export interface DicHeroStar {
|
|||||||
|
|
||||||
|
|
||||||
type KeysEnum<T> = { [P in keyof Required<T>]: true };
|
type KeysEnum<T> = { [P in keyof Required<T>]: true };
|
||||||
const DicHeroStarKeys: KeysEnum<DicHeroStar> = {id: true, quality: true, star: true, advanceUpFragmentNum: true, ceAttr: true};
|
const DicHeroStarKeys: KeysEnum<DicHeroStar> = {id: true, classType: true, quality: true, star: true, advanceUpFragmentNum: true, ceAttr: true};
|
||||||
|
|
||||||
export const dicHeroStar = new Map<string, DicHeroStar>();
|
export const dicHeroStar = new Map<string, DicHeroStar>();
|
||||||
export function loadHeroStar() {
|
export function loadHeroStar() {
|
||||||
@@ -28,7 +30,8 @@ export function loadHeroStar() {
|
|||||||
|
|
||||||
arr.forEach(o => {
|
arr.forEach(o => {
|
||||||
o.ceAttr = parseCeAttr(o);
|
o.ceAttr = parseCeAttr(o);
|
||||||
dicHeroStar.set(`${o.quality}_${o.star}`, _.pick(o, Object.keys(DicHeroStarKeys)));
|
o.classType = o.class_type;
|
||||||
|
dicHeroStar.set(`${o.classType}_${o.quality}_${o.star}`, _.pick(o, Object.keys(DicHeroStarKeys)));
|
||||||
});
|
});
|
||||||
arr = undefined;
|
arr = undefined;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ export interface DicHeroWake {
|
|||||||
|
|
||||||
// 唯一id
|
// 唯一id
|
||||||
readonly id: number;
|
readonly id: number;
|
||||||
|
// 职业类型
|
||||||
|
readonly classType: number;
|
||||||
// 品质
|
// 品质
|
||||||
readonly quality: number;
|
readonly quality: number;
|
||||||
// 彩星级
|
// 彩星级
|
||||||
@@ -22,7 +24,7 @@ export interface DicHeroWake {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type KeysEnum<T> = { [P in keyof Required<T>]: true };
|
type KeysEnum<T> = { [P in keyof Required<T>]: true };
|
||||||
const DicHeroWakeKeys: KeysEnum<DicHeroWake> = {id: true, quality: true, star: true, fragmentNum: true, consume: true, ceAttr: true};
|
const DicHeroWakeKeys: KeysEnum<DicHeroWake> = {id: true, classType: true, quality: true, star: true, fragmentNum: true, consume: true, ceAttr: true};
|
||||||
|
|
||||||
export const dicHeroWake = new Map<string, DicHeroWake>();
|
export const dicHeroWake = new Map<string, DicHeroWake>();
|
||||||
export function loadHeroWake() {
|
export function loadHeroWake() {
|
||||||
@@ -31,7 +33,8 @@ export function loadHeroWake() {
|
|||||||
arr.forEach(o => {
|
arr.forEach(o => {
|
||||||
o.consume = parseGoodStr(o.consume);
|
o.consume = parseGoodStr(o.consume);
|
||||||
o.ceAttr = parseCeAttr(o);
|
o.ceAttr = parseCeAttr(o);
|
||||||
dicHeroWake.set(`${o.quality}_${o.star}`, _.pick(o, Object.keys(DicHeroWakeKeys)));
|
o.classType = o.class_type;
|
||||||
|
dicHeroWake.set(`${o.classType}_${o.quality}_${o.star}`, _.pick(o, Object.keys(DicHeroWakeKeys)));
|
||||||
});
|
});
|
||||||
arr = undefined;
|
arr = undefined;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -293,7 +293,8 @@ export function calHeroStarIncAttr(originHero: HeroType, update: HeroUpdate, typ
|
|||||||
if(starStage == ABI_STAGE.START) star--;
|
if(starStage == ABI_STAGE.START) star--;
|
||||||
if(colorStarStage == ABI_STAGE.START) colorStar--;
|
if(colorStarStage == ABI_STAGE.START) colorStar--;
|
||||||
|
|
||||||
const dicStar = isWake ? getHeroWakeByQuality(dicHero.quality, colorStar) : getHeroStarByQuality(quality, star); // 星级表
|
const dicJob = gameData.job.get(dicHero.jobid);
|
||||||
|
const dicStar = isWake ? getHeroWakeByQuality(dicJob.job_class, dicHero.quality, colorStar) : getHeroStarByQuality(dicJob.job_class, quality, star); // 星级表
|
||||||
|
|
||||||
|
|
||||||
let stages = new Array<number>(); // 需要升级的阶
|
let stages = new Array<number>(); // 需要升级的阶
|
||||||
@@ -302,6 +303,14 @@ export function calHeroStarIncAttr(originHero: HeroType, update: HeroUpdate, typ
|
|||||||
} 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) {
|
||||||
|
let end = isUpStar? ABI_STAGE.END: starStage;
|
||||||
|
if(end < originStarStage) {
|
||||||
|
stages = getAllAttrStage();
|
||||||
|
} else {
|
||||||
|
for(let i = originStarStage; i < end; i++) {
|
||||||
|
stages.push(i + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
stages.push(isUpStar? ABI_STAGE.END: starStage);
|
stages.push(isUpStar? ABI_STAGE.END: starStage);
|
||||||
} else if (type == HERO_SYSTEM_TYPE.QUALITY) {
|
} else if (type == HERO_SYSTEM_TYPE.QUALITY) {
|
||||||
stages = getAllAttrStage();
|
stages = getAllAttrStage();
|
||||||
@@ -309,7 +318,14 @@ export function calHeroStarIncAttr(originHero: HeroType, update: HeroUpdate, typ
|
|||||||
if (isFirstWake) { // 首次觉醒
|
if (isFirstWake) { // 首次觉醒
|
||||||
stages = getAllAttrStage();
|
stages = getAllAttrStage();
|
||||||
} else {
|
} else {
|
||||||
stages.push(isUpStar ? ABI_STAGE.END : colorStarStage);
|
let end = isUpStar? ABI_STAGE.END: colorStarStage;
|
||||||
|
if(end < originColorStarStage) {
|
||||||
|
stages = getAllAttrStage();
|
||||||
|
} else {
|
||||||
|
for(let i = originColorStarStage; i < end; i++) {
|
||||||
|
stages.push(i + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (let stage of stages) {
|
for (let stage of stages) {
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user