军团活动:修复rpc调用以及其他问题
This commit is contained in:
@@ -2,17 +2,22 @@ import { ServerlistModel } from "../db/Serverlist";
|
||||
import { RoleModel } from "../db/Role";
|
||||
import { reduceCe } from "../pubUtils/util";
|
||||
import { GUILDACTIVITY } from "../pubUtils/dicParam";
|
||||
import { gameData, getTodayGuildActivity } from "../pubUtils/data";
|
||||
import { gameData, getGuildAuctionRewards, getTodayGuildActivity } from "../pubUtils/data";
|
||||
import { getCurHourPoint, getCutDay, nowSeconds } from "../pubUtils/timeUtil";
|
||||
import { GUILD_ACTIVITY_STATUS, GET_POINT_WAYS, GUILD_ACTIVITY_TYPE, REDIS_KEY } from "../consts";
|
||||
import { Record } from "../db/UserGuildActivityRec";
|
||||
import { GUILD_ACTIVITY_STATUS, GET_POINT_WAYS, GUILD_ACTIVITY_TYPE, REDIS_KEY, AUCTION_SOURCE, MAIL_TYPE } from "../consts";
|
||||
import { Record, UserGuildActivityRecModel } from "../db/UserGuildActivityRec";
|
||||
import { GateMembersRec, GateActivityObject } from "../domain/battleField/guildActivity";
|
||||
import { DicGuildActivity } from "../pubUtils/dictionary/DicGuildActivity";
|
||||
import { getUnionRank, getRank, getGuildKeyName } from "./redisService";
|
||||
import { getUnionRank, getRank, getGuildKeyName, getMyUnionRank, getRankScore } from "./redisService";
|
||||
import { GuildModel } from "../db/Guild";
|
||||
import { SimpleGuildRankParam, SimpleRoleRankParam } from "../domain/rank";
|
||||
import { getGuildChannelSid, getWorldChannelSid } from "./chatChannelService";
|
||||
import { pinus } from "pinus";
|
||||
import { GuildActivityRecordModel } from "../db/GuildActivityRec";
|
||||
import { uniq } from 'underscore'
|
||||
import { genAuction } from "./auctionService";
|
||||
import { sendMail } from "./mailService";
|
||||
import { getHonourObject } from '../pubUtils/itemUtils';
|
||||
|
||||
let gateActivityObj: GateActivityObject;
|
||||
export function getGuildActivityObj(aid: number) {
|
||||
@@ -177,25 +182,85 @@ export async function getGuildActivityRank(guildCode: string, serverId: number,
|
||||
|
||||
/**
|
||||
* 对这个guild服内所有军团发排行榜信息
|
||||
* @param aid 活动类型
|
||||
*/
|
||||
export async function sendAllGuildRanks() {
|
||||
let obj = getGuildActivityObj(GUILD_ACTIVITY_TYPE.GATE_ACTIVITY);
|
||||
export async function sendAllGuildRanks(aid: number) {
|
||||
let obj = getGuildActivityObj(aid);
|
||||
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);
|
||||
pinus.app.rpc.chat.guildRemote.pushRank.toServer(chatSid, guildCode, ranks);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export async function sendGuildActEndMsg() {
|
||||
let obj = getGuildActivityObj(GUILD_ACTIVITY_TYPE.GATE_ACTIVITY);
|
||||
/**
|
||||
* 活动结束发送结束信号以及结算奖励
|
||||
* @param aid 活动类型
|
||||
*/
|
||||
export async function sendGuildActEndMsg(aid: number) {
|
||||
let obj = getGuildActivityObj(aid);
|
||||
let guilds = obj.getGuilds();
|
||||
for(let [ serverId ] of guilds) {
|
||||
for(let [ serverId, guildCodes ] of guilds) {
|
||||
let chatSid = await getWorldChannelSid(serverId);
|
||||
pinus.app.rpc.chat.chatRemote.sendGuildActivityEnd.toServer(chatSid, serverId);
|
||||
|
||||
if(aid == GUILD_ACTIVITY_TYPE.GATE_ACTIVITY) {
|
||||
for(let guildCode of guildCodes) {
|
||||
await gateActivitySettleReward(guildCode, serverId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 单个军团城门血条破了之后给他发奖励
|
||||
* @param guildCode
|
||||
*/
|
||||
export async function sendSingleGuildGateActEndMsg(guildCode: string, serverId: number) {
|
||||
let chatSid = await getGuildChannelSid(guildCode);
|
||||
pinus.app.rpc.chat.guildRemote.sendGuildActivityEnd.toServer(chatSid, guildCode);
|
||||
await gateActivitySettleReward(guildCode, serverId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 军团结算奖励
|
||||
* @param guildCode
|
||||
* @param serverId
|
||||
*/
|
||||
export async function gateActivitySettleReward(guildCode: string, serverId: number) {
|
||||
let obj = getGuildActivityObj(GUILD_ACTIVITY_TYPE.GATE_ACTIVITY);
|
||||
let { gateHp, members } = obj.getObj(guildCode, serverId);
|
||||
members = uniq(members);
|
||||
|
||||
let rank = await getMyUnionRank(REDIS_KEY.GUILD_ACTIVITY, serverId, guildCode);
|
||||
let guildScore = await getRankScore(REDIS_KEY.GUILD_ACTIVITY, serverId, guildCode);
|
||||
|
||||
let rewards = getGuildAuctionRewards(GUILD_ACTIVITY_TYPE.GATE_ACTIVITY, rank);
|
||||
|
||||
let rec = await GuildActivityRecordModel.updateInfo(guildCode, {
|
||||
isSuccess: gateHp > 0,
|
||||
isCompleted: true,
|
||||
rank, score: guildScore, remainGateHp: gateHp,
|
||||
members, memberCnt: members.length,
|
||||
rewards
|
||||
});
|
||||
// 结算功勋等奖励
|
||||
let dic = gameData.guildActivity.get(GUILD_ACTIVITY_TYPE.GATE_ACTIVITY);
|
||||
let memberRankResult = await getRank(getGuildKeyName(REDIS_KEY.USER_GUILD_ACTIVITY, guildCode), serverId, '');
|
||||
for(let { rank, roleId, num: myScore } of memberRankResult.ranks) {
|
||||
let honour = dic.honour + myScore * GUILDACTIVITY.GATEACTIVITY_HONOUR_RATIO;
|
||||
let honourObj = getHonourObject(Math.floor(honour));
|
||||
await sendMail(MAIL_TYPE.GUILD_ACTIVITY_REWARD, roleId, '系统', [], [honourObj])
|
||||
|
||||
await UserGuildActivityRecModel.updateInfoByRoleId(roleId, { score: myScore, rank });
|
||||
}
|
||||
|
||||
// 加入拍卖行
|
||||
await genAuction(guildCode, AUCTION_SOURCE.GATE, rec.code, serverId, rewards);
|
||||
|
||||
obj.delGuildRecord(guildCode, serverId);
|
||||
}
|
||||
Reference in New Issue
Block a user