养成:升星、训练、淬火、精炼的一键消耗不每次更新&推送

This commit is contained in:
luying
2021-08-28 18:12:14 +08:00
parent ef753dec44
commit cca991367d
4 changed files with 54 additions and 30 deletions

View File

@@ -3,7 +3,7 @@ import { STATUS, EQUIP_STRENGTHEN_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, HERO_SY
import { ItemInter } from "../../../pubUtils/interface";
import { resResult, parseGoodStr } from "../../../pubUtils/util";
import { addItems, handleCost, decreaseItems, combineItems } from "../../../services/rewardService";
import { addItems, handleCost, decreaseItems, combineItems, CheckMeterial } from "../../../services/rewardService";
import { EquipModel, EquipType } from "../../../db/Equip";
import { HeroModel, EPlace, HeroType } from "../../../db/Hero";
import Role from "../../../db/Role";
@@ -287,20 +287,28 @@ export class EquipHandler {
}
let { lv, refineLv: oldRefineLv, equip } = curEplace; // 强化等级,精炼等级,精炼次数
let check = new CheckMeterial(roleId);
let refineLv = oldRefineLv, times = 0;
while(
(type == REFINE_TYPE.ONCE && times == 0) ||
(type == REFINE_TYPE.ONE_LEVEL && !checkRefineReachNextLv(oldRefineLv, refineLv) )
) {
let result = await refineOnce(roleId, sid, lv, refineLv);
console.log('*******', result);
let result = await refineOnce(lv, refineLv);
if(!result) break;
refineLv = result;
let isEnough = await check.decrease(result.consumes);
if(!isEnough) break; // 消耗不足
refineLv = result.refineLv;
times ++;
}
if(times == 0) {
return resResult(STATUS.EQUIP_REFINE_ERR);
}
let consumes = check.getConsume();
let result = await handleCost(roleId, sid, consumes);
if (!result)
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
curEplace.refineLv = refineLv;
@@ -491,13 +499,18 @@ export class EquipHandler {
console.log(dicQuench, dicGoods.quality, grade)
if (!dicQuench) return resResult(STATUS.EQUIP_QUENCH_MAX);
let check = new CheckMeterial(roleId);
let logs: QuenchLogParam[] = [], times = 0;
while(
(type == QUENCH_TYPE.ONCE && times < 1 && !checkQuenchMaxByQualityAndGrade(dicGoods.quality, 0, randMain)) || // 淬火一次,保证不超出该品质上限
(type == QUENCH_TYPE.ONE_GRADE && !checkQuenchMaxByQualityAndGrade(dicGoods.quality, grade, randMain)) // 淬火一品,在品相上限内淬火
) {
let result = await quenchOnce(roleId, sid, randMain, dicQuench, dicGoods);
let result = await quenchOnce(randMain, dicQuench, dicGoods);
if(!result) break;
let isEnough = await check.decrease(result.consumes);
if(!isEnough) break; // 消耗不足
result.log.setTimes(++times);
logs.push(result.log);
grade = result.grade;
@@ -505,6 +518,10 @@ export class EquipHandler {
}
if (times == 0) return resResult(STATUS.EQUIP_QUENCH_ERR);
let consumes = check.getConsume();
let result = await handleCost(roleId, sid, consumes);
if (!result)
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
let equipResult = await EquipModel.updateEquipInfo(eid, { randMain, grade })
let curEquip = {

View File

@@ -1,5 +1,5 @@
import { Application, BackendSession, ChannelService, HandlerService, } from 'pinus';
import { handleCost, addItems, unlockFigure, createHeroes, createHero } from '../../../services/rewardService';
import { handleCost, addItems, unlockFigure, createHeroes, createHero, CheckMeterial } from '../../../services/rewardService';
import { calPlayerCeAndSave, calAllHeroCe } from '../../../services/playerCeService';
import { resResult, deepCopy } from '../../../pubUtils/util';
import { STATUS } from '../../../consts/statusCode';
@@ -228,12 +228,18 @@ export class HeroHandler {
let newStarStage = 0;
let max = isOneClick ? ABI_STAGE.END : oldStarStage + 1;
let check = new CheckMeterial(roleId);
for (let i = 0; i < max; i++) {
let costResult = await handleCost(roleId, sid, [{ id: pieceId, count: curDicHeroStar.advanceUpFragmentNum }]);
if (!costResult) break;
let isEnough = await check.decrease([{ id: pieceId, count: curDicHeroStar.advanceUpFragmentNum }]);
if(!isEnough) break; // 消耗不足
newStarStage++;
}
if (newStarStage == 0) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
let consumes = check.getConsume();
let result = await handleCost(roleId, sid, consumes);
if (!result)
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
let isUpStar = newStarStage == ABI_STAGE.END;
@@ -352,15 +358,18 @@ export class HeroHandler {
let newColorStarStage = 0;
let max = isOneClick ? ABI_STAGE.END : oldColorStarStage + 1;
let check = new CheckMeterial(roleId);
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;
let isEnough = await check.decrease([{ id: pieceId, count: fragmentNum }, ...consume]);
if(!isEnough) break; // 消耗不足
newColorStarStage++;
}
if (newColorStarStage == 0) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
let consumes = check.getConsume();
let result = await handleCost(roleId, sid, consumes);
if (!result)
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
let isWakeUp = oldColorStar == 0;
let isUpStar = isWakeUp || newColorStarStage == ABI_STAGE.END;
@@ -415,15 +424,20 @@ export class HeroHandler {
let newJobStage = 0;
let max = isOneClick ? dicJob.maxStage: hero.jobStage + 1;
let check = new CheckMeterial(roleId);
for(let i = 0; i < max; i++) {
let singleConsume = dicJob.trainingConsume[hero.jobStage];
if(!singleConsume) break; // 每天消耗不可训练
let result = await handleCost(roleId, sid, [singleConsume]);
if (!result) break; // 材料不足
let isEnough = await check.decrease([singleConsume]);
if(!isEnough) break; // 消耗不足
newJobStage ++;
}
if (newJobStage == 0) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
let consumes = check.getConsume();
let result = await handleCost(roleId, sid, consumes);
if (!result)
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
//重算战力并下发
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.TRAIN, sid, roleId, hero, {

View File

@@ -32,7 +32,7 @@ export class RoleHandler {
}
async initRole(msg: { roleName: string }, session: BackendSession) {
console.log('******** initRole start', Date.now());
let roleId = session.get('roleId');
let serverId = session.get('serverId');
let sid: string = session.get('sid');
@@ -71,6 +71,7 @@ export class RoleHandler {
await checkPvp(calResult.role);
console.log('******** initRole end', Date.now());
return resResult(STATUS.SUCCESS, {
roleId, roleName, heroes: calResult.heros
})

View File

@@ -4,10 +4,6 @@ import { HeroModel, HeroType } from "../db/Hero";
import { getGoodById, gameData, getJewelById, getQuenchGradeByValue, getQuenchConsume, getQuenchByQualityAndGrade } from "../pubUtils/data";
import { calPlayerCeAndSave } from "./playerCeService";
import { CONSUME_TYPE, HERO_SYSTEM_TYPE, ITID, TASK_TYPE } from "../consts";
import { EquipType } from "../db/Equip";
import { calEquipSeids } from '../pubUtils/playerCe';
import { checkTask, checkTaskWithHero, checkTaskWithEquip, checkActivityTask } from './taskService';
import { handleCost } from './rewardService';
import { dicGoods, DicGoods } from '../pubUtils/dictionary/DicGoods';
import { QuenchLogParam } from '../domain/roleField/equip';
import { QUENCH } from '../pubUtils/dicParam';
@@ -88,7 +84,7 @@ export function checkEquipCanPut(hero: HeroType, id: number) {
* @param dicGoods 物品表
* @returns
*/
export async function quenchOnce(roleId: string, sid: string, randMain: RandMain[], dicQuench: DicQuenchQuality, dicGoods: DicGoods) {
export async function quenchOnce(randMain: RandMain[], dicQuench: DicQuenchQuality, dicGoods: DicGoods) {
let { quality, equipLvl } = dicGoods;
let canRandMain = randMain.filter(cur => { // 已升满的属性就不再淬火了
@@ -130,11 +126,8 @@ export async function quenchOnce(roleId: string, sid: string, randMain: RandMain
// 消耗
let consumes = getQuenchConsume(equipLvl, quality);
let result = await handleCost(roleId, sid, consumes);
if(!result) return false;
let log = new QuenchLogParam(isCriticle, add);
return { randMain, grade, log };
return { randMain, grade, log, consumes };
}
/**
@@ -175,18 +168,17 @@ export function getRandSeResult(id: number, randSe: RandSe[]) {
return randSe
}
export async function refineOnce(roleId: string, sid: string, lv: number, refineLv: number) {
export async function refineOnce(lv: number, refineLv: number) {
let dicRefine = gameData.refine.get(refineLv + 1);
if (!dicRefine) return false;
if(lv < dicRefine.levelLimited) return false;
// 消耗
let result = await handleCost(roleId, sid, dicRefine.consume);
if (!result) return false;
return refineLv + 1;
return {
refineLv: refineLv + 1,
consumes: dicRefine.consume
}
}
export function checkRefineReachNextLv(oldRefineLv: number, refineLv: number) {