军团:添加活跃排行榜
This commit is contained in:
@@ -221,8 +221,17 @@ export const REDIS_KEY = {
|
||||
TOWER_RANK: "towerRank", // 天梯排行榜
|
||||
COM_TEAM_SEARCH_PRE: 'comTeamSerQ', // 匹配中的玩家,按品质分
|
||||
PVP_RANK: "pvpRank", // pvp排行榜
|
||||
GUILD_INFO: "guildInfo", // 公会信息
|
||||
GUILD_ACTIVE_RANK: "guildActiveRank", // 公会周活跃排行榜
|
||||
}
|
||||
|
||||
// 各排行榜对应hash的key
|
||||
export const REDIS_RANK_TO_INFO = new Map([
|
||||
[REDIS_KEY.TOWER_RANK, REDIS_KEY.USER_INFO],
|
||||
[REDIS_KEY.PVP_RANK, REDIS_KEY.PVP_RANK],
|
||||
[REDIS_KEY.GUILD_ACTIVE_RANK, REDIS_KEY.GUILD_INFO]
|
||||
]);
|
||||
|
||||
export const FUNC_OPT_TYPE = {
|
||||
LEVEL_UP: 1,
|
||||
BATTLE_END: 2
|
||||
@@ -310,7 +319,8 @@ export const FILENAME = {
|
||||
DIC_ACTIVE_WEEK_REWARD: 'dic_army_activeWeekReward',
|
||||
DIC_MAIL: 'dic_email_army',
|
||||
DIC_ARMY_TRAIN_JU_DIAN: 'dic_army_trainJuDian',
|
||||
DIC_ARMY_TRAIN_SOLO_REWARD: 'dic_army_trainSoloReward'
|
||||
DIC_ARMY_TRAIN_SOLO_REWARD: 'dic_army_trainSoloReward',
|
||||
DIC_ARMY_ACTIVE_POINT_WAYS: 'dic_army_activePointWays'
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -60,6 +60,9 @@ export default class Guild extends BaseModel {
|
||||
@prop({ required: true, default: 0 })
|
||||
activeWeekly: number;
|
||||
|
||||
@prop({ required: true, default: Date.now() })
|
||||
activeUpdateTime: number;
|
||||
|
||||
@prop({ required: true, default: new Date(), select: false })
|
||||
refTimeDaily: Date;
|
||||
|
||||
@@ -90,7 +93,7 @@ export default class Guild extends BaseModel {
|
||||
delete update._id;
|
||||
const code = genCode(6);
|
||||
const result: GuildType = await GuildModel.findOneAndUpdate({ code }, update, { upsert: true, new: true })
|
||||
.populate('leader', 'roleId roleName sHid headHid lv loginTime ce', 'Role')
|
||||
.populate('leader', { roleId: 1, roleName: 1, sHid: 1, headHid: 1, lv: 1, loginTime: 1, ce: 1, title: 1, _id: 0 }, 'Role')
|
||||
.lean();
|
||||
|
||||
return result;
|
||||
@@ -113,7 +116,19 @@ export default class Guild extends BaseModel {
|
||||
.sort({ lv: -1, guildCe: -1 })
|
||||
.limit(GUILD_PER_PAGE).skip((page - 1) * GUILD_PER_PAGE)
|
||||
.select('code icon name lv memberCnt leader ceLimit isAuto')
|
||||
.populate('leader', 'roleName', 'Role')
|
||||
.populate('leader', { roleName: 1, _id: 0 }, 'Role')
|
||||
.lean();
|
||||
return guildList;
|
||||
}
|
||||
|
||||
|
||||
public static async getRank(serverId: number, page: number = 1) {
|
||||
|
||||
const guildList: GuildType[] = await GuildModel.find({ status: GUILD_STATUS.RUNNING, serverId }, {_id: 0})
|
||||
.sort({ activeWeekly: -1, activeUpdateTime: -1 })
|
||||
.limit(100).skip((page - 1) * 100)
|
||||
.select('code icon name lv leader activeWeekly activeUpdateTime')
|
||||
.populate('leader', {roleName: 1, title: 1, sHid: 1, headHid: 1, lv: 1, _id: 0}, 'Role')
|
||||
.lean();
|
||||
return guildList;
|
||||
}
|
||||
@@ -126,7 +141,7 @@ export default class Guild extends BaseModel {
|
||||
public static async findByCode(code: string, serverId: number, select?: string) {
|
||||
const result: GuildType = await GuildModel.findOne({ code, status: GUILD_STATUS.RUNNING, serverId })
|
||||
.select(select)
|
||||
.populate('leader', 'roleId roleName sHid headHid lv loginTime ce', 'Role')
|
||||
.populate('leader', {roleId: 1, roleName: 1, sHid: 1, headHid: 1, lv: 1, loginTime: 1, ce: 1, title: 1, _id: 0}, 'Role')
|
||||
.lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -127,8 +127,9 @@ export default class UserGuild extends BaseModel {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async updateInfo(roleId: string, update: UserGuildUpdateParam, incParam?: { activeDaily?: number, activeWeekly?: number, trainCount?: number }, select?: string) {
|
||||
const result = await UserGuildModel.findOneAndUpdate({ roleId, status: USER_GUILD_STATUS.ON }, { $set: update, $inc: incParam }, { new: true }).select(select).lean();
|
||||
public static async updateInfo(roleId: string, update: UserGuildUpdateParam, incParam: { activeDaily?: number, activeWeekly?: number, trainCount?: number }, select?: string) {
|
||||
console.log(roleId, JSON.stringify(update))
|
||||
const result: UserGuildType = await UserGuildModel.findOneAndUpdate({ roleId, status: USER_GUILD_STATUS.ON }, { $set: update, $inc: incParam }, { new: true }).select(select).lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -47,6 +47,7 @@ import { dicGuildAuth } from './dictionary/DicGuildAuth';
|
||||
import { dicCenterBase, dicEquipPriduceBase, dicBossBase, dicTrainBase, dicDonateBase, dicWishPoolBase, dicStoreBase, dicStructureConsume } from "./dictionary/DicStructure";
|
||||
import { dicGuildActiveDayReward } from './dictionary/DicGuildActiveDayReward';
|
||||
import { dicGuildActiveWeekReward } from './dictionary/DicGuildActiveWeekReward';
|
||||
import { dicGuildActiveWays } from './dictionary/DicGuildActiveWays';
|
||||
import { dicGuildPosition } from "./dictionary/DicGuildPosition";
|
||||
import { dicMail } from "./dictionary/DicMail";
|
||||
import { dicArmyTrainJuDian } from './dictionary/DicArmyTrainJuDian';
|
||||
@@ -126,7 +127,8 @@ export const gameData = {
|
||||
guildPosition: dicGuildPosition,
|
||||
armyTrainJuDian: dicArmyTrainJuDian,
|
||||
trainSoloReward: dicTrainSoloReward,
|
||||
mail: dicMail
|
||||
mail: dicMail,
|
||||
guildActiveWays: dicGuildActiveWays
|
||||
};
|
||||
|
||||
// 在此提供一些原先在gamedata中提供的方法,以便更方便获取gameData数据
|
||||
@@ -362,3 +364,9 @@ export function getGuildActiveWeekReward(point: number) {
|
||||
if(result) reward = result.reward;
|
||||
return reward;
|
||||
}
|
||||
|
||||
export function getGuildActiveByIdAndType(id: number, type: number) {
|
||||
let dicWay = gameData.guildActiveWays.get(id);
|
||||
if(!dicWay) return 0;
|
||||
return dicWay.activePoint.get(type.toString());
|
||||
}
|
||||
|
||||
25
shared/pubUtils/dictionary/DicGuildActiveWays.ts
Normal file
25
shared/pubUtils/dictionary/DicGuildActiveWays.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
// 各种操作可以增加的活跃
|
||||
import { readJsonFile, decodeIdCntArrayStr } from '../util'
|
||||
import { FILENAME } from '../../consts'
|
||||
|
||||
export interface DicGuildActiveWays {
|
||||
|
||||
// id
|
||||
readonly id: number;
|
||||
// 最大次数
|
||||
readonly count: number;
|
||||
// 奖励
|
||||
readonly activePoint: Map<string, number>;
|
||||
|
||||
}
|
||||
|
||||
const str = readJsonFile(FILENAME.DIC_ARMY_ACTIVE_POINT_WAYS);
|
||||
let arr = JSON.parse(str);
|
||||
|
||||
export const dicGuildActiveWays = new Map<number, DicGuildActiveWays>();
|
||||
|
||||
arr.forEach(o => {
|
||||
o.activePoint = decodeIdCntArrayStr(o.activePoint, 1);
|
||||
dicGuildActiveWays.set(o.id, o);
|
||||
});
|
||||
arr = undefined;
|
||||
@@ -122,6 +122,43 @@ export class RankParam {
|
||||
}
|
||||
}
|
||||
|
||||
export class GuildRankParam {
|
||||
icon: number;
|
||||
name: string;
|
||||
lv: number;
|
||||
leader: {
|
||||
roleName: string;
|
||||
title: number;
|
||||
lv: number;
|
||||
headHid: number;
|
||||
sHid: number;
|
||||
}
|
||||
|
||||
constructor(icon: number, name: string, lv: number, leader: {roleName: string, title: number, lv: number, headHid: number, sHid: number}) {
|
||||
this.icon = icon;
|
||||
this.name = name;
|
||||
this.lv = lv;
|
||||
let _leader = new GuildLeader(leader);
|
||||
this.leader = _leader;
|
||||
}
|
||||
}
|
||||
|
||||
export class GuildLeader {
|
||||
roleName: string;
|
||||
title: number;
|
||||
lv: number;
|
||||
headHid: number;
|
||||
sHid: number;
|
||||
|
||||
constructor(leader: {roleName: string, title: number, lv: number, headHid: number, sHid: number}) {
|
||||
this.roleName = leader.roleName;
|
||||
this.title = leader.title;
|
||||
this.lv = leader.lv;
|
||||
this.headHid = leader.headHid;
|
||||
this.sHid = leader.sHid;
|
||||
}
|
||||
}
|
||||
|
||||
export class PlayerDetailHero {
|
||||
actorId: number;
|
||||
lv: number;
|
||||
|
||||
Reference in New Issue
Block a user