军团活动:蛮夷入侵定时任务及推送

This commit is contained in:
luying
2021-03-18 21:07:06 +08:00
parent 2cf3b0ffe0
commit 7e7be94688
11 changed files with 289 additions and 39 deletions

View File

@@ -2,11 +2,17 @@ import { ServerlistModel } from "../db/Serverlist";
import { RoleModel } from "../db/Role";
import { reduceCe } from "../pubUtils/util";
import { GUILDACTIVITY } from "../pubUtils/dicParam";
import { gameData } from "../pubUtils/data";
import { gameData, getTodayGuildActivity } from "../pubUtils/data";
import { getCurHourPoint, getCutDay, nowSeconds } from "../pubUtils/timeUtil";
import { GUILD_ACTIVITY_STATUS, GET_POINT_WAYS, GUILD_ACTIVITY_TYPE } from "../consts";
import { GUILD_ACTIVITY_STATUS, GET_POINT_WAYS, GUILD_ACTIVITY_TYPE, REDIS_KEY } from "../consts";
import { Record } from "../db/UserGuildActivityRec";
import { GateMembersRec, GateActivityObject } from "../domain/battleField/guildActivity";
import { DicGuildActivity } from "../pubUtils/dictionary/DicGuildActivity";
import { getUnionRank, getRank, getGuildKeyName } from "./redisService";
import { GuildModel } from "../db/Guild";
import { SimpleGuildRankParam, SimpleRoleRankParam } from "../domain/rank";
import { getGuildChannelSid, getWorldChannelSid } from "./chatChannelService";
import { pinus } from "pinus";
let gateActivityObj: GateActivityObject;
export function getGuildActivityObj(aid: number) {
@@ -60,7 +66,11 @@ export async function getMedianCe(serverId: number) {
export function getGuildActivityStatus(id: number) {
let dicGuildActivity = gameData.guildActivity.get(id);
if(!dicGuildActivity) return false;
return getGuildActivityByDic(dicGuildActivity);
}
export function getGuildActivityByDic(dicGuildActivity: DicGuildActivity) {
let startTime = getCurHourPoint(dicGuildActivity.startTime);
let countdownTime = getCurHourPoint(dicGuildActivity.countDown);
let { duringTime, openDay } = dicGuildActivity;
@@ -120,4 +130,72 @@ export function getRecordScore(aid: number, record: { round: number, dataId: num
return { score: sum, newRecords, memberRecord }
}
/**
* 获得军团活动排行榜
* @param guildCode
* @param serverId
* @param roleId
* @param roleName
*/
export async function getGuildActivityRank(guildCode: string, serverId: number, roleId?: string, roleName?: string) {
let guildRankResult = await getUnionRank(REDIS_KEY.GUILD_ACTIVITY, serverId, guildCode);
let guildRank = new Array<SimpleGuildRankParam>();
for(let { rank, code, name, num } of guildRankResult.ranks) {
let param = new SimpleGuildRankParam(rank, code, name, num);
guildRank.push(param);
}
let myGuildRank: SimpleGuildRankParam;
if(guildRankResult.myRank) {
let { rank, code, name, num } = guildRankResult.myRank;
myGuildRank = new SimpleGuildRankParam(rank, code, name, num);
} else {
let guild = await GuildModel.findByCode(guildCode, serverId, 'name');
myGuildRank = new SimpleGuildRankParam(0, guildCode, guild.name, 0);
}
let memberRankResult = await getRank(getGuildKeyName(REDIS_KEY.USER_GUILD_ACTIVITY, guildCode), serverId, roleId);
let memberRank = new Array<SimpleRoleRankParam>();
for(let { rank, roleId, roleName, num } of memberRankResult.ranks) {
let param = new SimpleRoleRankParam(rank, roleId, roleName, num);
memberRank.push(param)
}
let myMemberRank: SimpleRoleRankParam;
if(roleName) {
if(memberRankResult.myRank) {
let { rank, roleId, roleName, num } = memberRankResult.myRank;
myMemberRank = new SimpleRoleRankParam(rank, roleId, roleName, num);
} else {
myMemberRank = new SimpleRoleRankParam(0, roleId, roleName, 0);
}
}
return { guildRank, myGuildRank, memberRank, myMemberRank }
}
/**
* 对这个guild服内所有军团发排行榜信息
*/
export async function sendAllGuildRanks() {
let obj = getGuildActivityObj(GUILD_ACTIVITY_TYPE.GATE_ACTIVITY);
let guilds = obj.getGuilds();
for(let [ serverId, guildCodes ] of guilds) {
// TODO 不需要每个军团都排序一次
for(let guildCode of guildCodes) {
let ranks = await getGuildActivityRank(guildCode, serverId);
let chatSid = await getGuildChannelSid(guildCode);
pinus.app.rpc.chat.guildRemote.pushRank.toServer(chatSid, ranks);
}
}
}
export async function sendGuildActEndMsg() {
let obj = getGuildActivityObj(GUILD_ACTIVITY_TYPE.GATE_ACTIVITY);
let guilds = obj.getGuilds();
for(let [ serverId ] of guilds) {
let chatSid = await getWorldChannelSid(serverId);
pinus.app.rpc.chat.chatRemote.sendGuildActivityEnd.toServer(chatSid, serverId);
}
}