diff --git a/game-server/app/servers/guild/handler/auctionHandler.ts b/game-server/app/servers/guild/handler/auctionHandler.ts index fef246ca4..925ae2b6d 100644 --- a/game-server/app/servers/guild/handler/auctionHandler.ts +++ b/game-server/app/servers/guild/handler/auctionHandler.ts @@ -263,7 +263,7 @@ export class AuctionHandler { const userGuild = await UserGuildModel.createUserGuild(guild.code, role, true); if (!userGuild) return resResult(STATUS.GUILD_CREATE_ERROR); - await RoleModel.joinGuild(roleId, guild.code, guild.name); + await RoleModel.joinGuild(roleId, guild.code, guild.name, true); await UserGuildApplyModel.deleteApply(roleId); // 删除玩家所有对其他公会的申请 guildCode = guild.code; session.set('guildCode', guildCode); diff --git a/game-server/app/servers/guild/handler/guildHandler.ts b/game-server/app/servers/guild/handler/guildHandler.ts index 318980729..70f004667 100644 --- a/game-server/app/servers/guild/handler/guildHandler.ts +++ b/game-server/app/servers/guild/handler/guildHandler.ts @@ -78,7 +78,7 @@ export class GuildHandler { const userGuild = await UserGuildModel.createUserGuild(guild.code, role, true); if (!userGuild) return resResult(STATUS.GUILD_CREATE_ERROR); - await RoleModel.joinGuild(roleId, guild.code, guild.name); + await RoleModel.joinGuild(roleId, guild.code, guild.name, true); await UserGuildApplyModel.deleteApply(roleId); // 删除玩家所有对其他公会的申请 // 加入排行 @@ -231,6 +231,8 @@ export class GuildHandler { let myUserGuild = await UserGuildModel.updateInfo(roleId, { auth: GUILD_AUTH.MEMBER, job: GUILD_JOB.SHIBING }, {}); // 自己降权限 setUserGuildSession(session, myUserGuild); await updateUserInfo(REDIS_KEY.GUILD_INFO, code, [{ field: 'leader', value: new GuildLeader(role) }]); + await RoleModel.updateRoleInfo(memberRoleId, { isGuildLeader: true }); + await RoleModel.updateRoleInfo(roleId, { isGuildLeader: false }); } guild = await GuildModel.updateInfo(code, updateObject, { managerCnt: managerCntInc }, 'managerCnt code name'); // 如果有转让团长设置leader @@ -704,6 +706,8 @@ export class GuildHandler { await sendMailByContent(MAIL_TYPE.GUILD_BE_SET_LEADER, topUser.roleId, { sendName: roleName, params: [guild.name] }); await updateUserInfo(REDIS_KEY.GUILD_INFO, code, [{ field: 'leader', value: new GuildLeader(topUser) }]); + await RoleModel.updateRoleInfo(leaderRoleId, { isGuildLeader: false }); + await RoleModel.updateRoleInfo(topUser.roleId, { isGuildLeader: true }); reportTAEvent(roleId, TA_EVENT.GUILD_MASTER_CHANGE, { way: GUILD_MASTER_CHANGE_WAY.IMPEACH, change_id_after: topUser.roleId }, ip) let isOnline = await isRoleOnline(topUser.roleId); diff --git a/game-server/app/servers/role/handler/roleHandler.ts b/game-server/app/servers/role/handler/roleHandler.ts index 2f94840a2..77179b446 100644 --- a/game-server/app/servers/role/handler/roleHandler.ts +++ b/game-server/app/servers/role/handler/roleHandler.ts @@ -27,6 +27,7 @@ import { checkFilterWords, reportTAEvent, treatRoleName } from '../../../service import { createHeroes } from '../../../services/role/createHero'; import { calculateCeWithHero, calculateCeWithRole } from '../../../services/playerCeService'; import { sendMessageToUserWithSuc } from '../../../services/pushService'; +import { GuildLeader } from '../../../domain/rank'; export default function (app: Application) { new HandlerService(app, {}); @@ -353,6 +354,7 @@ export class RoleHandler { async setHead(msg: { id: number }, session: BackendSession) { let { id } = msg; let roleId = session.get('roleId'); + let guildCode = session.get('guildCode'); let role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.GET_HEADS); if (!role) return resResult(STATUS.ROLE_NOT_FOUND); @@ -370,6 +372,9 @@ export class RoleHandler { role = await RoleModel.updateRoleInfo(roleId, { heads }); await updateUserInfo(REDIS_KEY.USER_INFO, roleId, [{ field: 'head', value: id }]); + if(role.isGuildLeader) { + await updateUserInfo(REDIS_KEY.GUILD_INFO, guildCode, [{ field: 'leader', value: new GuildLeader(role) }]); + } return resResult(STATUS.SUCCESS, { heads: role.heads, head: role.head }); } @@ -378,6 +383,7 @@ export class RoleHandler { async setFrame(msg: { id: number }, session: BackendSession) { let { id } = msg; let roleId = session.get('roleId'); + let guildCode = session.get('guildCode'); let role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.GET_HEADS); if (!role) return resResult(STATUS.ROLE_NOT_FOUND); @@ -395,6 +401,9 @@ export class RoleHandler { role = await RoleModel.updateRoleInfo(roleId, { frames }); await updateUserInfo(REDIS_KEY.USER_INFO, roleId, [{ field: 'frame', value: id }]); + if(role.isGuildLeader) { + await updateUserInfo(REDIS_KEY.GUILD_INFO, guildCode, [{ field: 'leader', value: new GuildLeader(role) }]); + } return resResult(STATUS.SUCCESS, { frames: role.frames, frame: role.frame }); } @@ -403,6 +412,7 @@ export class RoleHandler { async setSpine(msg: { id: number }, session: BackendSession) { let { id } = msg; let roleId = session.get('roleId'); + let guildCode = session.get('guildCode'); let role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.GET_HEADS); if (!role) return resResult(STATUS.ROLE_NOT_FOUND); @@ -420,6 +430,9 @@ export class RoleHandler { role = await RoleModel.updateRoleInfo(roleId, { spines }); await updateUserInfo(REDIS_KEY.USER_INFO, roleId, [{ field: 'spine', value: id }]); + if(role.isGuildLeader) { + await updateUserInfo(REDIS_KEY.GUILD_INFO, guildCode, [{ field: 'leader', value: new GuildLeader(role) }]); + } return resResult(STATUS.SUCCESS, { spines: role.spines, spine: role.spine }); } @@ -429,6 +442,7 @@ export class RoleHandler { let { roleName } = msg; let roleId = session.get('roleId'); let serverId = session.get('serverId'); + let guildCode = session.get('guildCode'); let sid = session.get('sid'); if(!roleName) return resResult(STATUS.WRONG_PARMS); @@ -446,6 +460,9 @@ export class RoleHandler { session.set('roleName', role.roleName); session.push('roleName', () => { }); await updateUserInfo(REDIS_KEY.USER_INFO, roleId, [{ field: 'roleName', value: roleName }]); + if(role.isGuildLeader) { + await updateUserInfo(REDIS_KEY.GUILD_INFO, guildCode, [{ field: 'leader', value: new GuildLeader(role) }]); + } return resResult(STATUS.SUCCESS, { roleName: role.roleName, renameCnt: role.renameCnt }); } diff --git a/game-server/app/services/guildService.ts b/game-server/app/services/guildService.ts index 42e73a154..3fc969751 100644 --- a/game-server/app/services/guildService.ts +++ b/game-server/app/services/guildService.ts @@ -91,7 +91,7 @@ export async function joinGuild(code: string, guildName: string, lv: number, rol let res: any = await lockData(serverId, DATA_NAME.JOIN_GUILD, code);// 加锁 if (!!res.err) return { status: -1, resResult: resResult(STATUS.REDLOCK_ERR) }; - const result = await RoleModel.joinGuild(roleId, code, guildName); + const result = await RoleModel.joinGuild(roleId, code, guildName, false); if (!result) { res.releaseCallback();//解锁 return { status: -1, resResult: resResult(STATUS.GUILD_HAS_JOIN) }; diff --git a/game-server/app/services/normalBattleService.ts b/game-server/app/services/normalBattleService.ts index 850271a42..8f9083e57 100644 --- a/game-server/app/services/normalBattleService.ts +++ b/game-server/app/services/normalBattleService.ts @@ -12,7 +12,7 @@ import { checkTask } from './task/taskService'; import { RScriptRecordModel } from '../db/RScriptRecord'; import { setAp } from './actionPointService'; import { resResult } from '../pubUtils/util'; -import { LineupParam } from '../domain/rank'; +import { GuildLeader, LineupParam } from '../domain/rank'; import { WarStar } from '../domain/dbGeneral'; import { uniq } from 'underscore'; import { checkPopUpCondition } from './activity/popUpShopService'; @@ -41,6 +41,9 @@ export async function roleLevelup(type: KING_EXP_RATIO_TYPE, roleId: string, kin if (newLv > lv) { // 升级 // await switchOnFunc(roleId, FUNC_OPT_TYPE.LEVEL_UP, newLv, session); await updateUserInfo(REDIS_KEY.USER_INFO, roleId, [{ field: 'lv', value: newLv }]); + if(role.isGuildLeader) { + await updateUserInfo(REDIS_KEY.GUILD_INFO, role.guildCode, [{ field: 'leader', value: new GuildLeader(role) }]); + } let r = new Rank(REDIS_KEY.USER_LV, { serverId: role.serverId }); await r.setRankWithRoleInfo(roleId, newLv, Date.now(), role); diff --git a/game-server/app/services/sdkService.ts b/game-server/app/services/sdkService.ts index c756c40fb..8b54f6704 100644 --- a/game-server/app/services/sdkService.ts +++ b/game-server/app/services/sdkService.ts @@ -20,6 +20,7 @@ import { SurveyRecModel } from "../db/SurveyRec"; import { SurveyModel } from "../db/Survery"; import { pushGuildInfoUpdate } from "./guildService"; import { sendMessageToUserWithSuc } from "./pushService"; +import { GuildLeader } from "../domain/rank"; // 检查私聊是否合法 @@ -113,6 +114,9 @@ export async function treatRoleName(roleId: string, isDebug?: boolean) { await RoleModel.updateRoleInfo(roleId, { roleName: newName, sdkMark: false }); // 通知处理 await updateUserInfo(REDIS_KEY.USER_INFO, roleId, [{ field: 'roleName', value: newName }]); // redis缓存 + if(role.isGuildLeader) { + await updateUserInfo(REDIS_KEY.GUILD_INFO, role.guildCode, [{ field: 'leader', value: new GuildLeader(role) }]); + } const { sid } = await getRoleOnlineInfo(roleId); if(!!sid) { await pinus.app.rpc.connector.connectorRemote.setOtherUserSession.toServer(sid,[{ roleId, roleName: newName }]); // 改session diff --git a/shared/consts/constModules/selectConst.ts b/shared/consts/constModules/selectConst.ts index 62a45b6cd..888764b81 100644 --- a/shared/consts/constModules/selectConst.ts +++ b/shared/consts/constModules/selectConst.ts @@ -12,7 +12,7 @@ export enum ROLE_SELECT { GET_ROLE_ID = 'roleId roleName lv head frame spine heads frames spines ce title friendCnt serverId userInfo.serverType', GET_MY_SERVER = 'lv serverId userInfo.serverType', COM_BATTLE = 'lv head frame spine heads frames spines topLineupCe', - GET_HEADS = 'heads head frames frame spines spine', + GET_HEADS = 'heads head frames frame spines spine isGuildLeader roleId roleName lv ce title', // 排行榜基础数据 RANK = 'roleId roleName lv vLv head frame spine heads frames spines title guildName ce topLineup towerLv towerUpTime topLineupCe heroNum updatedAt heroNumUpdatedAt dungeonWarId dungeonUpdatedAt dungeonHeroes mainWarId mainUpdatedAt mainEliteWarId mainEliteUpdatedAt showLineup hasGuild', }; diff --git a/shared/db/Role.ts b/shared/db/Role.ts index 76e7ed8bb..578fb09ad 100644 --- a/shared/db/Role.ts +++ b/shared/db/Role.ts @@ -264,6 +264,8 @@ export default class Role extends BaseModel { guildCode: string; // 加入的军团code @prop({ required: true, default: "" }) guildName: string; // 加入的军团名 + @prop({ required: true, default: false }) + isGuildLeader: boolean; // 是否是团长 // 好友 @prop({ required: true, default: 0 }) @@ -582,8 +584,8 @@ export default class Role extends BaseModel { } // 记录加入公会 - public static async joinGuild(roleId: string, guildCode: string, guildName: string) { - const result = await RoleModel.findOneAndUpdate({ roleId, hasGuild: false }, { hasGuild: true, guildCode, guildName }, { new: true }).lean(); + public static async joinGuild(roleId: string, guildCode: string, guildName: string, isGuildLeader: boolean) { + const result = await RoleModel.findOneAndUpdate({ roleId, hasGuild: false }, { $set: { hasGuild: true, guildCode, guildName, isGuildLeader } }, { new: true }).lean(); return result; }