diff --git a/game-server/app/servers/gm/handler/gmRoleHandler.ts b/game-server/app/servers/gm/handler/gmRoleHandler.ts index bbd04aeae..b7c0fcbef 100644 --- a/game-server/app/servers/gm/handler/gmRoleHandler.ts +++ b/game-server/app/servers/gm/handler/gmRoleHandler.ts @@ -1,7 +1,7 @@ import { Application, BackendSession, pinus } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { STATUS } from '../../../consts/statusCode'; -import { getRoleOnlineInfo, updateUserInfo } from '../../../services/redisService'; +import { getRoleOnlineInfo, redisClient, updateUserInfo } from '../../../services/redisService'; import { addItems } from '../../../services/role/rewardService'; import { RewardInter } from '../../../pubUtils/interface'; import { gameData, getExpByLv, getHeroExpByLv, getHeroLvByExp, getLvByExp, getEquipByJobClassAndEPlace } from '../../../pubUtils/data'; @@ -30,6 +30,8 @@ import { RoleCeModel } from '../../../db/RoleCe'; import { setTrainLv } from '../../../services/gmService'; import { ArtifactModel } from '../../../db/Artifact'; import { roleLeave } from '../../../services/redisService'; +import { KeyName } from '../../../domain/rank'; +import { LadderMatchModel } from '../../../db/LadderMatch'; let timer: NodeJS.Timer; export default function (app: Application) { @@ -407,4 +409,29 @@ export class GmRoleHandler { await calculateCeWithRole(HERO_SYSTEM_TYPE.RE_CAL, roleId, role.serverId, null, {}, { role, schools, jewels, heroes, skins, artifacts }); return resResult(STATUS.SUCCESS); } + + + async clearRank(msg: { roleId: string }, session: BackendSession) { + let { roleId } = msg; + let role = await RoleModel.findByRoleId(roleId); + if(!role) return resResult(STATUS.WRONG_PARMS); + if(role.blockType != 2) return resResult(STATUS.GM_CANNOT_CLEAR_RANK) + let { serverId } = role; + + await redisClient().zremAsync(new KeyName(REDIS_KEY.TOWER_RANK, { serverId }).getName(), roleId); + await redisClient().zremAsync(new KeyName(REDIS_KEY.LADDER, { serverId }).getName(), roleId); + await LadderMatchModel.updateByRoleId(roleId, { rank: 0 }); + await redisClient().zremAsync(new KeyName(REDIS_KEY.TOP_LINEUP_RANK, { serverId }).getName(), roleId); + await redisClient().zremAsync(new KeyName(REDIS_KEY.TOP_HERO_RANK, { serverId }).getName(), roleId); + await redisClient().zremAsync(new KeyName(REDIS_KEY.HERO_NUM_RANK, { serverId }).getName(), roleId); + await redisClient().zremAsync(new KeyName(REDIS_KEY.SUM_CE_RANK, { serverId }).getName(), roleId); + await redisClient().zremAsync(new KeyName(REDIS_KEY.USER_LV, { serverId }).getName(), roleId); + await redisClient().zremAsync(new KeyName(REDIS_KEY.MAIN_RANK, { serverId }).getName(), roleId); + await redisClient().zremAsync(new KeyName(REDIS_KEY.MAIN_ELITE_RANK, { serverId }).getName(), roleId); + + let keys = await redisClient().keysAsync(REDIS_KEY.PVP_RANK); + for(let key of keys) await redisClient().zremAsync(key, roleId); + + return resResult(STATUS.SUCCESS); + } } \ No newline at end of file diff --git a/shared/consts/statusCode.ts b/shared/consts/statusCode.ts index cee76c55b..faec85044 100644 --- a/shared/consts/statusCode.ts +++ b/shared/consts/statusCode.ts @@ -741,6 +741,8 @@ export const STATUS = { GM_ACTIVITY_TIME_ERR: { code: 60031, simStr: '时间不可有重叠' }, GM_USER_TYPE_ERR: { code: 60032, simStr: '您不可使用账号密码登录,请从专属后台点击链接进入' }, GM_GVG_TIME_ERR: { code: 60033, simStr: '时间配置错误' }, + GM_CANNOT_CLEAR_RANK: { code: 60034, simStr: '没有封号的玩家不能清空' }, + // 支付相关状态 70000 - 79999 NO_PRODUCT_ID: { code: 70001, simStr: '无效商品' }, NO_PAY_TYPE: { code: 70002, simStr: '无效支付类型' }, diff --git a/shared/resource/jsons/dic_api.json b/shared/resource/jsons/dic_api.json index 45f11968e..d3b2114b2 100644 --- a/shared/resource/jsons/dic_api.json +++ b/shared/resource/jsons/dic_api.json @@ -1013,5 +1013,12 @@ "name": "宝物查询", "module": "user", "type": "find" + }, + { + "id": 147, + "api": "gm.gmRoleHandler.clearRank", + "name": "清空排行榜", + "module": "user", + "type": "update" } ] \ No newline at end of file