From c1dba5ea4f1d98040396840534678db727e23917 Mon Sep 17 00:00:00 2001 From: luying Date: Thu, 4 Mar 2021 15:01:03 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BB=E9=99=86=EF=BC=9A=E7=8E=A9=E5=AE=B6?= =?UTF-8?q?=E5=9C=A8=E7=BA=BFredis=E8=BD=AC=E4=B8=BAhash=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/servers/role/handler/friendHandler.ts | 4 +- .../app/servers/role/handler/heroHandler.ts | 141 ++++++++---------- 2 files changed, 61 insertions(+), 84 deletions(-) diff --git a/game-server/app/servers/role/handler/friendHandler.ts b/game-server/app/servers/role/handler/friendHandler.ts index b7fa27c91..2a9af4043 100644 --- a/game-server/app/servers/role/handler/friendHandler.ts +++ b/game-server/app/servers/role/handler/friendHandler.ts @@ -681,12 +681,12 @@ export class FriendHandler { if(heroList.length <= 0) return resResult(STATUS.HERO_NOT_FIND); let list = new Array(); - for(let {roleId, roleName, hid, hName, ce, lv, star, colorStar, quality, job, skins, attr: heroAttrs} of heroList) { + for(let {roleId, roleName, hid, hName, ce, lv, star, colorStar, quality, job, skins, ceAttr} of heroList) { let curSkin = skins.find(cur => cur.enable); let equips = await EquipModel.findListByHidAndRole(hisRoleId, hid, EQUIP_SELECT.HERO_DETAIL); - let attributes = getPlayerMainAttribute(heroAttrs, role.attr); + let attributes = getPlayerMainAttribute(ceAttr, role.globalCeAttr); list.push({ roleId, roleName, hid, hName, ce, lv, star, colorStar, quality, job, diff --git a/game-server/app/servers/role/handler/heroHandler.ts b/game-server/app/servers/role/handler/heroHandler.ts index c95fa2b8f..8601a3bcb 100644 --- a/game-server/app/servers/role/handler/heroHandler.ts +++ b/game-server/app/servers/role/handler/heroHandler.ts @@ -1,9 +1,9 @@ import {Application, BackendSession, ChannelService} from 'pinus'; import { handleCost, addItems } from '../../../services/rewardService'; -import { calPlayerCeAndSave, calAllHeroCe } from '../../../services/playerCeService'; -import { resResult, returnHeroCeRatio, deepCopy } from '../../../pubUtils/util'; +import { calPlayerCeAndSave } from '../../../services/playerCeService'; +import { resResult, returnHeroCeRatio } from '../../../pubUtils/util'; import { STATUS } from '../../../consts/statusCode'; -import { HeroModel, Connect } from '../../../db/Hero'; +import {HeroModel} from '../../../db/Hero'; import {CURRENCY_BY_TYPE, CURRENCY_TYPE, CONSUME_TYPE, HERO_GROW_MAX, HERO_SYSTEM_TYPE, ITID, ABI_STAGE, HERO_CE_RATIO} from '../../../consts'; import { RoleModel } from '../../../db/Role'; import { ItemModel } from '../../../db/Item'; @@ -81,9 +81,8 @@ export class HeroHandler { let curHero = await HeroModel.createHero({ roleId, serverId, roleName, hid, hName, star, quality, job, skins:[{id: initialSkin, enable: true}] }); - let hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.INIT, sid, roleId, curHero, {}); - await calAllHeroCe(HERO_SYSTEM_TYPE.ADD_SKIN, sid, roleId, {}, [initialSkin]) - return resResult(STATUS.SUCCESS, {curHero: returnHeroCeRatio(hero)}); + await calPlayerCeAndSave(sid, roleId, [curHero], HERO_SYSTEM_TYPE.INIT); + return resResult(STATUS.SUCCESS, {curHero: returnHeroCeRatio(curHero)}); } // 武将升级 @@ -139,14 +138,12 @@ export class HeroHandler { let costResult = await handleCost(roleId, sid, material); if(!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); - let update = { - lv: playerLv > newLv?newLv: playerLv, - exp: newExp - } + hero.lv = playerLv > newLv?newLv: playerLv; + hero.exp = newExp; - hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.LVUP, sid, roleId, hero, update); + let heros = await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.LVUP, [hid]); const curHero = { - hid, lv : hero.lv, exp : hero.exp + hid, lv : heros[0].lv, exp : heros[0].exp } return resResult(STATUS.SUCCESS, { curHero }); @@ -181,20 +178,16 @@ export class HeroHandler { if(!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); let isUpStar = oldStarStage + 1 == ABI_STAGE.END; + hero.star = isUpStar? oldStar + 1: oldStar; + hero.starStage = isUpStar? ABI_STAGE.START: oldStarStage + 1; - let update = { - star: isUpStar? oldStar + 1: oldStar, - starStage: isUpStar? ABI_STAGE.START: oldStarStage + 1 - } - - hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.STAR, sid, roleId, hero, update); - if(isUpStar) await calAllHeroCe(HERO_SYSTEM_TYPE.STAR, sid, roleId, {}, [hid, isUpStar?1:0]); // 升星可能影响到百家学院全局加成 + let heros = await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.STAR, [hid, isUpStar?1:0]); const curHero = { hid, - star : hero.star, - starStage : hero.starStage, - colorStar: hero.colorStar, - colorStarStage: hero.colorStarStage + star : heros[0].star, + starStage : heros[0].starStage, + colorStar: heros[0].colorStar, + colorStarStage: heros[0].colorStarStage } return resResult(STATUS.SUCCESS, {isUpStar, curHero}); } @@ -231,14 +224,11 @@ export class HeroHandler { let costResult = await handleCost(roleId, sid, [{id: pieceId, count: fragmentNum}]); if(!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); - hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.QUALITY, sid, roleId, hero, { - quality: hero.quality + 1 - }); - await calAllHeroCe(HERO_SYSTEM_TYPE.QUALITY, sid, roleId, {}, [hid, 0]); // 升品可能影响到百家学院全局加成 - + hero.quality ++; + let heros = await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.QUALITY, [hid]); const curHero = { hid, - quality : hero.quality + quality : heros[0].quality } return resResult(STATUS.SUCCESS, {curHero}); } @@ -280,21 +270,16 @@ export class HeroHandler { let isWakeUp = oldColorStar == 0; let isUpStar = isWakeUp || oldColorStarStage + 1 == ABI_STAGE.END; + hero.colorStar = isUpStar? oldColorStar + 1: oldColorStar; + hero.colorStarStage = isUpStar? ABI_STAGE.START: oldColorStarStage + 1; - let update = { - colorStar: isUpStar? oldColorStar + 1: oldColorStar, - colorStarStage: isUpStar? ABI_STAGE.START: oldColorStarStage + 1 - } - - hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.COLORSTAR, sid, roleId, hero, update); - if(isUpStar) await calAllHeroCe(HERO_SYSTEM_TYPE.COLORSTAR, sid, roleId, {}, [hid, isUpStar?1:0]); // 升星可能影响到百家学院全局加成 - + let heros = await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.COLORSTAR, [hid, isUpStar?1:0, isWakeUp?1:0]); const curHero = { hid, - star : hero.star, - starStage : hero.starStage, - colorStar: hero.colorStar, - colorStarStage: hero.colorStarStage + star : heros[0].star, + starStage : heros[0].starStage, + colorStar: heros[0].colorStar, + colorStarStage: heros[0].colorStarStage } return resResult(STATUS.SUCCESS, {isUpStar, curHero}); } @@ -305,30 +290,26 @@ export class HeroHandler { let sid: string = session.get('sid'); let { hid } = msg; let hero = await HeroModel.findByHidAndRole(hid, roleId); - if (!hero) return resResult(STATUS.HERO_NOT_FIND); - - let dicJob = gameData.job.get(hero.job); - if(!dicJob) return resResult(STATUS.DIC_DATA_NOT_FOUND); - - if (hero.jobStage >= ABI_STAGE.END) + if (!hero) + return resResult(STATUS.HERO_NOT_FIND); + let heroJob = gameData.job.get(hero.job); + if (hero.jobStage >= 6) return resResult(STATUS.HERO_JOB_STAGE_REACH_MAX_STAGE); - if (hero.job >= getMaxGradeByjobClass(dicJob.job_class)) + if (hero.job >= getMaxGradeByjobClass(heroJob.job_class)) return resResult(STATUS.HERO_JOB_REACH_MAX_STAGE); let consume = new Array(); - if(dicJob.trainingConsume[hero.jobStage]) { - consume.push(dicJob.trainingConsume[hero.jobStage]); + if(heroJob.trainingConsume[hero.jobStage]) { + consume.push(heroJob.trainingConsume[hero.jobStage]); } let result = await handleCost(roleId, sid, consume); if(!result) { return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH); } - + hero.jobStage = hero.jobStage +1; //重算战力并下发 - hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.TRAIN, sid, roleId, hero, { - jobStage: hero.jobStage + 1 - }); - return resResult(STATUS.SUCCESS, { curHero: {hid : hero.hid, job : hero.job, jobStage: hero.jobStage}}); + let heros = await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.TRAIN); + return resResult(STATUS.SUCCESS, { curHero: {hid : heros[0].hid, job : heros[0].job, jobStage: heros[0].jobStage}}); } //进阶 @@ -350,30 +331,27 @@ export class HeroHandler { return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH); } let nextHeroJob = getJobByGradeAndClass(heroJob.job_class, heroJob.grade + 1); - + hero.job = nextHeroJob.jobid; + hero.jobStage = 0; //重算战力并下发 - let update = { - job: nextHeroJob.jobid, - jobStage: 0 - } - hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.STAGEUP, sid, roleId, hero, update); - return resResult(STATUS.SUCCESS, { curHero: {hid : hero.hid, job : hero.job, jobStage : hero.jobStage}}); + let heros = await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.STAGEUP, [curJob]); + return resResult(STATUS.SUCCESS, { curHero: {hid : heros[0].hid, job : heros[0].job, jobStage : heros[0].jobStage}}); } //激活羁绊 - async heroConectionActivate(msg: { shipId: number }, session: BackendSession) { + async heroConectionActivate(msg: {shipId: number}, session: BackendSession) { let roleId: string = session.get('roleId'); let sid: string = session.get('sid'); let { shipId } = msg; let shipHidAndLevel = gameData.friendShipHidAandIds.get(shipId); - if (!shipHidAndLevel) return resResult(STATUS.HERO_CONECTION_IS_NOT_EXIT); + if (!shipHidAndLevel) + return resResult(STATUS.HERO_CONECTION_IS_NOT_EXIT); let hero = await HeroModel.findByHidAndRole(shipHidAndLevel.actorId, roleId); - if (!hero) return resResult(STATUS.HERO_NOT_FIND); - - let heroConnections: Connect[] = deepCopy(hero.connections); + if (!hero) + return resResult(STATUS.HERO_NOT_FIND); let flag = true; let level = 1; - for (let conection of heroConnections) { + for (let conection of hero.connections) { if (conection.shipId == shipId ) { if (conection.level >= shipHidAndLevel.level) { return resResult(STATUS.HERO_CONECTION_IS_MAX_LEVEL); @@ -385,7 +363,7 @@ export class HeroHandler { } } if (!!flag) { - heroConnections.push({shipId, level}); + hero.connections.push({shipId, level}); } let friendShip = getFriendShipById(shipId, level); if (hero.star < friendShip.level) @@ -405,8 +383,8 @@ export class HeroHandler { return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH); } //重算战力并下发 - hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.CONNECT, sid, roleId, hero, { connections: heroConnections }, [shipId]); - return resResult(STATUS.SUCCESS, { curHero: {hid : hero.hid, connections : hero.connections}}); + let heros = await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.CONNECT, [shipId, level]); + return resResult(STATUS.SUCCESS, { curHero: {hid : heros[0].hid, connections : heros[0].connections}}); } //赠送(包括一键赠送) @@ -464,6 +442,8 @@ export class HeroHandler { } let newLv = getFavourLvByExp(newExp); + hero.favour = newExp; + hero.favourLv = newLv; let result = await handleCost(roleId, sid, material); if(!result) { @@ -471,13 +451,11 @@ export class HeroHandler { } //重算战力并下发 if (oldLv != hero.favourLv) { - await calPlayerCeAndSave(HERO_SYSTEM_TYPE.FAVOUR, sid, roleId, hero, { - favour: newExp, favourLv: newLv - }, [oldLv]); + await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.FAVOUR, [oldLv]); } else { await HeroModel.updateHeroInfo(roleId, hero.hid, hero); } - return resResult(STATUS.SUCCESS, { curHero: { hid: hero.hid, favour: hero.favour, favourLv: hero.favourLv } }); + return resResult(STATUS.SUCCESS, { curHero: {hid : hero.hid, favour : hero.favour, favourLv : hero.favourLv}}); } //穿带时装 @@ -486,15 +464,14 @@ export class HeroHandler { let sid: string = session.get('sid'); let { id } = msg; let skinInfo = gameData.fashion.get(id); - if (!skinInfo) return resResult(STATUS.HERO_SKIN_NOT_FIND); + if (!skinInfo) + return resResult(STATUS.HERO_SKIN_NOT_FIND); let hero = await HeroModel.findByHidAndRole(skinInfo.actorId, roleId); - if (!hero) return resResult(STATUS.HERO_NOT_FIND); - - let heroSkins = deepCopy(hero.skins); - + if (!hero) + return resResult(STATUS.HERO_NOT_FIND); let result = false; let lastSkinId: number; - for (let skin of heroSkins) { + for (let skin of hero.skins) { if (skin.id == id) { if (!!skin.enable) { return resResult(STATUS.HERO_SKIN_IS_EQUIPED); @@ -511,7 +488,7 @@ export class HeroHandler { if (!result) { return resResult(STATUS.HERO_SKIN_NOT_FIND); } - await calPlayerCeAndSave(HERO_SYSTEM_TYPE.SKIN, sid, roleId, hero, { skins: heroSkins }, [id, lastSkinId]); + await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.SKIN, [id, lastSkinId]); return resResult(STATUS.SUCCESS, {curHero: {hid : hero.hid, skins : hero.skins} }); } }