diff --git a/game-server/app/servers/gm/handler/gmRoleHandler.ts b/game-server/app/servers/gm/handler/gmRoleHandler.ts index 60801f56b..7cb428972 100644 --- a/game-server/app/servers/gm/handler/gmRoleHandler.ts +++ b/game-server/app/servers/gm/handler/gmRoleHandler.ts @@ -4,10 +4,10 @@ import { STATUS } from '../../../consts/statusCode'; import { getRoleOnlineInfo, updateUserInfo } from '../../../services/redisService'; import { addItems, createHeroes } from '../../../services/rewardService'; import { RewardInter } from '../../../pubUtils/interface'; -import { getExpByLv, getLvByExp } from '../../../pubUtils/data'; +import { gameData, getExpByLv, getHeroExpByLv, getHeroLvByExp, getLvByExp } from '../../../pubUtils/data'; import { RoleModel, RoleType } from '../../../db/Role'; -import { BLOCK_TYPE, GUILD_AUTH, GUILD_DISMISS_WAY, GUILD_JOB, GUILD_MASTER_CHANGE_WAY, GUILD_STATUS, GUILD_STRUCTURE, ITEM_CHANGE_REASON, MAIL_TYPE, REDIS_KEY, TA_EVENT } from '../../../consts'; -import { GuildFormParam } from '../../../domain/backEndField/params'; +import { BLOCK_TYPE, GUILD_AUTH, GUILD_DISMISS_WAY, GUILD_JOB, GUILD_MASTER_CHANGE_WAY, GUILD_STATUS, GUILD_STRUCTURE, HERO_SYSTEM_TYPE, ITEM_CHANGE_REASON, MAIL_TYPE, REDIS_KEY, TA_EVENT } from '../../../consts'; +import { GuildFormParam, SetHeroParam } from '../../../domain/backEndField/params'; import { GuildModel, GuildUpdateParam } from '../../../db/Guild'; import { getGuildChannelSid } from '../../../services/chatService'; import { pushGuildNoticeUpdateMsg } from '../../../services/sysChatService' @@ -17,6 +17,11 @@ import { UserGuildApplyModel } from '../../../db/UserGuildApply'; import { reportTAEvent } from '../../../services/sdkService'; import { sendMailByContent } from '../../../services/mailService'; import { GuildLeader } from '../../../domain/rank'; +import { HeroModel } from '../../../db/Hero'; +import { calAllHeroCe, calPlayerCeAndSave } from '../../../services/playerCeService'; +import { SkinModel } from '../../../db/Skin'; +import { PvpDefenseModel } from '../../../db/PvpDefense'; +import { calculatetopLineup } from '../../../pubUtils/playerCe'; let timer: NodeJS.Timer; export default function (app: Application) { @@ -73,6 +78,51 @@ export class GmRoleHandler { return resResult(STATUS.SUCCESS); } + + async setHero(msg: { roleId: string, hid: number, param: SetHeroParam }, session: BackendSession) { + let { roleId, hid } = msg; + let param = new SetHeroParam(msg.param); + if(!param.checkParams()) return resResult(STATUS.WRONG_PARMS); + let hero = await HeroModel.findByHidAndRole(hid, roleId); + if(!hero) return resResult(STATUS.HERO_NOT_FIND); + let { sid } = await getRoleOnlineInfo(roleId); + + if(param.lv && param.lv > 0) { + let exp = getHeroExpByLv(param.lv - 1)||0; + exp += (param.expInc||0); + let newLv = getHeroLvByExp(exp); + param.lv = newLv; + param['exp'] = exp; + } + hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.STAR, sid, roleId, hero, param); + if(param.job > 0) { + hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.STAGEUP, sid, roleId, hero, { job: param.job, jobStage: 0 }); + } + + if (hero.star != param.star) { + await calAllHeroCe(HERO_SYSTEM_TYPE.STAR, sid, roleId, {}, [hid, 1]); // 升星可能影响到百家学院全局加成 + } + return resResult(STATUS.SUCCESS); + } + + + async deleteHero(msg: { roleId: string, hid: number }, session: BackendSession) { + let { roleId, hid } = msg; + + let hero = await HeroModel.findByHidAndRole(hid, roleId); + if (!hero) return resResult(STATUS.HERO_NOT_FIND); + + await HeroModel.deleteHero(roleId, hid); + await SkinModel.deleteByHero(roleId, hid); + let role = await RoleModel.findByRoleId(roleId); + let { topLineup, topLineupCe } = await calculatetopLineup(role, hid, 0, null); + await PvpDefenseModel.deleteHero(roleId, hid); + await RoleModel.updateRoleInfo(roleId, { topLineup, topLineupCe, ce: role.ce - hero.ce }); + + return resResult(STATUS.SUCCESS); + } + + async updateGuild(msg: GuildFormParam, session: BackendSession ) { const uid = session.get('uid'); let params = new GuildFormParam(msg); diff --git a/game-server/app/services/roleService.ts b/game-server/app/services/roleService.ts index d41bfa1a4..ba8c3614c 100644 --- a/game-server/app/services/roleService.ts +++ b/game-server/app/services/roleService.ts @@ -12,6 +12,7 @@ import { CheckMeterial } from './rewardService'; import { HeroUpdate } from '../db/Hero'; import { SkinUpdate } from '../db/Skin'; import { Figure } from '../domain/dbGeneral'; +import { pick } from 'underscore'; export async function getTeraphStrengthenResult(role: RoleType, count: number, dicTeraph: DicTeraph, teraph: Teraph) { let criAttr: number[] = [], times = 0; @@ -79,13 +80,13 @@ export function addUserToChannel(channel: Channel, user: ChannelUser) { export async function getSimpleRoleInfo(roleId: string) { if (!roleId) return null; let role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.SHOW_SIMPLE, true); - return role; + return pick(role, ['roleId', 'roleName', 'head', 'frame', 'spine', 'lv', 'title', 'job', 'quitTime', 'loginTime', 'vLv', 'guildName', 'serverId', 'userInfo']); } export async function getSimpleRoleInfos(roleIds: string[]) { if (!roleIds || !roleIds.length) return null; let roles = await RoleModel.findByRoleIds(roleIds, ROLE_SELECT.SHOW_SIMPLE, true); - return roles; + return roles.map(role => pick(role, ['roleId', 'roleName', 'head', 'frame', 'spine', 'lv', 'title', 'job', 'quitTime', 'loginTime', 'vLv', 'guildName', 'serverId', 'userInfo'])); } /** diff --git a/gm-server/app/controller/users.ts b/gm-server/app/controller/users.ts index 1eb852015..ceab951bc 100644 --- a/gm-server/app/controller/users.ts +++ b/gm-server/app/controller/users.ts @@ -56,12 +56,6 @@ export default class UserController extends Controller { ctx.body = await ctx.service.users.getHeroList(page, pageSize, sortField, sortOrder, form); } - public async deleteHero() { - const { ctx } = this; - const { roleId, hid } = ctx.request.body; - ctx.body = await ctx.service.users.deleteHero(roleId, parseInt(hid)); - } - // public async setHeroLv() { // const { ctx } = this; // const { selectedRowKeys: roleIdAndHids, lv } = ctx.request.body; diff --git a/gm-server/app/router.ts b/gm-server/app/router.ts index 81ae86815..14d734a05 100644 --- a/gm-server/app/router.ts +++ b/gm-server/app/router.ts @@ -29,7 +29,6 @@ export default (app: Application) => { router.post('/api/users/setwar', tokenParser, controller.users.setWar); router.post('/api/users/setcreatetime', tokenParser, controller.users.setCreateTime); router.post('/api/users/getherolist', tokenParser,controller.users.getHeroList); - router.post('/api/users/deletehero', tokenParser, controller.users.deleteHero); router.post('/api/users/getequiplist', tokenParser, controller.users.getEquipList); router.post('/api/users/getitemlist', tokenParser, controller.users.getItemList); router.post('/api/users/getguildlist', tokenParser, controller.users.getGuildList); diff --git a/gm-server/app/service/users.ts b/gm-server/app/service/users.ts index e791481d7..18047f2dc 100644 --- a/gm-server/app/service/users.ts +++ b/gm-server/app/service/users.ts @@ -2,14 +2,13 @@ import { UserModel } from '@db/User'; import { CeAttrDataRole, RoleModel } from '@db/Role'; import { HeroModel } from '@db/Hero'; import { EquipModel } from '@db/Equip'; -import { PvpDefenseModel } from '@db/PvpDefense'; import { Service } from 'egg'; import { STATUS, HERO_SYSTEM_TYPE, ITEM_CHANGE_REASON, REDIS_KEY, WAR_TYPE } from '@consts'; import { ITID } from '@consts'; import { ItemModel } from '@db/Item'; import { gameData, getExpByLv } from '@pubUtils/data'; -import { calPlayerCeAndSave, calculatetopLineup, calEquipSeids } from '@pubUtils/playerCe'; +import { calPlayerCeAndSave, calEquipSeids } from '@pubUtils/playerCe'; import { AttributeCal } from '@domain/roleField/attribute'; import { smsModel } from '@db/Sms'; import { isString } from 'underscore'; @@ -19,7 +18,6 @@ import { GiftCodeDetailModel } from '@db/GiftCodeDetail'; import { CreateHeroes, deletRole } from '@pubUtils/roleUtil'; import { RScriptRecordModel } from '@db/RScriptRecord'; import { DicWar } from '@pubUtils/dictionary/DicWar'; -import { SkinModel } from '@db/Skin'; import { SearchEquipParam, SearchHeroParam, SearchUserParam, SearchGiftCodeParam, SearchGiftCodeDetailParam, SearchItemParam, SearchGuildParam } from '@domain/backEndField/search'; import { CreateGiftCode, UpdateGiftCode } from '@domain/backEndField/params'; import { isNumber } from 'util'; @@ -358,24 +356,6 @@ export default class GMUsers extends Service { return ctx.service.utils.resResult(STATUS.SUCCESS, { list, total }) } - - public async deleteHero(roleId: string, hid: number) { - console.log('enter Auth deleteRole'); - const ctx = this.ctx; - - let hero = await HeroModel.findByHidAndRole(hid, roleId); - if (!hero) return ctx.service.utils.resResult(STATUS.WRONG_PARMS); - - await HeroModel.deleteHero(roleId, hid); - await SkinModel.deleteByHero(roleId, hid); - let role = await RoleModel.findByRoleId(roleId); - await calculatetopLineup(role, hid, 0, null); - await PvpDefenseModel.deleteHero(roleId, hid); - await RoleModel.updateRoleInfo(roleId, { topLineup: role.topLineup, topLineupCe: role.topLineupCe, ce: role.ce - hero.ce }); - - return ctx.service.utils.resResult(STATUS.SUCCESS); - } - public async deleteEquip(roleIdAndSeqIds: string[]) { console.log('enter Auth deleteEquip'); const ctx = this.ctx; diff --git a/shared/db/PvpDefense.ts b/shared/db/PvpDefense.ts index a5571556b..a9f0e5378 100644 --- a/shared/db/PvpDefense.ts +++ b/shared/db/PvpDefense.ts @@ -159,7 +159,7 @@ export default class PvpDefense extends BaseModel { } public static async deleteHero(roleId: string, hid: number) { - let result:PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({roleId}, {$pull:{heroes: {actorId:hid}}}, {new: true}).lean(); + let result:PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({roleId}, {$pull:{lineupCe: {hid}, heroScores: {hid}}, $set: {defense: null, attack: null}}, {new: true}).lean(); return result; } } diff --git a/shared/domain/backEndField/params.ts b/shared/domain/backEndField/params.ts index ba14f3c6d..8ccb435ac 100644 --- a/shared/domain/backEndField/params.ts +++ b/shared/domain/backEndField/params.ts @@ -288,4 +288,30 @@ export class GuildFormParam { if(this.donate && !isNumber(this.donate)) return false; return true; } +} + +export class SetHeroParam { + lv?: number; + expInc?: number; + star?: number; + quality?: number; + colorStar?: number; + job?: number; + + constructor(obj?: any) { + if(obj) { + for(let key in obj) { + this[key] = obj[key]; + } + } + } + + checkParams() { + if(this.lv && !isNumber(this.lv)) return false; + if(this.expInc && !isNumber(this.expInc)) return false; + if(this.star && !isNumber(this.star)) return false; + if(this.quality && !isNumber(this.quality)) return false; + if(this.colorStar && !isNumber(this.colorStar)) return false; + return true; + } } \ No newline at end of file diff --git a/shared/resource/jsons/dic_api.json b/shared/resource/jsons/dic_api.json index 78fd67e51..2ffe223ca 100644 --- a/shared/resource/jsons/dic_api.json +++ b/shared/resource/jsons/dic_api.json @@ -162,7 +162,7 @@ }, { "id": 24, - "api": "/api/users/deletehero", + "api": "gm.gmRoleHandler.deleteHero", "name": "删除武将", "module": "user", "type": "delete" @@ -768,5 +768,12 @@ "name": "数数上报", "module": "server", "type": "update" + }, + { + "id": 111, + "api": "gm.gmRoleHandler.setHero", + "name": "设置武将", + "module": "user", + "type": "update" } ] \ No newline at end of file