武将:一键升星

This commit is contained in:
luying
2021-07-05 19:51:21 +08:00
parent 5a948d1741
commit 50867e8878
11 changed files with 6420 additions and 3858 deletions

View File

@@ -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);