diff --git a/game-server/app/servers/battle/handler/guildHandler.ts b/game-server/app/servers/battle/handler/guildHandler.ts index bb612ee33..ecf2d63bd 100644 --- a/game-server/app/servers/battle/handler/guildHandler.ts +++ b/game-server/app/servers/battle/handler/guildHandler.ts @@ -71,7 +71,7 @@ export class GuildHandler { await UserGuildApplyModel.deleteApply(roleId); // 删除玩家所有对其他公会的申请 // 加入排行 - let params = new GuildRankParam(guild.icon, guild.name, guild.lv, guild.leader); + let params = new GuildRankParam(guild.icon, guild.name, guild.lv, guild.leader, guild.memberCnt); await setRank(REDIS_KEY.GUILD_ACTIVE_RANK, serverId, guild.code, 0, Date.now(), params); let rank = await getMyRank(REDIS_KEY.GUILD_ACTIVE_RANK, serverId, guild.code); @@ -919,9 +919,9 @@ export class GuildHandler { let {ranks, myRank} = await getRank(REDIS_KEY.GUILD_ACTIVE_RANK, serverId, myUserGuild.guildCode); if(!myRank) { let guild = await GuildModel.findByCode(myUserGuild.guildCode, serverId, 'code icon name lv leader activeWeekly'); - let {icon, name, lv, leader, activeWeekly} = guild; + let {icon, name, lv, leader, activeWeekly, memberCnt} = guild; let _leader = leader; - let param = new GuildRankParam(icon, name, lv, _leader); + let param = new GuildRankParam(icon, name, lv, _leader, memberCnt); myRank = {...param, num: activeWeekly, rank: 0}; } diff --git a/game-server/app/servers/guild/handler/cityActivityHandler.ts b/game-server/app/servers/guild/handler/cityActivityHandler.ts index c3b35c7ac..4f3d7bf13 100644 --- a/game-server/app/servers/guild/handler/cityActivityHandler.ts +++ b/game-server/app/servers/guild/handler/cityActivityHandler.ts @@ -241,7 +241,7 @@ export class CityActivityHandler { let guild = await GuildModel.findByCode(guildCode, serverId); let leader = guild.leader; - let params = new GuildRankParam(guild.icon, guild.name, guild.lv, leader); + let params = new GuildRankParam(guild.icon, guild.name, guild.lv, leader, guild.memberCnt); let guildScore = await setRank(getCityKeyName(REDIS_KEY.CITY_ACTIVITY, cityId), serverId, guild.code, damage, Date.now(), params, true); gateHp = obj.getGateHpAndInc(serverId, cityId, dicCity.hp, -1 * damage); diff --git a/game-server/app/servers/guild/handler/gateActivityHandler.ts b/game-server/app/servers/guild/handler/gateActivityHandler.ts index 83eb304d4..1fbe0a593 100644 --- a/game-server/app/servers/guild/handler/gateActivityHandler.ts +++ b/game-server/app/servers/guild/handler/gateActivityHandler.ts @@ -145,7 +145,7 @@ export class GateActivityHandler { let guild = await GuildModel.findByCode(guildCode, serverId); let leader = guild.leader; - let params = new GuildRankParam(guild.icon, guild.name, guild.lv, leader); + let params = new GuildRankParam(guild.icon, guild.name, guild.lv, leader, guild.memberCnt); let guildScore = await setRank(REDIS_KEY.GATE_ACTIVITY, serverId, guild.code, score, Date.now(), params, true); // 更新数据库 @@ -238,7 +238,7 @@ export class GateActivityHandler { let guild = await GuildModel.findByCode(guildCode, serverId); let leader = guild.leader; - let params = new GuildRankParam(guild.icon, guild.name, guild.lv, leader); + let params = new GuildRankParam(guild.icon, guild.name, guild.lv, leader, guild.memberCnt); await setRank(REDIS_KEY.GATE_ACTIVITY, serverId, guild.code, score, Date.now(), params, true); } diff --git a/game-server/app/servers/role/handler/rankHandler.ts b/game-server/app/servers/role/handler/rankHandler.ts index 72343a1d1..b38037785 100644 --- a/game-server/app/servers/role/handler/rankHandler.ts +++ b/game-server/app/servers/role/handler/rankHandler.ts @@ -6,8 +6,9 @@ import { UserGuildModel } from "../../../db/UserGuild"; import { existsRank, initSingleRankWithServer, getRank } from "../../../services/redisService"; import { GuildModel } from "../../../db/Guild"; import { GuildRankParam } from "../../../domain/rank"; +import { HeroModel } from "../../../db/Hero"; -export default function(app: Application) { +export default function (app: Application) { return new RoleHandler(app); } @@ -15,7 +16,7 @@ export class RoleHandler { constructor(private app: Application) { } - async getGeneralRank(msg: { }, session: BackendSession) { + async getGeneralRank(msg: {}, session: BackendSession) { let roleId = session.get('roleId'); let roleName = session.get('roleName'); let serverId = session.get('serverId'); @@ -23,17 +24,17 @@ export class RoleHandler { return resResult(STATUS.SUCCESS, { role: [ - { type: 1, roleId: "8l6HPZAbdS", roleName: "东方月初", head: 11219, frame: 11301, spine: 11419, lv: 40, vLv: 0, guildName: "军团A", ce: 464262, num: 464262, received: [],}, - { type: 2, roleId: "8l6HPZAbdS", roleName: "东方月初", head: 11219, frame: 11301, spine: 11419, lv: 40, vLv: 0, guildName: "军团A", ce: 464262, num: 64262, received: [],}, - { type: 3, roleId: "8l6HPZAbdS", roleName: "东方月初", head: 11219, frame: 11301, spine: 11419, lv: 40, vLv: 0, guildName: "军团A", ce: 464262, num: 100, received: [],}, - { type: 4, roleId: "8l6HPZAbdS", roleName: "东方月初", head: 11219, frame: 11301, spine: 11419, lv: 40, vLv: 0, guildName: "军团A", ce: 464262, num: 99, received: [],}, + { type: 1, roleId: "8l6HPZAbdS", roleName: "东方月初", head: 11219, frame: 11301, spine: 11419, lv: 40, vLv: 0, guildName: "军团A", ce: 464262, num: 464262, received: [], }, + { type: 2, roleId: "8l6HPZAbdS", roleName: "东方月初", head: 11219, frame: 11301, spine: 11419, lv: 40, vLv: 0, guildName: "军团A", ce: 464262, num: 64262, received: [], }, + { type: 3, roleId: "8l6HPZAbdS", roleName: "东方月初", head: 11219, frame: 11301, spine: 11419, lv: 40, vLv: 0, guildName: "军团A", ce: 464262, num: 100, received: [], }, + { type: 4, roleId: "8l6HPZAbdS", roleName: "东方月初", head: 11219, frame: 11301, spine: 11419, lv: 40, vLv: 0, guildName: "军团A", ce: 464262, num: 99, received: [], }, ], battle: [ // 右边列 - {type: 5, roleId: "8l6HPZAbdS", roleName: "东方月初", head: 11219, frame: 11301, spine: 11419, guildName: "军团A", hid: 19, skinId: 41020, num: 464262, received: [],}, - {type: 6, roleId: "8l6HPZAbdS", roleName: "东方月初", head: 11219, frame: 11301, spine: 11419, guildName: "军团A", hid: 19, skinId: 41020, num: 99, received: [],}, - {type: 7, roleId: "8l6HPZAbdS", roleName: "东方月初", head: 11219, frame: 11301, spine: 11419, guildName: "军团A", hid: 19, skinId: 41020, num: 5060, received: [],}, - {type: 8, roleId: "8l6HPZAbdS", roleName: "东方月初", head: 11219, frame: 11301, spine: 11419, guildName: "军团A", hid: 19, skinId: 41020, num: 323, received: [],}, - {type: 9, roleId: "8l6HPZAbdS", roleName: "东方月初", head: 11219, frame: 11301, spine: 11419, guildName: "军团A", hid: 19, skinId: 41020, num: 9224, received: [],}, + { type: 5, roleId: "8l6HPZAbdS", roleName: "东方月初", head: 11219, frame: 11301, spine: 11419, guildName: "军团A", hid: 19, skinId: 41020, num: 464262, received: [], }, + { type: 6, roleId: "8l6HPZAbdS", roleName: "东方月初", head: 11219, frame: 11301, spine: 11419, guildName: "军团A", hid: 19, skinId: 41020, num: 99, received: [], }, + { type: 7, roleId: "8l6HPZAbdS", roleName: "东方月初", head: 11219, frame: 11301, spine: 11419, guildName: "军团A", hid: 19, skinId: 41020, num: 5060, received: [], }, + { type: 8, roleId: "8l6HPZAbdS", roleName: "东方月初", head: 11219, frame: 11301, spine: 11419, guildName: "军团A", hid: 19, skinId: 41020, num: 323, received: [], }, + { type: 9, roleId: "8l6HPZAbdS", roleName: "东方月初", head: 11219, frame: 11301, spine: 11419, guildName: "军团A", hid: 19, skinId: 41020, num: 9224, received: [], }, ] }); } @@ -64,11 +65,11 @@ export class RoleHandler { ranks: ranks.map((cur, i) => { let { roleId, roleName, head, frame, spine, lv, vLv, ce } = cur; return { - rank: i+1, num: 323-i, roleId, roleName, head, frame, spine, lv, vLv, guildName: `军团${i + 1}`, ce, lineup + rank: i + 1, num: 323 - i, roleId, roleName, head, frame, spine, lv, vLv, guildName: `军团${i + 1}`, ce, lineup } }), myRank: { - rank: 0, num: 104, roleId, roleName, head, frame, spine, lv, vLv,guildName, ce, lineup + rank: 0, num: 104, roleId, roleName, head, frame, spine, lv, vLv, guildName, ce, lineup } }); } @@ -82,23 +83,54 @@ export class RoleHandler { let { type } = msg; const myUserGuild = await UserGuildModel.getMyGuild(roleId, 'auth guildCode'); - if(!myUserGuild) return resResult(STATUS.GUILD_NOT_FOUND); - + if (!myUserGuild) return resResult(STATUS.GUILD_NOT_FOUND); + const hasRank = await existsRank(REDIS_KEY.GUILD_ACTIVE_RANK, serverId); - if(!hasRank) await initSingleRankWithServer(REDIS_KEY.GUILD_ACTIVE_RANK, serverId); - - let {ranks, myRank} = await getRank(REDIS_KEY.GUILD_ACTIVE_RANK, serverId, myUserGuild.guildCode); - if(!myRank) { + if (!hasRank) await initSingleRankWithServer(REDIS_KEY.GUILD_ACTIVE_RANK, serverId); + + let { ranks, myRank } = await getRank(REDIS_KEY.GUILD_ACTIVE_RANK, serverId, myUserGuild.guildCode); + if (!myRank) { let guild = await GuildModel.findByCode(myUserGuild.guildCode, serverId, 'code icon name lv leader activeWeekly memberCnt'); - let {icon, name, lv, leader, activeWeekly, memberCnt} = guild; + let { icon, name, lv, leader, activeWeekly, memberCnt } = guild; let _leader = leader; let param = new GuildRankParam(icon, name, lv, _leader, memberCnt); - myRank = {...param, num: activeWeekly, rank: 0}; + myRank = { ...param, num: activeWeekly, rank: 0 }; } return resResult(STATUS.SUCCESS, { type, ranks, myRank }); } + // 查看活跃排行榜 + async getHeroRank(msg: { type: number, hid: number }, session: BackendSession) { + + let roleId = session.get('roleId'); + let serverId = session.get('serverId') + + let { type, hid } = msg; + + let lineup = [ + { hid: 27, star: 6, colorStar: 6, lv: 96, quality: 3 }, + { hid: 32, star: 6, colorStar: 6, lv: 96, quality: 3 }, + { hid: 19, star: 6, colorStar: 6, lv: 96, quality: 3 }, + { hid: 11, star: 6, colorStar: 6, lv: 96, quality: 3 }, + { hid: 12, star: 6, colorStar: 6, lv: 96, quality: 3 }, + { hid: 8, star: 6, colorStar: 6, lv: 96, quality: 3 } + ] + let ranks = await HeroModel.getRank(hid, serverId, null, 200); + + return resResult(STATUS.SUCCESS, { + type, hid, ranks: ranks.map((cur, i) => { + let { ce, roleId, roleName, hid, star, colorStar, lv, quality } = cur; + + return { + rank: i + 1, num: ce, roleId, roleName, head: 11219, frame: 11301, spine: 11419, lv: 40, vLv: 0, guildName: "军团A", ce: 464262, + hero: [{ hid, star, colorStar, lv, quality }], + lineup + } + }) + }); + } + async receiveReward(msg: { type: number, id: number }, session: BackendSession) { let { type } = msg; diff --git a/game-server/app/services/guildService.ts b/game-server/app/services/guildService.ts index aa429162c..a02bf3e29 100644 --- a/game-server/app/services/guildService.ts +++ b/game-server/app/services/guildService.ts @@ -173,7 +173,7 @@ export async function addActive(roleId: string, serverId: number, id: number, ty // 排行榜更新 let leader = await RoleModel.findById(guild.leader); - let guildRankParam = new GuildRankParam(guild.icon, guild.name, guild.lv, new GuildLeader(leader)); + let guildRankParam = new GuildRankParam(guild.icon, guild.name, guild.lv, new GuildLeader(leader), guild.memberCnt); await setRank(REDIS_KEY.GUILD_ACTIVE_RANK, serverId, guild.code, guild.activeWeekly, guild.activeUpdateTime * 1000, guildRankParam); pinus.app.rpc.chat.guildRemote.updateInfo.toServer(CHAT_SERVER, guildCode, { activeDaily: guild.activeDaily, activeWeekly: guild.activeWeekly }); return { status: 1, guild, userGuild }; diff --git a/game-server/app/services/redisService.ts b/game-server/app/services/redisService.ts index 5b03fba24..5dd97147f 100644 --- a/game-server/app/services/redisService.ts +++ b/game-server/app/services/redisService.ts @@ -31,7 +31,7 @@ export async function initAllRank() { } /** - * 分服内初始redis排行榜 + * 分服内初始redis排行榜 * * @param serverId 服务器 */ @@ -87,11 +87,11 @@ async function setRankRedisFromDb(type: string, serverId: number) { } } else if (type == REDIS_KEY.GUILD_ACTIVE_RANK) { let ranks = await GuildModel.getRank(serverId); - for(let { code, icon, name, lv, leader, activeWeekly = 0, activeUpdateTime = 0 } of ranks) { + for(let { code, icon, name, lv, leader, activeWeekly = 0, activeUpdateTime = 0, memberCnt } of ranks) { let _leader = leader; let { roleName, title, head, frame, spine, lv: leaderLv } = _leader; await redisClient().zaddAsync(getKeyName(REDIS_KEY.GUILD_ACTIVE_RANK, serverId), encodeScoreWithTime(activeWeekly, activeUpdateTime * 1000 ), code); - let rankParam = new GuildRankParam(icon, name, lv, { roleName, title, head, frame, spine, lv: leaderLv }); + let rankParam = new GuildRankParam(icon, name, lv, { roleName, title, head, frame, spine, lv: leaderLv }, memberCnt); await redisUserInfoAdd(REDIS_KEY.GUILD_INFO, code, rankParam); } } @@ -186,7 +186,7 @@ export async function setRankWithoutUserInfo(key: string, serverId: number, myId let guild = await GuildModel.findByCode(myId, serverId); let leader = guild.leader; - let guildRankParam = new GuildRankParam(guild.icon, guild.name, guild.lv, leader); + let guildRankParam = new GuildRankParam(guild.icon, guild.name, guild.lv, leader, guild.memberCnt); await redisUserInfoAdd(infoKey, myId, guildRankParam); } diff --git a/shared/db/Hero.ts b/shared/db/Hero.ts index 50f11e841..0b4757b80 100644 --- a/shared/db/Hero.ts +++ b/shared/db/Hero.ts @@ -266,6 +266,11 @@ export default class Hero extends BaseModel { const user: HeroType[] = await HeroModel.find(searchObj).lean(lean); return user; } + + public static async getRank(hid: number, serverId: number, select?: string, limit = 100) { + let result: HeroType[] = await HeroModel.find({serverId, hid}, { _id: false} ).select(select).limit(limit).lean({ getters: true }); + return result; + } } export const HeroModel = getModelForClass(Hero);