养成:升星、训练、淬火、精炼的一键消耗不每次更新&推送
This commit is contained in:
@@ -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 = {
|
||||
|
||||
@@ -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, {
|
||||
|
||||
@@ -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
|
||||
})
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user