import { STATUS } from '../../../consts/statusCode'; import { RoleModel, RoleUpdate } from './../../../db/Role'; import { HeroModel, HeroUpdate } from '../../../db/Hero'; import { resResult, decodeIdCntArrayStr, parseGoodStr, genCode } from '../../../pubUtils/util'; import { Application, BackendSession, pinus, HandlerService, } from 'pinus'; import { handleCost, addItems } from '../../../services/rewardService'; import { getTitle, getTeraph, gameData, getScollByStar, getFriendLvByExp, getHeroExpByLv, getExpByLv } from '../../../pubUtils/data'; import { SCHOOL, SCROLL, EXTERIOR, SCRIPT } from '../../../pubUtils/dicParam'; import { getAtrrNameById } from '../../../consts/constModules/abilityConst' import { findIndex } from 'underscore'; import { SclResultInter, SclPosInter } from '../../../pubUtils/interface'; import { SchoolModel } from '../../../db/School'; import { getTeraphStrengthenResult, getSchoolList } from '../../../services/roleService' import { calPlayerCeAndSave, calAllHeroCe } from '../../../services/playerCeService'; import { HERO_SYSTEM_TYPE, LINEUP_NUM, ROLE_SELECT, REDIS_KEY, TASK_TYPE, DEFAULT_HEROES, DEFAULT_HERO_LV, DEFAULT_ITEMS, DEFAULT_EQUIPS, DEFAULT_GOLD, DEFAULT_COIN, DEBUG_MAGIC_WORD, COUNTER, DEFAULT_LV, ITEM_CHANGE_REASON } from '../../../consts'; import { checkBattleHeroesByHid, roleLevelup } from '../../../services/normalBattleService'; import { Rank } from '../../../services/rankService'; import { updateUserInfo } from '../../../services/redisService'; import { checkTaskWithHero, checkTask, checkTaskWithArgs, checkActivityTask } from '../../../services/taskService'; import { getGoldObject, getCoinObject } from '../../../pubUtils/itemUtils'; import { RScriptRecordModel } from '../../../db/RScriptRecord'; import { SkinModel, SkinUpdate } from '../../../db/Skin'; import { CreateHeroes, deletRole } from '../../../pubUtils/roleUtil'; import { Figure } from '../../../domain/dbGeneral'; import { getActivities } from '../../../services/activity/activityService'; import * as dicParam from '../../../pubUtils/dicParam'; import Counter from '../../../db/Counter'; import { UserModel } from '../../../db/User'; import { checkFilterWords, reportTAEvent, treatRoleName } from '../../../services/sdkService'; export default function (app: Application) { new HandlerService(app, {}); return new RoleHandler(app); } export class RoleHandler { constructor(private app: Application) { } 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'); let { roleName } = msg; let role = await RoleModel.findByRoleId(roleId, 'roleName hasInit', true); if (role.hasInit) return resResult(STATUS.ROLE_HAS_INIT); let checkName = await RoleModel.checkName(roleName, serverId); if (checkName) return resResult(STATUS.NAME_HAS_USED); let initInfos: { role: RoleUpdate, initInfos: {heroInfo: HeroUpdate, skinInfo: SkinUpdate}[], figureInfo: { heads: Figure[], frames: Figure[], spines: Figure[] }} = this.app.get('initRoleInfos'); role = await RoleModel.updateRoleInfo(roleId, {...initInfos.role, roleName, hasInit: true}); let createHero = new CreateHeroes(roleId, roleName, serverId); let infos = new Map(); for(let {heroInfo, skinInfo} of initInfos.initInfos) { infos.set(heroInfo.hid, { heroInfo, skinInfo }); } await createHero.createWithInitInfo(infos, initInfos.figureInfo); await createHero.clearTask(await getActivities()); await createHero.pushMessage(pinus, sid); await createHero.updateRedisRank(Rank); let heroes = createHero.getResultHeroes(); 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, ITEM_CHANGE_REASON.DEFAULT_ITEMS); let battleId = SCRIPT.SCRIPT_BATTLE_ID; let warInfo = gameData.war.get(battleId); await RScriptRecordModel.setScript(roleId, battleId, warInfo.warType, 2, SCRIPT.SCRIPT_NAME); console.log('******** initRole end', Date.now()); return resResult(STATUS.SUCCESS, { roleId, roleName, heroes }) } async getRoleInfo(msg: { targetRoleId: string }, session: BackendSession) { let { targetRoleId } = msg; let { roleId, roleName, head = EXTERIOR.EXTERIOR_FACE, frame = EXTERIOR.EXTERIOR_FACECASE, spine = EXTERIOR.EXTERIOR_APPEARANCE, ce = 0, topLineup, topLineupCe = 0 } = await RoleModel.findByRoleId(targetRoleId); return resResult(STATUS.SUCCESS, { roleId, roleName, head, frame, spine, ce, topLineup, topLineupCe }); } //爵位 async roleTitleLevelUp(msg: {}, session: BackendSession) { let roleId = session.get('roleId'); let sid: string = session.get('sid'); const serverId = session.get('serverId'); let role = await RoleModel.findByRoleId(roleId); let { title } = role; let titleInfo = getTitle(title + 1); if (!titleInfo) return resResult(STATUS.DIC_DATA_NOT_FOUND) if (titleInfo.lvLimited > role.lv) return resResult(STATUS.COM_BATTLE_LV_NOT_ENOUGH) let consumes = titleInfo.material; let result = await handleCost(roleId, sid, consumes, ITEM_CHANGE_REASON.TITLE_LEVEL_UP); if (!result) return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH); let update = { title: title + 1 } let calResult = await calAllHeroCe(HERO_SYSTEM_TYPE.TITLE, sid, roleId, update); // 任务 await checkTask(roleId, sid, TASK_TYPE.ROLE_TITLE, 1, false, { oldTitle: title, title: update.title }); //成长任务 await checkActivityTask(serverId, sid, roleId, TASK_TYPE.ROLE_TITLE, update.title) return resResult(STATUS.SUCCESS, { roleId: calResult.role, title: role.title }); } //神像强化 async roleTeraphStrengthen(msg: { id: number, count: number }, session: BackendSession) { let { id, count } = msg; let roleId = session.get('roleId'); let sid: string = session.get('sid'); let role = await RoleModel.findByRoleId(roleId, 'roleId teraphs gold coin'); let teraphs = role.teraphs; let index = findIndex(teraphs, { id }); if (index < 0) return resResult(STATUS.WRONG_PARMS); let teraph = teraphs[index]; let dicTeraph = getTeraph(id, teraph.grade); if (!dicTeraph) return resResult(STATUS.DIC_DATA_NOT_FOUND); let { times, consumes, criAttr } = await getTeraphStrengthenResult(role, count, dicTeraph, teraph); if (times == 0) return resResult(STATUS.ROLE_TERAPH_NOT_STRENGTHEN); let result = await handleCost(roleId, sid, consumes, ITEM_CHANGE_REASON.TERAPH_STRENGTHEN); if (!result) return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH); let calResult = await calAllHeroCe(HERO_SYSTEM_TYPE.TERAPH, sid, roleId, { teraphs }, [id]); // 任务 await checkTask(roleId, sid, TASK_TYPE.ROLE_TERAPH_STRENGTHEN, count, true, {}); return resResult(STATUS.SUCCESS, { roleId, teraphs: calResult.role.teraphs, criAttr }); } //神像进阶 async roleTeraphQualityUp(msg: { id: number }, session: BackendSession) { let { id } = msg; let roleId = session.get('roleId'); let sid: string = session.get('sid'); const serverId = session.get('serverId'); let role = await RoleModel.findByRoleId(roleId); let teraphs = role.teraphs; let index = findIndex(teraphs, { id }); if (index < 0) return resResult(STATUS.WRONG_PARMS); let teraph = teraphs[index]; let teraphInfo = getTeraph(id, teraph.grade); if (!teraphInfo) return resResult(STATUS.DIC_DATA_NOT_FOUND) for (let [attrId, val] of teraph.attr) { if (val < teraphInfo.mainAttrMax.get(attrId)) return resResult(STATUS.ROLE_TERAPH_NOT_QUILITY); teraph.attr.set(attrId, 0); } teraph.grade++; let nextTeraphInfo = getTeraph(id, teraph.grade) if (!nextTeraphInfo) return resResult(STATUS.DIC_DATA_NOT_FOUND); let consumes = teraphInfo.upGradeMaterial; let result = await handleCost(roleId, sid, consumes, ITEM_CHANGE_REASON.TERAPH_QUALITY_UP); if (!result) return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH); let calResult = await calAllHeroCe(HERO_SYSTEM_TYPE.TERAPH_UP, sid, roleId, { teraphs }, [id]); // 神像进阶,进阶一次就触发一次礼包弹框 await checkActivityTask(serverId, sid, roleId, TASK_TYPE.ROLE_TERAPH_STAGE_UP, 1) return resResult(STATUS.SUCCESS, { roleId, teraphs: calResult.role.teraphs }); } // 获得百家学宫 async getSchoolList(msg: {}, session: BackendSession) { let roleId = session.get('roleId'); let school = await getSchoolList(roleId); return resResult(STATUS.SUCCESS, { school }); } // 摆放/替换/卸下武将 async changeSchoolHero(msg: { schoolId: number, positionId: number, hid: number }, session: BackendSession) { let roleId = session.get('roleId'); let sid = session.get('sid'); const serverId = session.get('serverId'); let { schoolId, positionId, hid } = msg; if (!gameData.school.has(schoolId)) { return resResult(STATUS.DIC_DATA_NOT_FOUND); } const dicPosition = decodeIdCntArrayStr(SCHOOL.SCHOOL_POSITION, 1); // id(str) => isOpen if (!dicPosition.has(positionId.toString())) { return resResult(STATUS.DIC_DATA_NOT_FOUND); } let isOpen = !!dicPosition.get(positionId.toString()); // 该位置是否解锁 if (hid > 0) { let findHero = await SchoolModel.findByHid(roleId, hid); if (!!findHero) { return resResult(STATUS.ROLE_SCHOOL_HERO_USED); } let curHero = await HeroModel.findByHidAndRole(hid, roleId); if (!curHero) return resResult(STATUS.HERO_NOT_FIND); } let curSchool = await SchoolModel.findBySclAndPos(roleId, schoolId, positionId); let preHid = 0; // 原先在该位置上的武将 if (curSchool) { isOpen = curSchool.isOpen; preHid = curSchool.hid; } if (!isOpen) { return resResult(STATUS.ROLE_SCHOOL_POSITION_LOCKED); } await SchoolModel.updateBySclAndPos(roleId, schoolId, positionId, { hid, isOpen }) await calAllHeroCe(HERO_SYSTEM_TYPE.SCHOOL, sid, roleId, {}, [schoolId, hid, preHid]); // 任务 await checkTaskWithArgs(roleId, sid, TASK_TYPE.ROLE_SCHOOL_UNLOCK, [hid, preHid]); if (hid > 0) { //成长任务 await checkActivityTask(serverId, sid, roleId, TASK_TYPE.ROLE_SCHOOL_PUT_HERO, 1) } return resResult(STATUS.SUCCESS, { schoolId, positionId, hid, preHid, isOpen }); } // 解锁位置 async unlockSchoolPosition(msg: { schoolId: number, positionId: number }, session: BackendSession) { let roleId = session.get('roleId'); let sid = session.get('sid'); let { schoolId, positionId } = msg; if (!gameData.school.has(schoolId)) { return resResult(STATUS.DIC_DATA_NOT_FOUND); } const dicPosition = decodeIdCntArrayStr(SCHOOL.SCHOOL_POSITION, 1); // id(str) => isOpen if (!dicPosition.has(positionId.toString())) { return resResult(STATUS.DIC_DATA_NOT_FOUND); } let isOpen = !!dicPosition.get(positionId.toString()); // 该位置是否解锁 if (isOpen) { return resResult(STATUS.ROLE_SCHOOL_POSITION_UNLOCK_NOT_NEED); } let curSchool = await SchoolModel.findBySclAndPos(roleId, schoolId, positionId); if (curSchool && curSchool.isOpen) { return resResult(STATUS.ROLE_SCHOOL_POSITION_UNLOCK_NOT_NEED); } const cost = parseGoodStr(SCHOOL.SCHOOL_UNLOCK_COIN); const costResult = await handleCost(roleId, sid, cost, ITEM_CHANGE_REASON.UNLOCK_SCHOOL_POSITION); if (!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); curSchool = await SchoolModel.updateBySclAndPos(roleId, schoolId, positionId, { isOpen: true }) // 任务 await checkTask(roleId, sid, TASK_TYPE.ROLE_SCHOOL_UNLOCK, 1, true, {}); return resResult(STATUS.SUCCESS, { schoolId, positionId, hid: curSchool.hid, isOpen: curSchool.isOpen }); } // 激活/升级名将谱 async activeHeroScroll(msg: { hid: number }, session: BackendSession) { let roleId = session.get('roleId'); let sid = session.get('sid'); let serverId: number = session.get('serverId'); let { hid } = msg; let curHero = await HeroModel.findByHidAndRole(hid, roleId, 'hid lv star colorStar quality scrollId scrollActive scrollStar scrollColorStar scrollQuality favour favourLv connections attr ce'); if (!curHero) return resResult(STATUS.HERO_NOT_FIND); let dicHero = gameData.hero.get(hid); if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND); let { star, colorStar, quality, scrollId, scrollActive, scrollStar, scrollColorStar, scrollQuality, favour, favourLv } = curHero; let update = { scrollActive, scrollId, scrollStar, scrollColorStar, scrollQuality, favour, favourLv }; if (!scrollActive) { // 初次激活 update.scrollActive = true; update.scrollStar = dicHero.initialStars; update.scrollQuality = dicHero.quality; update.scrollColorStar = 0; // 获取一定好感度 let maxLv = gameData.maxFriendShipLv.max; if (maxLv > favourLv) { update.favour += SCROLL.SCROLL_ACTIVE_FAVOUR; update.favourLv = getFriendLvByExp(update.favour); } await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_UNLOCK, 1, { dicHeroes: [dicHero] }) } else { if (star > scrollStar) { // 可以升星 update.scrollStar++; } else if (quality > scrollQuality && (quality != 4 || scrollQuality != 3)) { // 可以升品 update.scrollQuality++; } else if (colorStar > scrollColorStar) { // 可以升彩星 update.scrollColorStar++; update.scrollQuality = 4; } else { return resResult(STATUS.ROLE_SCROLL_REACH_MAX); } } let dicHeroScroll = getScollByStar(dicHero.quality, update.scrollStar, update.scrollQuality, update.scrollColorStar); update.scrollId = dicHeroScroll ? dicHeroScroll.id : 0; let hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.SCROLL, sid, roleId, curHero, update); // 更新单个武将战力 calAllHeroCe(HERO_SYSTEM_TYPE.SCROLL, sid, roleId, {}, [hid]); // 全局增加战力 // 任务 if (favourLv != hero.favourLv) await checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_FAVOUR_LV, hero); if (!scrollActive) await checkTask(roleId, sid, TASK_TYPE.ROLE_SCROLL_ACTIVE, 1, true, {}); return resResult(STATUS.SUCCESS, { curHero: { hid: hero.hid, scrollActive: hero.scrollActive, scrollId: hero.scrollId, scrollStar: hero.scrollStar, scrollColorStar: hero.scrollColorStar, scrollQuality: hero.scrollQuality, favour: hero.favour, favourLv: hero.favourLv, } }); } // 保存展示阵容 async saveShowLineup(msg: { showLineup: number[] }, session: BackendSession) { let { showLineup } = msg; let roleId = session.get('roleId'); let serverId = session.get('serverId'); let checkHeroes = await checkBattleHeroesByHid(roleId, showLineup); if (showLineup.length > 0 && !checkHeroes) return resResult(STATUS.BATTLE_HERO_NOT_FOUND); if (showLineup.length > LINEUP_NUM) { return resResult(STATUS.LINEUP_MAX); } let role = await RoleModel.updateRoleInfo(roleId, { showLineup }); let r = new Rank(REDIS_KEY.SHOW_LINEUP, {}); await r.generParamAndSet(REDIS_KEY.SHOW_LINEUP, { roleId }, { role }); return resResult(STATUS.SUCCESS, { showLineup: role.showLineup }); } // 更换头像 async setHead(msg: { id: number }, session: BackendSession) { let { id } = msg; let roleId = session.get('roleId'); let role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.GET_HEADS); if (!role) return resResult(STATUS.ROLE_NOT_FOUND); let { heads } = role; let curHead = heads.find(cur => cur.id == id); if (!curHead) return resResult(STATUS.HEAD_NOT_FOUND); if (curHead.enable) return resResult(STATUS.HEAD_IS_WEARING); if (!curHead.status) return resResult(STATUS.HEAD_IS_LOCKED); let oldHead = heads.find(cur => cur.enable); // 穿戴中的头像 if (oldHead) { oldHead.enable = false; } curHead.enable = true; role = await RoleModel.updateRoleInfo(roleId, { heads }); await updateUserInfo(REDIS_KEY.USER_INFO, roleId, [{ field: 'head', value: id }]); return resResult(STATUS.SUCCESS, { heads: role.heads, head: role.head }); } // 更换相框 async setFrame(msg: { id: number }, session: BackendSession) { let { id } = msg; let roleId = session.get('roleId'); let role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.GET_HEADS); if (!role) return resResult(STATUS.ROLE_NOT_FOUND); let { frames } = role; let curFrame = frames.find(cur => cur.id == id); if (!curFrame) return resResult(STATUS.FRAME_NOT_FOUND); if (curFrame.enable) return resResult(STATUS.FRAME_IS_WEARING); if (!curFrame.status) return resResult(STATUS.FRAME_IS_LOCKED); let oldHead = frames.find(cur => cur.enable); // 穿戴中的头像 if (oldHead) { oldHead.enable = false; } curFrame.enable = true; role = await RoleModel.updateRoleInfo(roleId, { frames }); await updateUserInfo(REDIS_KEY.USER_INFO, roleId, [{ field: 'frame', value: id }]); return resResult(STATUS.SUCCESS, { frames: role.frames, frame: role.frame }); } // 更换形象 async setSpine(msg: { id: number }, session: BackendSession) { let { id } = msg; let roleId = session.get('roleId'); let role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.GET_HEADS); if (!role) return resResult(STATUS.ROLE_NOT_FOUND); let { spines } = role; let curSpine = spines.find(cur => cur.id == id); if (!curSpine) return resResult(STATUS.SPINE_NOT_FOUND); if (curSpine.enable) return resResult(STATUS.SPINE_IS_WEARING); if (!curSpine.status) return resResult(STATUS.SPINE_IS_LOCKED); let oldHead = spines.find(cur => cur.enable); // 穿戴中的头像 if (oldHead) { oldHead.enable = false; } curSpine.enable = true; role = await RoleModel.updateRoleInfo(roleId, { spines }); await updateUserInfo(REDIS_KEY.USER_INFO, roleId, [{ field: 'spine', value: id }]); return resResult(STATUS.SUCCESS, { spines: role.spines, spine: role.spine }); } // 改名 async rename(msg: { roleName: string }, session: BackendSession) { let { roleName } = msg; let roleId = session.get('roleId'); let serverId = session.get('serverId'); let sid = session.get('sid'); if(!roleName) return resResult(STATUS.WRONG_PARMS); let checkName = await RoleModel.checkName(roleName, serverId); if (checkName) return resResult(STATUS.NAME_HAS_USED); let role = await RoleModel.findByRoleId(roleId, 'renameCnt'); let costGold = role.renameCnt >= dicParam.NAMEPLATE.NAMEPLATE_FREECOST? dicParam.NAMEPLATE.NAMEPLATE_FEECOST: 0; if(costGold > 0) { let result = await handleCost(roleId, sid, [getGoldObject(costGold)], ITEM_CHANGE_REASON.RENAME); if(!result) return resResult(STATUS.BATTLE_GOLD_NOT_ENOUGH); } role = await RoleModel.incRoleInfo(roleId, { renameCnt: 1 }, { roleName }); session.set('roleName', role.roleName); session.push('roleName', () => { }); await updateUserInfo(REDIS_KEY.USER_INFO, roleId, [{ field: 'roleName', value: roleName }]); return resResult(STATUS.SUCCESS, { roleName: role.roleName, renameCnt: role.renameCnt }); } async saveGuide(msg: { ids: number[] }, session: BackendSession) { let roleId = session.get('roleId'); let { ids } = msg; if(ids == undefined || ids.length <= 0) { return resResult(STATUS.WRONG_PARMS); } let role = await RoleModel.saveGuide(roleId, ids); return resResult(STATUS.SUCCESS, { guide: role.guide }); } // 防沉迷调试用,推送窗口 async debugPlayerTime(msg: { type: number }, session: BackendSession) { let { type } = msg; let roleId = session.get('roleId'); let sid = session.get('sid'); if (type == 1) { pinus.app.channelService.pushMessageByUids('onPlayTime', resResult(STATUS.SUCCESS, { isGuest: true, guestTime: 60 * 60, // 游客已体验时间 hasAuthenticated: false, // 是否进行过实名认证 isAdult: false, // 是否已成年 todayPlayTime: 60 * 60, // 今天已游戏时长 type: 1 }), [{ uid: roleId, sid: sid }]); } else if (type == 2) { pinus.app.channelService.pushMessageByUids('onPlayTime', resResult(STATUS.SUCCESS, { isGuest: false, guestTime: 0, // 游客已体验时间 hasAuthenticated: true, // 是否进行过实名认证 isAdult: false, // 是否已成年 todayPlayTime: 60 * 60, // 今天已游戏时长 type: 2 }), [{ uid: roleId, sid: sid }]); } else if (type == 3) { pinus.app.channelService.pushMessageByUids('onPlayTime', resResult(STATUS.SUCCESS, { isGuest: false, guestTime: 0, // 游客已体验时间 hasAuthenticated: true, // 是否进行过实名认证 isAdult: false, // 是否已成年 todayPlayTime: 3 * 60 * 60, // 今天已游戏时长 type: 3 }), [{ uid: roleId, sid: sid }]); } else if (type == 4) { pinus.app.channelService.pushMessageByUids('onPlayTime', resResult(STATUS.SUCCESS, { isGuest: false, guestTime: 0, // 游客已体验时间 hasAuthenticated: true, // 是否进行过实名认证 isAdult: false, // 是否已成年 todayPlayTime: 1.5 * 60 * 60, // 今天已游戏时长 type: 4 }), [{ uid: roleId, sid: sid }]); } return resResult(STATUS.SUCCESS); } // debug接口,清空某个角色 async debugClearRole(msg: { magicWord: string }, session: BackendSession) { const { magicWord } = msg; if (magicWord !== DEBUG_MAGIC_WORD) { return resResult(STATUS.TOKEN_ERR); } let roleId = session.get('roleId'); let role = await RoleModel.findByRoleId(roleId); if(!role) return resResult(STATUS.ROLE_NOT_FOUND); if(role.hasInit) { let userInfo = role.userInfo; let newRoleId = genCode(10); const seqId = await Counter.getNewCounter(COUNTER.ROLE) || -1; await RoleModel.findOneAndUpdate({ roleId }, { $set: { 'userInfo.uid': 0, roleName: 'deletedRole' } }); role = await RoleModel.createRole(userInfo.uid, role.serverId, { roleId: newRoleId, code: role.code, roleName: newRoleId, seqId, lv: DEFAULT_LV, exp: (getExpByLv(DEFAULT_LV - 1) || { sum: 0 }).sum || 0 }); session.set('roleId', newRoleId); session.push('roleId', () => {}); } return resResult(STATUS.SUCCESS, { roleId: role?.roleId }); } async debugRoleLvUp(msg: { magicWord: string, lv: number }, session: BackendSession) { const { magicWord, lv } = msg; if (magicWord !== DEBUG_MAGIC_WORD) { return resResult(STATUS.TOKEN_ERR); } let roleId = session.get('roleId'); let roleLvInfo = gameData.kingexp.get(lv - 1); let role = await RoleModel.updateRoleInfo(roleId, { lv, exp: roleLvInfo.sum }); return resResult(STATUS.SUCCESS, { lv: role.lv }); } public async debugSetRole(msg: { magicWord: string, params: RoleUpdate }, session: BackendSession) { let roleId: string = session.get('roleId'); let { magicWord, params } = msg; if (magicWord !== DEBUG_MAGIC_WORD) { return resResult(STATUS.TOKEN_ERR); } let role = await RoleModel.updateRoleInfo(roleId, params); return resResult(STATUS.SUCCESS, { role }); } public async test(msg: { magicWord: string }, session: BackendSession) { let roleId: string = session.get('roleId'); let serverId: string = session.get('serverId'); let { magicWord } = msg; if (magicWord !== DEBUG_MAGIC_WORD) { return resResult(STATUS.TOKEN_ERR); } let role = await RoleModel.findByRoleId(roleId); let user = await UserModel.findUserByUid(role.userInfo.uid); reportTAEvent(roleId, 'test', { serverId }, user.ip); return resResult(STATUS.SUCCESS); } async debugTreatRoleName(msg: { magicWord: string }, session: BackendSession) { let roleId: string = session.get('roleId'); let { magicWord } = msg; if (magicWord !== DEBUG_MAGIC_WORD) { return resResult(STATUS.TOKEN_ERR); } await treatRoleName(roleId, true); return resResult(STATUS.SUCCESS); } }