优化:gm-server创建武将

This commit is contained in:
luying
2021-09-02 20:33:00 +08:00
parent e572cb2fa5
commit 62e32a4eb3
11 changed files with 372 additions and 191 deletions
@@ -17,10 +17,12 @@ import { checkBattleHeroesByHid } from '../../../services/normalBattleService';
import { Rank } from '../../../services/rankService';
import { updateUserInfo } from '../../../services/redisService';
import { checkTaskWithHero, checkTask, checkTaskWithArgs, checkActivityTask } from '../../../services/taskService';
import { getGoldObject, getCoinObject, createHeroesWhenInit } from '../../../pubUtils/itemUtils';
import { getGoldObject, getCoinObject } from '../../../pubUtils/itemUtils';
import { RScriptRecordModel } from '../../../db/RScriptRecord';
import { checkPvp } from '../../../services/pvpService';
import { SkinModel, SkinUpdate } from '../../../db/Skin';
import { CreateHeroes } from '../../../pubUtils/roleUtil';
import { Figure } from '../../../domain/dbGeneral';
export default function (app: Application) {
new HandlerService(app, {});
@@ -32,6 +34,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');
@@ -45,9 +48,14 @@ export class RoleHandler {
if (checkName) return resResult(STATUS.NAME_HAS_USED);
console.log('****** createHeroes before', Date.now())
let initInfos: { role: RoleUpdate, heroes: HeroUpdate[], skins: SkinUpdate[]} = await this.app.rpc.role.roleRemote.getInitRoleInfos.toServer(this.app.getServerId());
let initInfos: { role: RoleUpdate, heroes: HeroUpdate[], skins: SkinUpdate[], figureInfo: { heads: Figure[], frames: Figure[], spines: Figure[] }}
= await this.app.rpc.role.roleRemote.getInitRoleInfos.toServer(this.app.getServerId());
role = await RoleModel.updateRoleInfo(roleId, {...initInfos.role, roleName, hasInit: true});
let { heroes } = await createHeroesWhenInit(roleId, roleName, serverId, initInfos.heroes, initInfos.skins);
let createHero = new CreateHeroes(roleId, roleName, serverId, funcs);
await createHero.createWithInitInfo(initInfos.heroes, initInfos.skins, initInfos.figureInfo);
await createHero.pushMessage(pinus, sid);
await createHero.updateRedisRank(Rank);
let heroes = createHero.getResultHeroes();
console.log('****** createHeroes after', Date.now())
session.set('roleName', roleName);
@@ -6,6 +6,7 @@ import { RoleUpdate } from '../../../db/Role';
import { SkinUpdate } from '../../../db/Skin';
import { getInitRoleInfo } from '../../../pubUtils/roleUtil';
import { DEFAULT_HEROES } from '../../../consts';
import { Figure } from '../../../domain/dbGeneral';
export default function (app: Application) {
new HandlerService(app, {});
return new RoleRemote(app);
@@ -22,10 +23,11 @@ export class RoleRemote {
private initHeroes: Map<number, HeroUpdate> = new Map(); // hid => hero
private initRole: RoleUpdate = {};
private initSkins: Map<number, SkinUpdate> = new Map(); // hid => skin
private figureInfo: {heads: Figure[], frames: Figure[], spines: Figure[]};
public setInitRole() {
let result = getInitRoleInfo();
let { role, heroes, skins } = result;
let { role, heroes, skins, figureInfo } = result;
for(let hero of heroes) {
this.initHeroes.set(hero.hid, hero);
}
@@ -33,13 +35,15 @@ export class RoleRemote {
this.initSkins.set(skin.hid, skin);
}
this.initRole = role;
this.figureInfo = figureInfo;
}
public getInitRoleInfos() {
return {
heroes: this.getInitHeroes(),
skins: this.getInitSkins(),
role: this.initRole
role: this.initRole,
figureInfo: this.figureInfo
};
}
@@ -60,7 +64,10 @@ export class RoleRemote {
}
public getInitHeroById(hid: number) {
return this.initHeroes.get(hid)
return {
heroInfo: this.initHeroes.get(hid),
skinInfo: this.initSkins.get(hid)
}
}
-1
View File
@@ -773,7 +773,6 @@ export class Rank {
* @param serverId 分服
*/
export async function setRankRedisFromDb(type: string, args?: { serverId?: number }) {
if (type == REDIS_KEY.TOWER_RANK) {
let serverId = args.serverId;
let ranks = await RoleModel.getRank('tower', serverId, ROLE_SELECT.RANK);
+13 -24
View File
@@ -7,11 +7,11 @@ import { pushCalPlayerCe, pushCalAllHeroCe, calPlayerCeAndSave } from './playerC
import { ItemModel, ItemType } from '../db/Item';
import { STATUS } from '../consts/statusCode';
import { pinus } from 'pinus';
import { addEquips, addBags, addSkin, addFigure, unlockFigure as pubUnlockFigure, createHeroes as pubCreateHeroes, transPiece, getGoldObject, getCoinObject, getApObject } from '../pubUtils/itemUtils';
import { addEquips, addBags, addSkin, addFigure, unlockFigure as pubUnlockFigure, transPiece, getGoldObject, getCoinObject, getApObject } from '../pubUtils/itemUtils';
import { ItemInter, RewardInter, } from '../pubUtils/interface';
import { gameData } from '../pubUtils/data';
import { uniq } from 'underscore';
import { HeroModel, HeroType } from '../db/Hero';
import { HeroModel, HeroType, HeroUpdate } from '../db/Hero';
import { Figure } from '../domain/dbGeneral';
import { Rank } from './rankService';
import { checkActivityTask, checkTaskWithHero, pushActivityUpdate, pushTaskUpdate } from './taskService';
@@ -21,6 +21,8 @@ import { errlogger } from '../util/logger';
import { BAG } from '../pubUtils/dicParam';
import { sendMailByContent } from './mailService';
import { calEquipSeids } from '../pubUtils/playerCe';
import { CreateHeroes } from '../pubUtils/roleUtil';
import { SkinUpdate } from '../db/Skin';
export class CheckMeterial {
private roleId: string;
@@ -439,15 +441,15 @@ export async function createHeroes(roleId: string, roleName: string, sid: string
let hids = heroInfo.map(cur => cur.hid);
let userHeroesMap = await HeroModel.findMapByHidRange(hids, roleId);
let newHeroInfo: CreateHeroParam[] = [], pieces: ItemInter[] = [];
let infos: Map<number, { heroInfo: HeroUpdate, skinInfo: SkinUpdate }> = new Map(), pieces: ItemInter[] = [];
for (let h of heroInfo) {
let heroCount = h.count || 1;
if (userHeroesMap.has(h.hid)) {
let { pieceId, count } = transPiece(h.hid);
pieces.push({ id: pieceId, count: count * heroCount });
} else {
newHeroInfo.push(h)
let initInfo = await pinus.app.rpc.role.roleRemote.getInitHeroById.toServer(pinus.app.getServerId(), h.hid);
infos.set(h.hid, initInfo);
userHeroesMap.set(h.hid, null);
if (heroCount > 1) {
let { pieceId, count } = transPiece(h.hid);
@@ -457,25 +459,12 @@ 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);
await pushFigureUpdate(roleId, sid, figureInfo);
// await pushCalAllHeroCe(roleId, sid, calAllHeroResult);
for (let calHeroResult of calHeroResults) {
await pushCalPlayerCe(roleId, sid, calHeroResult);
}
pushTaskUpdate(roleId, sid, null, taskPushMessage);
pushActivityUpdate(roleId, sid, null, activityTaskPushMessage);
resultHeroes = heroes;
if (infos.size > 0) {
let createHero = new CreateHeroes(roleId, roleName, serverId, funcs);
await createHero.createWithHeroInfo(infos);
await createHero.pushMessage(pinus, sid);
await createHero.updateRedisRank(Rank);
resultHeroes = createHero.getResultHeroes();
}
if (pieces.length > 0) {