diff --git a/game-server/app/servers/battle/handler/guildHandler.ts b/game-server/app/servers/battle/handler/guildHandler.ts index 46719deca..a8f916d42 100644 --- a/game-server/app/servers/battle/handler/guildHandler.ts +++ b/game-server/app/servers/battle/handler/guildHandler.ts @@ -1,5 +1,5 @@ import { Application, BackendSession, pinus, ChannelService } from 'pinus'; -import { resResult, getRandEelm, reduceCe, getRefTime } from '../../../pubUtils/util'; +import { resResult, getRandEelm, getRefTime } from '../../../pubUtils/util'; import { STATUS, GUILD_OPERATE, GUILD_AUTH, GUILD_JOB, GUILD_APPLY_TYPE, GUILD_STRUCTURE, GUILD_REC_TYPE, GUILD_STRUCTURE_NAME, MAIL_TYPE, REDIS_KEY, GUILD_DATA_NAME, CHAT_SERVER } from '../../../consts'; import { UserGuildModel } from '../../../db/UserGuild'; import { checkAuth, joinGuild, getGuildWithRefActive, getUserGuildWithRefActive, addActive, settleGuildWeekly } from '../../../services/guildService'; @@ -56,16 +56,14 @@ export class GuildHandler { // 创建公会 const guild = await GuildModel.createGuild({ name, icon, notice }, role, serverId); if(!guild) return resResult(STATUS.GUILD_CREATE_ERROR); - guild.guildCe = reduceCe(guild.guildCe); guild.leader = guild.leader; - guild.leader.ce = reduceCe(guild.leader.ce); //创建科技树 await openGuildRefine(guild.code); await unlockTrain(guild.code, 1); const userGuild = await UserGuildModel.createUserGuild(guild.code, role, true); if(!userGuild) return resResult(STATUS.GUILD_CREATE_ERROR); - await RoleModel.joinGuild(roleId); + await RoleModel.joinGuild(roleId, guild.code, guild.name); await UserGuildApplyModel.deleteApply(roleId); // 删除玩家所有对其他公会的申请 // 加入排行 @@ -118,6 +116,7 @@ export class GuildHandler { const roleId = session.get('roleId'); const { code, name, notice, introduce, ceLimit, isAuto } = msg; + if(!name) return resResult(STATUS.WRONG_PARMS); const checkResult = await checkAuth(GUILD_OPERATE.SET_INFO, roleId, code); if(!checkResult) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH); @@ -257,9 +256,7 @@ export class GuildHandler { return resResult(STATUS.GUILD_NOT_FOUND); } - guild.guildCe = reduceCe(guild.guildCe); guild.leader = guild.leader; - guild.leader.ce = reduceCe(guild.leader.ce); let leaderIsOnline = await isRoleOnline(guild.leader.roleId); // 打开公会页面,加入channel @@ -296,8 +293,8 @@ export class GuildHandler { return resResult(STATUS.GUILD_MEMBER_MAX); } - const role = await RoleModel.findByRoleId(roleId); - if(ceLimit > reduceCe(role.ce)) { + const role = await RoleModel.findByRoleId(roleId, null, true); + if(ceLimit > role.ce) { return resResult(STATUS.GUILD_NOT_REACH_CONDI); } // TODO 暂时关闭 @@ -307,7 +304,7 @@ export class GuildHandler { let hasGuild = false; if(isAuto) { // 自动加入 - const joinResult = await joinGuild(code, lv, roleId, serverId); + const joinResult = await joinGuild(code, guild.name, lv, roleId, serverId); if(joinResult.status == 0) { return joinResult.resResult; } @@ -343,7 +340,7 @@ export class GuildHandler { let role = cur.role; delete cur.role; let isOnline = await isRoleOnline(role.roleId); - list.push({ applyCode: cur.applyCode, ...role, ce: reduceCe(role.ce), isOnline }); + list.push({ applyCode: cur.applyCode, ...role, isOnline }); } return resResult(STATUS.SUCCESS, { list }); @@ -368,7 +365,7 @@ export class GuildHandler { if(isReceived) { // 同意申请,加入 for(let { roleId } of applyList) { - const joinResult = await joinGuild(code, guild.lv, roleId, serverId); + const joinResult = await joinGuild(code, guild.name, guild.lv, roleId, serverId); if(joinResult.status == 0) continue; // 更新人数增加 @@ -411,7 +408,7 @@ export class GuildHandler { let result = []; for(let cur of list) { let isOnline = await isRoleOnline(cur.roleId); - result.push({...cur, ce: reduceCe(cur.ce), isOnline}) + result.push({...cur, isOnline}) } return resResult(STATUS.SUCCESS, { quitTime, list: result }); @@ -487,7 +484,7 @@ export class GuildHandler { const { guildCode } = invite; const guild = await GuildModel.findByCode(guildCode, serverId); - const joinResult = await joinGuild(guildCode, guild.lv, roleId, serverId); + const joinResult = await joinGuild(guildCode, guild.name, guild.lv, roleId, serverId); if(joinResult.status == 0) { return joinResult.resResult; } @@ -528,7 +525,7 @@ export class GuildHandler { delete role._id; delete cur.role; let isOnline = await isRoleOnline(role.roleId) - result.push({ ...cur, ...role, ce: reduceCe(role.ce), isOnline: !!isOnline }); + result.push({ ...cur, ...role, isOnline: !!isOnline }); } let leader = result.shift(); @@ -698,7 +695,7 @@ export class GuildHandler { await redisUserInfoUpdate(REDIS_KEY.GUILD_INFO, code, [{field: 'leader', value: new GuildLeader(topUser) } ]); let isOnline = await isRoleOnline(topUser.roleId); - const leader = { ...topUser, ce: reduceCe(topUser.ce), isOnline } + const leader = { ...topUser, ce: topUser.ce, isOnline } return resResult(STATUS.SUCCESS, { code, managerCnt: guild.managerCnt, leader }); diff --git a/game-server/app/services/guildService.ts b/game-server/app/services/guildService.ts index 5ec876138..a15cb2010 100644 --- a/game-server/app/services/guildService.ts +++ b/game-server/app/services/guildService.ts @@ -36,7 +36,7 @@ export async function checkAuth(func: number, roleId: string, code?: string, use * @param lv 公会当前等级,判断人数用 * @param roleId 加入的玩家 */ -export async function joinGuild(code: string, lv: number, roleId: string, serverId: number) { +export async function joinGuild(code: string, guildName: string, lv: number, roleId: string, serverId: number) { // 周结算锁 let isWeeklySum = await isLocked(serverId, GUILD_DATA_NAME.WEEKLY_GUILD_SUM, code); @@ -46,7 +46,7 @@ export async function joinGuild(code: string, lv: number, roleId: string, server let res:any = await lockData(serverId, GUILD_DATA_NAME.JOIN_GUILD, code);// 加锁 if (!!res.err) return { status: 0, resResult: resResult(STATUS.REDLOCK_ERR) }; - const result = await RoleModel.joinGuild(roleId); + const result = await RoleModel.joinGuild(roleId, code, guildName); if(!result) { res.releaseCallback();//解锁 return { status: 0, resResult: resResult(STATUS.GUILD_HAS_JOIN) }; diff --git a/game-server/app/services/playerEventService.ts b/game-server/app/services/playerEventService.ts index 7ccebffb7..c127ab66d 100644 --- a/game-server/app/services/playerEventService.ts +++ b/game-server/app/services/playerEventService.ts @@ -6,14 +6,14 @@ import { RoleModel } from '../db/Role'; export async function eventOnPlayerLvUp(roleId: string, lv: number, addFuncs: Array, dataFuncs: Array) { - // if (!dataFuncs.includes(FUNCS_ID.PVP)) {//开启pvp + if (!dataFuncs.includes(FUNCS_ID.PVP)) {//开启pvp let res = getFuncsSwitch(FUNCS_ID.PVP); if (!res || lv >= res.param) { let role = await RoleModel.findByRoleId(roleId); await checkPvp(role); addFuncs.push(FUNCS_ID.PVP); } - // } + } if (!dataFuncs.includes(FUNCS_ID.EVENT)) {//开启奇遇 let res = getFuncsSwitch(FUNCS_ID.EVENT); diff --git a/shared/db/Guild.ts b/shared/db/Guild.ts index 6f28ff226..d2993bee9 100644 --- a/shared/db/Guild.ts +++ b/shared/db/Guild.ts @@ -4,6 +4,7 @@ import Role, { RoleType } from './Role'; import { genCode } from '../pubUtils/util'; import { GUILD_STRUCTURE, GUILD_STATUS, GUILD_PER_PAGE } from '../consts'; import { getCurWeekTime, nowSeconds } from '../pubUtils/timeUtil'; +import { reduceCe } from '../pubUtils/util'; class Structure { @prop({ required: true }) @@ -66,7 +67,7 @@ export default class Guild extends BaseModel { @prop({ required: true, default: new Date(), select: false }) refTimeDaily: Date; - @prop({ required: true, default: 0 }) + @prop({ required: true, default: 0, get: (val:number) => reduceCe(val), set: (val: number) => val }) guildCe: number; // 总战力 @prop({ required: true, type: String, default: [], select: false }) @@ -98,7 +99,7 @@ export default class Guild extends BaseModel { const result: GuildType = await GuildModel.findOneAndUpdate({ code }, update, { upsert: true, new: true }) .select({ _id: 0, __v: 0, createdAt: 0, updatedAt: 0 }) .populate('leader', { roleId: 1, roleName: 1, sHid: 1, headHid: 1, lv: 1, quitTime: 1, ce: 1, title: 1, _id: 0 }, 'Role') - .lean(); + .lean({ getters: true }); return result; } @@ -146,14 +147,14 @@ export default class Guild extends BaseModel { const result: GuildType = await GuildModel.findOne({ code, status: GUILD_STATUS.RUNNING, serverId }) .select(select) .populate('leader', {roleId: 1, roleName: 1, sHid: 1, headHid: 1, lv: 1, quitTime: 1, ce: 1, title: 1, _id: 0}, 'Role') - .lean(); + .lean({ getter: false }); return result; } public static async addGuild(code: string, roleId: string, maxMemberCnt: number, serverId: number, ce: number) { - let result: GuildType = await GuildModel.findOneAndUpdate({ code, memberCnt: {$lt: maxMemberCnt }, serverId }, { $inc: { memberCnt: 1, guildCe: ce }, $push: { members: roleId } }, { new: true }).lean(); + let result: GuildType = await GuildModel.findOneAndUpdate({ code, memberCnt: {$lt: maxMemberCnt }, serverId }, { $inc: { memberCnt: 1, guildCe: ce }, $push: { members: roleId } }, { new: true }).lean({getters: true}); if(result && result.memberCnt >= maxMemberCnt) { - result = await GuildModel.findOneAndUpdate({ code }, { $set: { isMemberMax: true } }).lean(); + result = await GuildModel.findOneAndUpdate({ code }, { $set: { isMemberMax: true } }).lean({getters: true}); } return result; } @@ -195,7 +196,7 @@ export default class Guild extends BaseModel { } public static async updateCe(roleId: string, inc: number ) { - const result = await GuildModel.findOneAndUpdate({ members: { $elemMatch: { $eq: roleId } }, status: GUILD_STATUS.RUNNING}, {$inc: {guildCe: inc}}, {new: true}).lean(); + const result = await GuildModel.findOneAndUpdate({ members: { $elemMatch: { $eq: roleId } }, status: GUILD_STATUS.RUNNING}, {$inc: {guildCe: inc}}, {new: true}).lean({getters: true}); return result; } diff --git a/shared/db/Role.ts b/shared/db/Role.ts index fb2121ea4..d24231217 100644 --- a/shared/db/Role.ts +++ b/shared/db/Role.ts @@ -212,6 +212,16 @@ export default class Role extends BaseModel { hasGuild: boolean; // 是否加入过公会 @prop({ required: true, default: 0 }) quitGuildTime: number; // 上次退出公会的时间 + @prop({ required: true, default: "" }) + guildCode: string; // 加入的军团code + @prop({ required: true, default: "" }) + guildName: string; // 加入的军团名 + + // 好友 + @prop({ required: true, default: 0 }) + friendCnt: number; // 好友人数 + @prop({ required: true, default: 0 }) + blockCnt: number; // 黑名单人数 public static async findAllByUid(uid: number, lean = true) { const role: RoleType[] = await RoleModel.find({ 'userInfo.uid': uid }).select('roleId roleName serverId').lean(lean); @@ -245,15 +255,15 @@ export default class Role extends BaseModel { return role; } - public static async findRoleByField(field: string, value?: Array, lean = true) { + public static async findRoleByField(field: string, value?: Array, select?: string, getters = false) { let searchObj = {}; if(field != 'all') { - searchObj[field] = { - $in: value - }; + searchObj[field] = { + $in: value + }; } - //.select('uid tel username') - const user: RoleType[] = await RoleModel.find(searchObj).lean(lean); + + const user: RoleType[] = await RoleModel.find(searchObj).select(select).lean({ getters }); return user; } @@ -420,8 +430,8 @@ export default class Role extends BaseModel { } // 记录加入公会 - public static async joinGuild(roleId: string) { - const result = await RoleModel.findOneAndUpdate({ roleId, hasGuild: false }, { hasGuild: true }, { new: true }).lean(); + 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(); return result; } @@ -430,7 +440,7 @@ export default class Role extends BaseModel { const result = await RoleModel.find({ quitTime: { $gt: time }, hasGuild: false, serverId }) .select('roleId roleName ce headHid sHid lv title job quitTime') .sort({quitTime: -1, lv: -1, ce: -1}) - .limit(100).lean(); + .limit(100).lean({getters: true}); return result; } @@ -445,13 +455,19 @@ export default class Role extends BaseModel { // 公会解散 public static async dissmissGuild(members: string[]) { - const result = await RoleModel.updateMany({ roleId: { $in: members } }, { hasGuild: false }).lean(); + const result = await RoleModel.updateMany({ roleId: { $in: members } }, { hasGuild: false, guildCode: "", guildName: "" }).lean(); return result; } // 退出公会 public static async quitGuild(roleId: string, now: number) { - const result = await RoleModel.findOneAndUpdate({ roleId, hasGuild: true }, { hasGuild: false, quitGuildTime: now }, { new: true }).lean(); + const result = await RoleModel.findOneAndUpdate({ roleId, hasGuild: true }, { hasGuild: false, guildCode: "", guildName: "", quitGuildTime: now }, { new: true }).lean(); + return result; + } + + // 增加好友数量 + public static async increaseFriendCnt(roleId: string, inc: number, max: number) { + const result = await RoleModel.findOneAndUpdate({ roleId, friendCnt: {$lt: max}}, {$inc: { friendCnt: inc }}, {new: true}).lean(); return result; } } diff --git a/shared/db/UserGuild.ts b/shared/db/UserGuild.ts index 0060598d4..f280421d4 100644 --- a/shared/db/UserGuild.ts +++ b/shared/db/UserGuild.ts @@ -116,7 +116,7 @@ export default class UserGuild extends BaseModel { .select(select) .sort(sort) .populate('role', 'roleId roleName ce headHid sHid lv title quitTime', 'Role') - .lean(); + .lean({ getters: true }); return userGuilds; } @@ -125,7 +125,7 @@ export default class UserGuild extends BaseModel { .sort({ activeWeekly: -1, activeUpdateTime: 1 }) .select(select) .populate('role', 'roleId roleName ce headHid sHid lv title quitTime', 'Role') - .lean(); + .lean({getters: true}); return userGuilds; } diff --git a/shared/db/UserGuildApply.ts b/shared/db/UserGuildApply.ts index e88df4bc4..98e24b6ee 100644 --- a/shared/db/UserGuildApply.ts +++ b/shared/db/UserGuildApply.ts @@ -80,7 +80,7 @@ export default class UserGuildApply extends BaseModel { .sort({ createdAt: -1 }) .select('applyCode role') .populate('role', 'roleId roleName ce headHid sHid lv title job quitTime', 'Role') - .limit(GUILD_PER_PAGE).lean(); + .limit(GUILD_PER_PAGE).lean({ getters: true }); return list }