军团活动:蛮夷入侵定时任务及推送
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user