武将:一键升星
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');
|
||||
const serverId = session.get('serverId');
|
||||
let sid: string = session.get('sid');
|
||||
let funcs: number[] = session.get('funcs');
|
||||
|
||||
let { hid, star, starStage } = msg;
|
||||
let { hid, star, starStage, isOneClick } = msg;
|
||||
// 根据dic_hero 获得 1. 碎片id 2. 碎片数量 3. 初始武将星级 4. 初始品质
|
||||
let dicHero = gameData.hero.get(hid);
|
||||
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);
|
||||
if (!hero) return resResult(STATUS.ROLE_HERO_NOT_EXISTS);
|
||||
@@ -219,17 +221,23 @@ export class HeroHandler {
|
||||
return resResult(STATUS.ROLE_STAR_REACH_MAX);
|
||||
}
|
||||
// 根据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);
|
||||
|
||||
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 }]);
|
||||
if (!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||
|
||||
let isUpStar = oldStarStage + 1 == ABI_STAGE.END;
|
||||
let isUpStar = newStarStage == ABI_STAGE.END;
|
||||
|
||||
let update = {
|
||||
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);
|
||||
@@ -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 sid: string = session.get('sid');
|
||||
@@ -315,11 +323,13 @@ export class HeroHandler {
|
||||
const serverId = session.get('serverId');
|
||||
let funcs: number[] = session.get('funcs');
|
||||
|
||||
let { hid, colorStar, colorStarStage } = msg;
|
||||
let { hid, colorStar, colorStarStage, isOneClick } = msg;
|
||||
// 根据dic_hero 获得 1. 碎片id 2. 碎片数量 3. 初始武将星级 4. 初始品质
|
||||
let dicHero = gameData.hero.get(hid);
|
||||
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);
|
||||
if (!hero) return resResult(STATUS.ROLE_HERO_NOT_EXISTS);
|
||||
@@ -335,21 +345,27 @@ export class HeroHandler {
|
||||
return resResult(STATUS.ROLE_QUALITY_NOT_ENOUGH);
|
||||
}
|
||||
// 根据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);
|
||||
|
||||
let { fragmentNum, consume } = curDicHeroStar;
|
||||
|
||||
// console.log(JSON.stringify([{id: pieceId, count: fragmentNum}, ...consumeArr]))
|
||||
let costResult = await handleCost(roleId, sid, [{ id: pieceId, count: fragmentNum }, ...consume]);
|
||||
if (!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||
let newColorStarStage = 0;
|
||||
let max = isOneClick? oldColorStarStage + 1: ABI_STAGE.END;
|
||||
for(let i = 0; i < max; i++) {
|
||||
let { fragmentNum, consume } = curDicHeroStar;
|
||||
|
||||
// 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 isUpStar = isWakeUp || oldColorStarStage + 1 == ABI_STAGE.END;
|
||||
let isUpStar = isWakeUp || newColorStarStage == ABI_STAGE.END;
|
||||
|
||||
let update = {
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user