From 03bf96a2c1d35c9ad113b8238d61647db63309dc Mon Sep 17 00:00:00 2001 From: luying Date: Fri, 27 Aug 2021 18:04:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E8=B4=A6=E5=8F=B7=E7=9A=AE=E8=82=A4=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/servers/role/handler/roleHandler.ts | 5 ++ game-server/app/services/rewardService.ts | 2 + shared/pubUtils/itemUtils.ts | 51 ++++++++++++------- shared/pubUtils/playerCe.ts | 15 +++--- shared/pubUtils/taskUtil.ts | 4 +- 5 files changed, 49 insertions(+), 28 deletions(-) diff --git a/game-server/app/servers/role/handler/roleHandler.ts b/game-server/app/servers/role/handler/roleHandler.ts index 85fe71b8a..17c5c3d58 100644 --- a/game-server/app/servers/role/handler/roleHandler.ts +++ b/game-server/app/servers/role/handler/roleHandler.ts @@ -51,14 +51,19 @@ export class RoleHandler { hid, lv: DEFAULT_HERO_LV, exp: getHeroExpByLv(DEFAULT_HERO_LV - 1) || 0 }); } + + console.log('****** createHeroes before', Date.now()) await createHeroes(roleId, roleName, sid, serverId, funcs, heroInfos); + console.log('****** createHeroes after', Date.now()) session.set('roleName', roleName); session.push('roleName', () => { }); let items = [].concat(DEFAULT_ITEMS, DEFAULT_EQUIPS, [getGoldObject(DEFAULT_GOLD)], [getCoinObject(DEFAULT_COIN)]); await addItems(roleId, roleName, sid, items); + console.log('****** calAllHeroCe before', Date.now()) let calResult = await calAllHeroCe(HERO_SYSTEM_TYPE.INIT, sid, roleId, { hasInit: true, roleName }); + console.log('****** calAllHeroCe after', Date.now()) let battleId = SCRIPT.SCRIPT_BATTLE_ID; let warInfo = gameData.war.get(battleId); diff --git a/game-server/app/services/rewardService.ts b/game-server/app/services/rewardService.ts index 159094ef1..199a452f9 100644 --- a/game-server/app/services/rewardService.ts +++ b/game-server/app/services/rewardService.ts @@ -459,8 +459,10 @@ export async function createHeroes(roleId: string, roleName: string, sid: string let resultHeroes: HeroType[] = [], resultItems: RewardInter[] = []; if (newHeroInfo.length > 0) { + console.log('****** pubCreateHeroes before', Date.now()) let { heroes, role, figureInfo, calHeroResults, calAllHeroResult, taskPushMessage, activityTaskPushMessage } = await pubCreateHeroes(roleId, roleName, serverId, newHeroInfo, funcs); + console.log('****** pubCreateHeroes after', Date.now()) let r = new Rank(REDIS_KEY.HERO_NUM_RANK, { serverId }); await r.setRankWithRoleInfo(roleId, role.heroNum, role.heroNumUpdatedAt, role); diff --git a/shared/pubUtils/itemUtils.ts b/shared/pubUtils/itemUtils.ts index d53f54e65..1e1661dcd 100644 --- a/shared/pubUtils/itemUtils.ts +++ b/shared/pubUtils/itemUtils.ts @@ -17,6 +17,22 @@ import { CreateHeroParam } from '../domain/roleField/hero'; import { SkinModel } from '../db/Skin'; import { TaskListReturn } from '../domain/roleField/task'; +/** + * 只插入皮肤,不管那么多的 + * @param roleId + * @param roleName + * @param skinId + * @returns + */ +export async function increaseSkin(roleId:string, roleName: string, skinId: number) { + let dicSkin = gameData.fashion.get(skinId); + if (!dicSkin) return false; + + let skin = await SkinModel.increaseSkin(roleId, skinId, { roleId, roleName, id: skinId, skinName: dicSkin.name, hid: dicSkin.actorId }); + if(!skin) return false; // 插入失败 + return skin +} + /** * 添加皮肤 * @param roleId 玩家id @@ -26,13 +42,10 @@ import { TaskListReturn } from '../domain/roleField/task'; * @returns {{ hero, figureInfo, calAllHeroResult }} hero:添加皮肤后的武将 figureInfo: 触发头像添加信息 calAllHeroResult:全局战力加成后结果 */ export async function addSkin(roleId: string, roleName: string, skinId: number, enable: boolean, hero?: HeroType) { - let dicSkin = gameData.fashion.get(skinId); - if (!dicSkin) return false; + let skin = await increaseSkin(roleId, roleName, skinId); + if(!skin) return false; - let skin = await SkinModel.increaseSkin(roleId, skinId, { roleId, roleName, id: skinId, skinName: dicSkin.name, hid: dicSkin.actorId }); - if(!skin) return false; // 插入失败 - - if(dicSkin.actorId && !hero) hero = await HeroModel.findByHidAndRole(dicSkin.actorId, roleId); + if(skin.hid && !hero) hero = await HeroModel.findByHidAndRole(skin.hid, roleId); let condition = { type: FIGURE_UNLOCK_CONDITION.GET_SKIN, paramSkinId: skinId }; let figureInfo = await unlockFigure(roleId, [condition]); // 解锁头像 let calAllHeroResult = await reCalAllHeroCe(HERO_SYSTEM_TYPE.ADD_SKIN, roleId, {}, [skinId]); // 全局加成 @@ -300,16 +313,16 @@ function unlockSingleFigure(dbFigures: Figure[], id: number, unlockDirect = fals return figure } -async function linkOldSkins(roleId: string, hero: HeroType) { - let allSkins = await SkinModel.findbyRoleAndHid(roleId, hero.hid); - let skins = hero.skins||[]; +async function getSkinsOfThisHero(roleId: string, hid: number) { + let allSkins = await SkinModel.findbyRoleAndHid(roleId, hid); + let skins = []; for(let skin of allSkins) { let index = skins.findIndex(cur => cur.id == skin.id); if(index == -1) { skins.push({ id: skin.id, skin: skin._id, enable: false }); } } - return await HeroModel.updateHeroInfo(roleId, hero.hid, { skins }) + return skins } /** @@ -338,15 +351,11 @@ export async function createHeroes(roleId: string, roleName: string, serverId: n let info = { roleId, roleName, serverId, quality, star, job, hName }; - let curHero = await HeroModel.createHero(Object.assign(info, heroInfo)); - let addSkinResult = await addSkin(roleId, roleName, initialSkin, true, curHero); // 添加皮肤 - curHero = await linkOldSkins(roleId, curHero); + await increaseSkin(roleId, roleName, initialSkin); + let skins = await getSkinsOfThisHero(roleId, heroInfo.hid); + + let curHero = await HeroModel.createHero(Object.assign(info, heroInfo, skins)); - if(addSkinResult) { // 处理添加皮肤结果 - curHero = addSkinResult.hero; - figureInfos.push(addSkinResult.figureInfo); - calAllHeroResult = addSkinResult.calAllHeroResult; // 全局加成,所以同一个人的处理都是累加 - } // 计算初始战力 let calHeroResult = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.INIT, roleId, curHero, {}); calHeroResults.push(calHeroResult); @@ -358,16 +367,20 @@ export async function createHeroes(roleId: string, roleName: string, serverId: n let role = await RoleModel.incRoleInfo(roleId, { heroNum }, { heroNumUpdatedAt: nowSeconds() }); // 任务 + console.log('****** checkTask before', Date.now()) let m1 = await checkTask(roleId, TASK_TYPE.HERO_NUM, heroNum, true, {}, funcs); let m2 = await checkTaskWithHeroes(roleId, TASK_TYPE.HERO_QUALITY, heroes, funcs); let m3 = await checkTaskWithHeroes(roleId, TASK_TYPE.HERO_QUALITY_STAR_UP, heroes, funcs); let m4 = await checkTaskWithHeroes(roleId, TASK_TYPE.HERO_LV, heroes, funcs); let taskPushMessage = m1.concat(m2, m3, m4); + console.log('****** checkTask after', Date.now()) //成长任务 + console.log('****** accomplishTask before', Date.now()) let mm1 = await accomplishTask(serverId, roleId, TASK_TYPE.HERO_NUM, heroNum) let mm2 = await accomplishTask(serverId, roleId, TASK_TYPE.HERO_QUALITY, heroNum, { heroes }) + console.log('****** accomplishTask after', Date.now()) let activityTaskPushMessage = mm1.concat(mm2); - return { role, figureInfo: combineFigureInfo(figureInfos), heroes, calHeroResults, calAllHeroResult, taskPushMessage, activityTaskPushMessage } + return { role, figureInfo: combineFigureInfo(figureInfos), heroes, calHeroResults, calAllHeroResult, taskPushMessage:[], activityTaskPushMessage:[] } } export function combineFigureInfo(figureInfos: { heads: Figure[], frames: Figure[], spines: Figure[] }[]) { diff --git a/shared/pubUtils/playerCe.ts b/shared/pubUtils/playerCe.ts index 1be2c0004..dea9a8f61 100644 --- a/shared/pubUtils/playerCe.ts +++ b/shared/pubUtils/playerCe.ts @@ -73,13 +73,14 @@ export async function reCalAllHeroCe(type: number, roleId: string, update: RoleU let newAttr = new AttributeCal(); newAttr.setByDbData(roleAttrs, heroAttrs); let heroCe = newAttr.calCe(); // 计算最终战力 - - let incHeroCe = heroCe - hero.ce; - allIncCe += incHeroCe; - roleCe += heroCe; - pushHeros.push({ hid: hero.hid, ce: reduceCe(hero.ce), incHeroCe: reduceCe(incHeroCe) }); - await HeroModel.updateHeroInfo(roleId, hero.hid, { ce: heroCe }); - await PvpDefenseModel.updateCe(roleId, hero.hid, incHeroCe); // 更新pvp防守阵战力 + if(heroCe != hero.ce) { + let incHeroCe = heroCe - hero.ce; + allIncCe += incHeroCe; + roleCe += heroCe; + pushHeros.push({ hid: hero.hid, ce: reduceCe(hero.ce + heroCe), incHeroCe: reduceCe(incHeroCe) }); + await HeroModel.updateHeroInfo(roleId, hero.hid, { ce: heroCe }); + await PvpDefenseModel.updateCe(roleId, hero.hid, incHeroCe); // 更新pvp防守阵战力 + } } let { topLineup, topLineupCe } = await calculatetopLineup(role); // 计算更新最强五人战力 diff --git a/shared/pubUtils/taskUtil.ts b/shared/pubUtils/taskUtil.ts index f02a29f87..66f74dcad 100644 --- a/shared/pubUtils/taskUtil.ts +++ b/shared/pubUtils/taskUtil.ts @@ -303,7 +303,7 @@ export async function checkTaskWithGoods(roleId: string, taskType: number, goods // 根据taskType判断有哪些任务需要check的 export async function checkTask(roleId: string, taskType: number, count: number, isInc: boolean, param: TaskParam, funcs?: number[]) { - console.log('******checkTask', roleId, taskType, count, isInc, param, funcs) + // console.log('******checkTask', roleId, taskType, count, isInc, param, funcs) let tasks = gameData.taskType.get(taskType) || []; let pushMessage = new Array(); let groups = new Map(); @@ -438,7 +438,7 @@ export async function checkTaskRec(roleId: string, type: number, group: number, isMatch = taskParam[0] == 0 || param.quality == taskParam[0]; break; } - console.log('****isMatch', isMatch, checkHistory, type, taskType, group, count) + // console.log('****isMatch', isMatch, checkHistory, type, taskType, group, count) if (param.isDebug) { isMatch = true; }