养成:升星、训练、淬火、精炼的一键消耗不每次更新&推送
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 { ItemInter } from "../../../pubUtils/interface";
|
||||||
|
|
||||||
import { resResult, parseGoodStr } from "../../../pubUtils/util";
|
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 { EquipModel, EquipType } from "../../../db/Equip";
|
||||||
import { HeroModel, EPlace, HeroType } from "../../../db/Hero";
|
import { HeroModel, EPlace, HeroType } from "../../../db/Hero";
|
||||||
import Role from "../../../db/Role";
|
import Role from "../../../db/Role";
|
||||||
@@ -287,20 +287,28 @@ export class EquipHandler {
|
|||||||
}
|
}
|
||||||
let { lv, refineLv: oldRefineLv, equip } = curEplace; // 强化等级,精炼等级,精炼次数
|
let { lv, refineLv: oldRefineLv, equip } = curEplace; // 强化等级,精炼等级,精炼次数
|
||||||
|
|
||||||
|
let check = new CheckMeterial(roleId);
|
||||||
let refineLv = oldRefineLv, times = 0;
|
let refineLv = oldRefineLv, times = 0;
|
||||||
while(
|
while(
|
||||||
(type == REFINE_TYPE.ONCE && times == 0) ||
|
(type == REFINE_TYPE.ONCE && times == 0) ||
|
||||||
(type == REFINE_TYPE.ONE_LEVEL && !checkRefineReachNextLv(oldRefineLv, refineLv) )
|
(type == REFINE_TYPE.ONE_LEVEL && !checkRefineReachNextLv(oldRefineLv, refineLv) )
|
||||||
) {
|
) {
|
||||||
let result = await refineOnce(roleId, sid, lv, refineLv);
|
let result = await refineOnce(lv, refineLv);
|
||||||
console.log('*******', result);
|
|
||||||
if(!result) break;
|
if(!result) break;
|
||||||
refineLv = result;
|
|
||||||
|
let isEnough = await check.decrease(result.consumes);
|
||||||
|
if(!isEnough) break; // 消耗不足
|
||||||
|
refineLv = result.refineLv;
|
||||||
times ++;
|
times ++;
|
||||||
}
|
}
|
||||||
if(times == 0) {
|
if(times == 0) {
|
||||||
return resResult(STATUS.EQUIP_REFINE_ERR);
|
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;
|
curEplace.refineLv = refineLv;
|
||||||
|
|
||||||
|
|
||||||
@@ -491,13 +499,18 @@ export class EquipHandler {
|
|||||||
console.log(dicQuench, dicGoods.quality, grade)
|
console.log(dicQuench, dicGoods.quality, grade)
|
||||||
if (!dicQuench) return resResult(STATUS.EQUIP_QUENCH_MAX);
|
if (!dicQuench) return resResult(STATUS.EQUIP_QUENCH_MAX);
|
||||||
|
|
||||||
|
let check = new CheckMeterial(roleId);
|
||||||
let logs: QuenchLogParam[] = [], times = 0;
|
let logs: QuenchLogParam[] = [], times = 0;
|
||||||
while(
|
while(
|
||||||
(type == QUENCH_TYPE.ONCE && times < 1 && !checkQuenchMaxByQualityAndGrade(dicGoods.quality, 0, randMain)) || // 淬火一次,保证不超出该品质上限
|
(type == QUENCH_TYPE.ONCE && times < 1 && !checkQuenchMaxByQualityAndGrade(dicGoods.quality, 0, randMain)) || // 淬火一次,保证不超出该品质上限
|
||||||
(type == QUENCH_TYPE.ONE_GRADE && !checkQuenchMaxByQualityAndGrade(dicGoods.quality, grade, 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;
|
if(!result) break;
|
||||||
|
|
||||||
|
let isEnough = await check.decrease(result.consumes);
|
||||||
|
if(!isEnough) break; // 消耗不足
|
||||||
|
|
||||||
result.log.setTimes(++times);
|
result.log.setTimes(++times);
|
||||||
logs.push(result.log);
|
logs.push(result.log);
|
||||||
grade = result.grade;
|
grade = result.grade;
|
||||||
@@ -505,6 +518,10 @@ export class EquipHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (times == 0) return resResult(STATUS.EQUIP_QUENCH_ERR);
|
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 equipResult = await EquipModel.updateEquipInfo(eid, { randMain, grade })
|
||||||
let curEquip = {
|
let curEquip = {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { Application, BackendSession, ChannelService, HandlerService, } from 'pinus';
|
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 { calPlayerCeAndSave, calAllHeroCe } from '../../../services/playerCeService';
|
||||||
import { resResult, deepCopy } from '../../../pubUtils/util';
|
import { resResult, deepCopy } from '../../../pubUtils/util';
|
||||||
import { STATUS } from '../../../consts/statusCode';
|
import { STATUS } from '../../../consts/statusCode';
|
||||||
@@ -228,12 +228,18 @@ export class HeroHandler {
|
|||||||
|
|
||||||
let newStarStage = 0;
|
let newStarStage = 0;
|
||||||
let max = isOneClick ? ABI_STAGE.END : oldStarStage + 1;
|
let max = isOneClick ? ABI_STAGE.END : oldStarStage + 1;
|
||||||
|
let check = new CheckMeterial(roleId);
|
||||||
for (let i = 0; i < max; i++) {
|
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++;
|
newStarStage++;
|
||||||
}
|
}
|
||||||
if (newStarStage == 0) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
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;
|
let isUpStar = newStarStage == ABI_STAGE.END;
|
||||||
|
|
||||||
@@ -352,15 +358,18 @@ export class HeroHandler {
|
|||||||
|
|
||||||
let newColorStarStage = 0;
|
let newColorStarStage = 0;
|
||||||
let max = isOneClick ? ABI_STAGE.END : oldColorStarStage + 1;
|
let max = isOneClick ? ABI_STAGE.END : oldColorStarStage + 1;
|
||||||
|
let check = new CheckMeterial(roleId);
|
||||||
for (let i = 0; i < max; i++) {
|
for (let i = 0; i < max; i++) {
|
||||||
let { fragmentNum, consume } = curDicHeroStar;
|
let { fragmentNum, consume } = curDicHeroStar;
|
||||||
|
let isEnough = await check.decrease([{ id: pieceId, count: fragmentNum }, ...consume]);
|
||||||
// console.log(JSON.stringify([{id: pieceId, count: fragmentNum}, ...consumeArr]))
|
if(!isEnough) break; // 消耗不足
|
||||||
let costResult = await handleCost(roleId, sid, [{ id: pieceId, count: fragmentNum }, ...consume]);
|
|
||||||
if (!costResult) break;
|
|
||||||
newColorStarStage++;
|
newColorStarStage++;
|
||||||
}
|
}
|
||||||
if (newColorStarStage == 0) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
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 isWakeUp = oldColorStar == 0;
|
||||||
let isUpStar = isWakeUp || newColorStarStage == ABI_STAGE.END;
|
let isUpStar = isWakeUp || newColorStarStage == ABI_STAGE.END;
|
||||||
@@ -415,15 +424,20 @@ export class HeroHandler {
|
|||||||
|
|
||||||
let newJobStage = 0;
|
let newJobStage = 0;
|
||||||
let max = isOneClick ? dicJob.maxStage: hero.jobStage + 1;
|
let max = isOneClick ? dicJob.maxStage: hero.jobStage + 1;
|
||||||
|
let check = new CheckMeterial(roleId);
|
||||||
for(let i = 0; i < max; i++) {
|
for(let i = 0; i < max; i++) {
|
||||||
let singleConsume = dicJob.trainingConsume[hero.jobStage];
|
let singleConsume = dicJob.trainingConsume[hero.jobStage];
|
||||||
if(!singleConsume) break; // 每天消耗不可训练
|
if(!singleConsume) break; // 每天消耗不可训练
|
||||||
|
|
||||||
let result = await handleCost(roleId, sid, [singleConsume]);
|
let isEnough = await check.decrease([singleConsume]);
|
||||||
if (!result) break; // 材料不足
|
if(!isEnough) break; // 消耗不足
|
||||||
newJobStage ++;
|
newJobStage ++;
|
||||||
}
|
}
|
||||||
if (newJobStage == 0) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
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, {
|
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.TRAIN, sid, roleId, hero, {
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ export class RoleHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async initRole(msg: { roleName: string }, session: BackendSession) {
|
async initRole(msg: { roleName: string }, session: BackendSession) {
|
||||||
|
console.log('******** initRole start', Date.now());
|
||||||
let roleId = session.get('roleId');
|
let roleId = session.get('roleId');
|
||||||
let serverId = session.get('serverId');
|
let serverId = session.get('serverId');
|
||||||
let sid: string = session.get('sid');
|
let sid: string = session.get('sid');
|
||||||
@@ -71,6 +71,7 @@ export class RoleHandler {
|
|||||||
|
|
||||||
await checkPvp(calResult.role);
|
await checkPvp(calResult.role);
|
||||||
|
|
||||||
|
console.log('******** initRole end', Date.now());
|
||||||
return resResult(STATUS.SUCCESS, {
|
return resResult(STATUS.SUCCESS, {
|
||||||
roleId, roleName, heroes: calResult.heros
|
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 { getGoodById, gameData, getJewelById, getQuenchGradeByValue, getQuenchConsume, getQuenchByQualityAndGrade } from "../pubUtils/data";
|
||||||
import { calPlayerCeAndSave } from "./playerCeService";
|
import { calPlayerCeAndSave } from "./playerCeService";
|
||||||
import { CONSUME_TYPE, HERO_SYSTEM_TYPE, ITID, TASK_TYPE } from "../consts";
|
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 { dicGoods, DicGoods } from '../pubUtils/dictionary/DicGoods';
|
||||||
import { QuenchLogParam } from '../domain/roleField/equip';
|
import { QuenchLogParam } from '../domain/roleField/equip';
|
||||||
import { QUENCH } from '../pubUtils/dicParam';
|
import { QUENCH } from '../pubUtils/dicParam';
|
||||||
@@ -88,7 +84,7 @@ export function checkEquipCanPut(hero: HeroType, id: number) {
|
|||||||
* @param dicGoods 物品表
|
* @param dicGoods 物品表
|
||||||
* @returns
|
* @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 { quality, equipLvl } = dicGoods;
|
||||||
|
|
||||||
let canRandMain = randMain.filter(cur => { // 已升满的属性就不再淬火了
|
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 consumes = getQuenchConsume(equipLvl, quality);
|
||||||
|
|
||||||
let result = await handleCost(roleId, sid, consumes);
|
|
||||||
if(!result) return false;
|
|
||||||
|
|
||||||
let log = new QuenchLogParam(isCriticle, add);
|
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
|
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);
|
let dicRefine = gameData.refine.get(refineLv + 1);
|
||||||
if (!dicRefine) return false;
|
if (!dicRefine) return false;
|
||||||
|
|
||||||
if(lv < dicRefine.levelLimited) return false;
|
if(lv < dicRefine.levelLimited) return false;
|
||||||
|
|
||||||
// 消耗
|
return {
|
||||||
let result = await handleCost(roleId, sid, dicRefine.consume);
|
refineLv: refineLv + 1,
|
||||||
if (!result) return false;
|
consumes: dicRefine.consume
|
||||||
|
}
|
||||||
return refineLv + 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function checkRefineReachNextLv(oldRefineLv: number, refineLv: number) {
|
export function checkRefineReachNextLv(oldRefineLv: number, refineLv: number) {
|
||||||
|
|||||||
Reference in New Issue
Block a user